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@xxxxxxxxxxxxxxxxx> --- 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; _ -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility