Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
openSUSE:Leap:42.3
kexec-tools
kexec-tools-ppc64-reduce-elf-loads.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kexec-tools-ppc64-reduce-elf-loads.patch of Package kexec-tools
From: Petr Tesarik <ptesarik@suse.com> Subject: ppc64: Reduce number of ELF LOAD segments References: bsc#981339 Patch-mainline: not yet The number of program header table entries (e_phnum) is an Elf64_Half, which is a 16-bit entity, i.e. the limit is 65534 entries (one entry is reserved for NOTE). This is a hard limit, defined by the ELF standard. It is possible that more LMBs (Logical Memory Blocks) are needed to represent all RAM on some machines, and this field overflows, causing an incomplete /proc/vmcore file. This has actually happened on a machine with 31TB of RAM and an LMB size of 256MB. However, since there is usually no memory hole between adjacent LMBs, the map can be "compressed", combining multiple adjacent into a single LOAD segment. Signed-off-by: Petr Tesarik <ptesarik@suse.com> --- kexec/arch/ppc64/crashdump-ppc64.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) --- a/kexec/arch/ppc64/crashdump-ppc64.c +++ b/kexec/arch/ppc64/crashdump-ppc64.c @@ -122,6 +122,7 @@ static void exclude_crash_region(uint64_ static int get_dyn_reconf_crash_memory_ranges(void) { uint64_t start, end; + uint64_t startrange, endrange; char fname[128], buf[32]; FILE *file; unsigned int i; @@ -136,6 +137,7 @@ static int get_dyn_reconf_crash_memory_r } fseek(file, 4, SEEK_SET); + startrange = endrange = 0; for (i = 0; i < num_of_lmbs; i++) { if ((n = fread(buf, 1, 24, file)) < 0) { perror(fname); @@ -161,8 +163,16 @@ static int get_dyn_reconf_crash_memory_r if ((flags & 0x80) || !(flags & 0x8)) continue; - exclude_crash_region(start, end); + if (start != endrange) { + if (startrange != endrange) + exclude_crash_region(startrange, endrange); + startrange = start; + } + endrange = end; } + if (startrange != endrange) + exclude_crash_region(startrange, endrange); + fclose(file); return 0; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor