* [PATCH] ppc64: Reduce number of ELF LOAD segments
@ 2017-01-19 17:37 Petr Tesarik
2017-01-24 13:29 ` Simon Horman
0 siblings, 1 reply; 2+ messages in thread
From: Petr Tesarik @ 2017-01-19 17:37 UTC (permalink / raw)
To: Simon Horman; +Cc: kexec
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(-)
diff --git a/kexec/arch/ppc64/crashdump-ppc64.c b/kexec/arch/ppc64/crashdump-ppc64.c
index b3c8928..f62b159 100644
--- a/kexec/arch/ppc64/crashdump-ppc64.c
+++ b/kexec/arch/ppc64/crashdump-ppc64.c
@@ -123,6 +123,7 @@ static void exclude_crash_region(uint64_t start, uint64_t end)
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;
@@ -137,6 +138,7 @@ static int get_dyn_reconf_crash_memory_ranges(void)
}
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);
@@ -162,8 +164,16 @@ static int get_dyn_reconf_crash_memory_ranges(void)
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;
}
--
2.6.6
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] ppc64: Reduce number of ELF LOAD segments
2017-01-19 17:37 [PATCH] ppc64: Reduce number of ELF LOAD segments Petr Tesarik
@ 2017-01-24 13:29 ` Simon Horman
0 siblings, 0 replies; 2+ messages in thread
From: Simon Horman @ 2017-01-24 13:29 UTC (permalink / raw)
To: Petr Tesarik; +Cc: kexec
On Thu, Jan 19, 2017 at 06:37:09PM +0100, Petr Tesarik wrote:
> 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>
Thanks, applied.
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-01-24 13:30 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-19 17:37 [PATCH] ppc64: Reduce number of ELF LOAD segments Petr Tesarik
2017-01-24 13:29 ` Simon Horman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox