[Crash-utility] [PATCH] Update for the "kmem -n" option on Linux 5.3-rc1 and later kernels
Dave Anderson
anderson at redhat.com
Fri Jul 26 18:34:01 UTC 2019
Hi Kazu,
Looks good -- queued for crash-7.2.7:
https://github.com/crash-utility/crash/commit/e1df72964f8a583000e6cb74e54f8efbab6721ac
Thanks for being so proactive on this one!
Dave
----- Original Message -----
>
> Hi Kazu,
>
> Do you have a sample 5.3-rc1 vmlinux/vmcore pair that I can test this with?
> You can send it to me offline.
>
> Thanks,
> Dave
>
>
> ----- Original Message -----
> > Update for the "kmem -n" option on Linux 5.3-rc1 and later kernels that
> > contain commit 326e1b8f83a4318b09033ef754f40c785aed5e68, titled
> > "mm/sparsemem: introduce a SECTION_IS_EARLY flag". With this patch,
> > the option displays a new state "E" for the flag, instead of printing
> > incorrect mem_map addresses.
> >
> > Also update the confusing comment with the one from kernel commit
> > def9b71ee651a6fee93a10734b94f93a69cdb2d4, titled "include/linux/mmzone.h:
> > fix explanation of lower bits in the SPARSEMEM mem_map pointer".
> >
> > Signed-off-by: Kazuhito Hagio <k-hagio at ab.jp.nec.com>
> > ---
> > help.c | 4 ++--
> > memory.c | 17 ++++++++++++++---
> > 2 files changed, 16 insertions(+), 5 deletions(-)
> >
> > diff --git a/help.c b/help.c
> > index d5940f789ffd..a5218a701c01 100644
> > --- a/help.c
> > +++ b/help.c
> > @@ -6597,8 +6597,8 @@ char *help_kmem[] = {
> > " the cumulative, vm_event_states counter values if they
> > exist.",
> > " -n display memory node, memory section, and memory block data",
> > " and state; the state of each memory section state is
> > encoded",
> > -" as \"P\", \"M\" and/or \"O\", meaning
> > SECTION_MARKED_PRESENT,",
> > -" SECTION_HAS_MEM_MAP and SECTION_IS_ONLINE.",
> > +" as \"P\", \"M\", \"O\" and/or \"E\", meaning
> > SECTION_MARKED_PRESENT,",
> > +" SECTION_HAS_MEM_MAP, SECTION_IS_ONLINE and
> > SECTION_IS_EARLY.",
> > " -z displays per-zone memory statistics.",
> > " -o displays each cpu's offset value that is added to per-cpu
> > symbol",
> > " values to translate them into kernel virtual addresses.",
> > diff --git a/memory.c b/memory.c
> > index 327e5355ec9c..ac7e73679405 100644
> > --- a/memory.c
> > +++ b/memory.c
> > @@ -17154,13 +17154,22 @@ nr_to_section(ulong nr)
> >
> > /*
> > * We use the lower bits of the mem_map pointer to store
> > - * a little bit of information. There should be at least
> > - * 3 bits here due to 32-bit alignment.
> > + * a little bit of information. The pointer is calculated
> > + * as mem_map - section_nr_to_pfn(pnum). The result is
> > + * aligned to the minimum alignment of the two values:
> > + * 1. All mem_map arrays are page-aligned.
> > + * 2. section_nr_to_pfn() always clears PFN_SECTION_SHIFT
> > + * lowest bits. PFN_SECTION_SHIFT is arch-specific
> > + * (equal SECTION_SIZE_BITS - PAGE_SHIFT), and the
> > + * worst combination is powerpc with 256k pages,
> > + * which results in PFN_SECTION_SHIFT equal 6.
> > + * To sum it up, at least 6 bits are available.
> > */
> > #define SECTION_MARKED_PRESENT (1UL<<0)
> > #define SECTION_HAS_MEM_MAP (1UL<<1)
> > #define SECTION_IS_ONLINE (1UL<<2)
> > -#define SECTION_MAP_LAST_BIT (1UL<<3)
> > +#define SECTION_IS_EARLY (1UL<<3)
> > +#define SECTION_MAP_LAST_BIT (1UL<<4)
> > #define SECTION_MAP_MASK (~(SECTION_MAP_LAST_BIT-1))
> >
> >
> > @@ -17257,6 +17266,8 @@ fill_mem_section_state(ulong state, char *buf)
> > bufidx += sprintf(buf + bufidx, "%s", "M");
> > if (state & SECTION_IS_ONLINE)
> > bufidx += sprintf(buf + bufidx, "%s", "O");
> > + if (state & SECTION_IS_EARLY)
> > + bufidx += sprintf(buf + bufidx, "%s", "E");
> > }
> >
> > void
> > --
> > 2.18.1
> >
> > --
> > Crash-utility mailing list
> > Crash-utility at redhat.com
> > https://www.redhat.com/mailman/listinfo/crash-utility
> >
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
More information about the Crash-utility
mailing list