Hi Dave,
When 'kmem -p'/'kmem -i' is executed on i386 linux-2.6.26 sparsemem
kernel,
current crash utility misunderstands the number of struct page in each
section and refers invalid struct page.
The cause is that SECTION_SIZE_BITS of PAE has been changed to 29 from 30
since linux-2.6.26 by the following:
[PATCH 3 of 4] sparsemem: reduce i386 PAE section size
http://www.uwsg.iu.edu/hypermail/linux/kernel/0803.3/1882.html
If applying the attached patch, the crash utility can catch up the
above change. It makes the results of both 'kmem -p' and 'kmem -i'
correct. The attached patch is for crash-4.0-7.4.
There is the same problem in makedumpfile, and I will fix it :-)
Thanks
Ken'ichi Ohmichi
Signed-off-by: Ken'ichi Ohmichi <oomichi(a)mxs.nes.nec.co.jp>
---
diff -rpuN crash-4.0-7.4.orig/defs.h crash-4.0-7.4/defs.h
--- crash-4.0-7.4.orig/defs.h	2008-10-16 17:32:46.000000000 +0900
+++ crash-4.0-7.4/defs.h	2008-10-16 17:46:30.000000000 +0900
@@ -2069,7 +2069,8 @@ struct load_module {
 #define TIF_SIGPENDING  (2)
 
 // CONFIG_X86_PAE 
-#define _SECTION_SIZE_BITS_PAE	30
+#define _SECTION_SIZE_BITS_PAE_ORIG	30
+#define _SECTION_SIZE_BITS_PAE_2_6_26	29
 #define _MAX_PHYSMEM_BITS_PAE	36
 
 // !CONFIG_X86_PAE   
diff -rpuN crash-4.0-7.4.orig/x86.c crash-4.0-7.4/x86.c
--- crash-4.0-7.4.orig/x86.c	2008-10-16 17:32:46.000000000 +0900
+++ crash-4.0-7.4/x86.c	2008-10-16 17:47:58.000000000 +0900
@@ -1819,7 +1819,12 @@ x86_init(int when)
 		}
 
 		if (machdep->flags & PAE) {
-			machdep->section_size_bits = _SECTION_SIZE_BITS_PAE;
+			if (THIS_KERNEL_VERSION < LINUX(2,6,26))
+				machdep->section_size_bits =
+					_SECTION_SIZE_BITS_PAE_ORIG;
+			else
+				machdep->section_size_bits =
+					_SECTION_SIZE_BITS_PAE_2_6_26;
 			machdep->max_physmem_bits = _MAX_PHYSMEM_BITS_PAE;
 		} else {
 			machdep->section_size_bits = _SECTION_SIZE_BITS;
_