Hi,
This patch fixes the overflow problem that "kmem -p" cannot display
the physical addresses properly on i386 SPARSEMEM kernel.
Before applying this patch:
crash> kmem -p
PAGE PHYSICAL MAPPING INDEX CNT FLAGS
[snip]
cb000260 ffffb000 ------- ----- 1 e000400
cb000280 ffffc000 ------- ----- 1 e000400
cb0002a0 ffffd000 ------- ----- 1 e000400
cb0002c0 ffffe000 ------- ----- 1 e000400
cb0002e0 fffff000 ------- ----- 1 e000400
cb000400 0 ------- ----- 0 12080000
cb000420 1000 ------- ----- 0 12000000
cb000440 2000 ------- ----- 0 12000000
cb000460 3000 ------- ----- 0 12000000
cb000480 4000 ------- ----- 0 12000000
After applying this patch:
crash> kmem -p
PAGE PHYSICAL MAPPING INDEX CNT FLAGS
[snip]
cb000260 ffffb000 ------- ----- 1 e000400
cb000280 ffffc000 ------- ----- 1 e000400
cb0002a0 ffffd000 ------- ----- 1 e000400
cb0002c0 ffffe000 ------- ----- 1 e000400
cb0002e0 fffff000 ------- ----- 1 e000400
cb000400 100000000 ------- ----- 0 12080000
cb000420 100001000 ------- ----- 0 12000000
cb000440 100002000 ------- ----- 0 12000000
cb000460 100003000 ------- ----- 0 12000000
cb000480 100004000 ------- ----- 0 12000000
This problem can be reproduced on the following environment:
The crash utility:
crash-4.0-4.8
+ [PATCH] display information about "struct page" on SPARSEMEM.(2007/11/02)
System:
CPU: i386
MEM: 4GB or bigger
Kernel:
i386, PAE, SPARSEMEM
Thanks
Ken'ichi Ohmichi
Signed-off-by: Ken'ichi Ohmichi <oomichi(a)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-13 15:48:31.000000000 +0900
@@ -4004,7 +4004,7 @@ dump_mem_map_SPARSEMEM(struct meminfo *m
pp = section_mem_map_addr(section);
pp = sparse_decode_mem_map(pp, section_nr);
- phys = section_nr * PAGES_PER_SECTION() * PAGESIZE();
+ phys = (physaddr_t) section_nr * PAGES_PER_SECTION() * PAGESIZE();
section_size = PAGES_PER_SECTION();
for (i = 0; i < section_size;
_