[kexec-tools] Revert: Revert: Merge an upstream patch for fix a ppc64 makedumpfile bug with with CONFIG_SPARSEMEM_
Baoquan He
baoquan at fedoraproject.org
Sat Feb 16 10:16:08 UTC 2013
commit 8777b970208e762d358c1d46d3e0e54654ea4fb9
Author: Baoquan He <bhe at redhat.com>
Date: Sat Feb 16 18:12:25 2013 +0800
Revert: Revert: Merge an upstream patch for fix a ppc64 makedumpfile bug with with CONFIG_SPARSEMEM_EXTREME
This reverts commit 11261a5bcaea42121658c11685fd34caaa980b12.
Because failed to compile makedumpfile v1.5.2 on ppc64. Reverting
this revert is necessary.
...-auto-detect-the-correct-MAX-PHYSMEM-BITS.patch | 77 ++++++++++++++++++++
kexec-tools.spec | 2 +
2 files changed, 79 insertions(+), 0 deletions(-)
---
diff --git a/kexec-tools-2.0.3-makedumpfile-ppc64-auto-detect-the-correct-MAX-PHYSMEM-BITS.patch b/kexec-tools-2.0.3-makedumpfile-ppc64-auto-detect-the-correct-MAX-PHYSMEM-BITS.patch
new file mode 100644
index 0000000..24eadf1
--- /dev/null
+++ b/kexec-tools-2.0.3-makedumpfile-ppc64-auto-detect-the-correct-MAX-PHYSMEM-BITS.patch
@@ -0,0 +1,77 @@
+makedumpfile: ppc64: Auto-detect the correct MAX_PHYSMEM_BITS used in vmcore being analyzed.
+
+The latest upstream kernel commit 048ee0993ec8360abb0b51bdf8f8721e9ed62ec4 adds
+64TB support to ppc64 kernel and bumps the MAX_PHYSMEM_BITS from 44 to 46. This
+change causes sparsemem extreme check to fail in makedumpfile.
+
+This patch auto-detects the correct value to use for MAX_PHYSMEM_BITS by
+examining the mem_section array size from the vmcore being analyzed.
+
+This patch has been tested on upstream kernel 3.8.0-rc4 and older kernel
+2.6.32.
+
+Reported-by: Dave Anderson <anderson at redhat.com>
+Reported-by: Dave Young <dyoung at redhat.com>
+Signed-off-by: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
+---
+ arch/ppc64.c | 27 ++++++++++++++++++++++++++-
+ makedumpfile.h | 3 ++-
+ 2 files changed, 28 insertions(+), 2 deletions(-)
+
+diff --git a/makedumpfile-1.5.1/arch/ppc64.c b/makedumpfile-1.5.1/arch/ppc64.c
+index 1cb69e1..afbaf55 100644
+--- a/makedumpfile-1.5.1/arch/ppc64.c
++++ b/makedumpfile-1.5.1/arch/ppc64.c
+@@ -25,12 +25,37 @@
+ #include "../makedumpfile.h"
+
+ int
++set_ppc64_max_physmem_bits(void)
++{
++ long array_len = ARRAY_LENGTH(mem_section);
++ /*
++ * The older ppc64 kernels uses _MAX_PHYSMEM_BITS as 42 and the
++ * newer kernels 3.7 onwards uses 46 bits.
++ */
++
++ info->max_physmem_bits = _MAX_PHYSMEM_BITS_ORIG ;
++ if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME()))
++ || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT())))
++ return TRUE;
++
++ info->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7;
++ if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME()))
++ || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT())))
++ return TRUE;
++
++ return FALSE;
++}
++
++int
+ get_machdep_info_ppc64(void)
+ {
+ unsigned long vmlist, vmalloc_start;
+
+ info->section_size_bits = _SECTION_SIZE_BITS;
+- info->max_physmem_bits = _MAX_PHYSMEM_BITS;
++ if (!set_ppc64_max_physmem_bits()) {
++ ERRMSG("Can't detect max_physmem_bits.\n");
++ return FALSE;
++ }
+ info->page_offset = __PAGE_OFFSET;
+
+ if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) {
+diff --git a/makedumpfile-1.5.1/makedumpfile.h b/makedumpfile-1.5.1/makedumpfile.h
+index d2bdc0c..d758a3c 100644
+--- a/makedumpfile-1.5.1/makedumpfile.h
++++ b/makedumpfile-1.5.1/makedumpfile.h
+@@ -566,7 +566,8 @@ do { \
+ #define VMALLOCBASE (0xD000000000000000)
+ #define KVBASE (SYMBOL(_stext))
+ #define _SECTION_SIZE_BITS (24)
+-#define _MAX_PHYSMEM_BITS (44)
++#define _MAX_PHYSMEM_BITS_ORIG (44)
++#define _MAX_PHYSMEM_BITS_3_7 (46)
+ #endif
+
+ #ifdef __powerpc32__
diff --git a/kexec-tools.spec b/kexec-tools.spec
index 36f185f..7090c0a 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -73,6 +73,7 @@ Patch301: kexec-tools-2.0.3-ppc-ppc64-compile-purgatory-code-with-gcc-option-mso
# Patches 501 through 600 are meant for ppc kexec-tools enablement
#
Patch501: kexec-tools-2.0.3-ppc-exec-stack-fix.patch
+Patch502: kexec-tools-2.0.3-makedumpfile-ppc64-auto-detect-the-correct-MAX-PHYSMEM-BITS.patch
#
# Patches 601 onward are generic patches
@@ -99,6 +100,7 @@ tar -z -x -v -f %{SOURCE9}
%patch002 -p1
%patch301 -p1
%patch501 -p1
+%patch502 -p1
%patch601 -p1
%patch602 -p1
%patch603 -p1
More information about the scm-commits
mailing list