[Crash-utility] [PATCH] display information about "struct page" on SPARSEMEM.

Ken'ichi Ohmichi oomichi at mxs.nes.nec.co.jp
Fri Nov 2 02:06:10 UTC 2007


Hi Dave,

This patch fixes the problem that the crash utility cannot display
"struct page" information about SPARSEMEM (not SPARSEMEM_EXTREME) properly.

The symbol mem_section is defined as the pointer array in SPARSEMEM_EXTREME.
On the other hand, SPARSEMEM's one is defined as the array of structure
mem_section like the following:

linux-2.6.23/mm/sparse.c:18L
  #ifdef CONFIG_SPARSEMEM_EXTREME
  struct mem_section *mem_section[NR_SECTION_ROOTS]
          ____cacheline_internodealigned_in_smp;
  #else
  struct mem_section mem_section[NR_SECTION_ROOTS][SECTIONS_PER_ROOT]
           ____cacheline_internodealigned_in_smp;
  #endif
  EXPORT_SYMBOL(mem_section);

The crash utility considers SPARSEMEM's one to be the pointer array,
but it is wrong. This patch fixes it.

The following results are this patch effects.

* Before applying this patch
 crash> kmem -p
   PAGE    PHYSICAL   MAPPING    INDEX CNT FLAGS
 100              0   -------    -----   0 0
 120           1000   -------    -----   0 0
 140           2000   -------    -----   0 0
 160           3000   -------    -----   0 0
 180           4000   -------    -----   0 0
 1a0           5000   -------    -----   0 0
 1c0           6000   -------    -----   0 0
 1e0           7000   -------    -----   0 0
 200           8000   -------    -----   0 0
 [snip]
 crash>

* After applying this patch
 crash> kmem -p
   PAGE    PHYSICAL   MAPPING    INDEX CNT FLAGS
 c5000000         0   -------    -----   1 400
 c5000020      1000   -------    -----   1 400
 c5000040      2000   -------    -----   1 400
 c5000060      3000   -------    -----   1 400
 c5000080      4000   -------    -----   1 400
 c50000a0      5000   -------    -----   1 400
 c50000c0      6000   -------    -----   1 400
 c50000e0      7000   -------    -----   1 400
 c5000100      8000   -------    -----   0 80000
 [snip]
 crash>


Thanks
Ken'ichi Ohmichi

---
Signed-off-by: Ken'ichi Ohmichi <oomichi at mxs.nes.nec.co.jp>

---
diff -rpuN crash-4.0-4.8.org/memory.c crash-4.0-4.8/memory.c
--- crash-4.0-4.8.org/memory.c	2007-10-31 11:49:16.000000000 +0900
+++ crash-4.0-4.8/memory.c	2007-11-01 10:28:15.000000000 +0900
@@ -12229,7 +12229,9 @@ nr_to_section(ulong nr)
 		addr = mem_sec[SECTION_NR_TO_ROOT(nr)] + 
 		    (nr & SECTION_ROOT_MASK()) * SIZE(mem_section);
 	else
-		addr = mem_sec[0] + (nr & SECTION_ROOT_MASK()) * SIZE(mem_section);
+		addr = symbol_value("mem_section") +
+		    (SECTIONS_PER_ROOT() * SECTION_NR_TO_ROOT(nr) +
+			(nr & SECTION_ROOT_MASK())) * SIZE(mem_section);
 
 	if (!IS_KVADDR(addr))
 		return 0;
_






More information about the Crash-utility mailing list