Blame SOURCES/kexec-tools-2.0.15-makedumpfile-book3s-ppc64-Lower-the-max-real-address-to-53-bits.patch

cf4a81
From dc28bfc3213960b549bcc70f0d5379a6222d2c60 Mon Sep 17 00:00:00 2001
cf4a81
From: Bhupesh Sharma <bhsharma@redhat.com>
cf4a81
Date: Wed, 13 Sep 2017 05:04:00 +0900
cf4a81
Subject: [PATCH] [PATCH v2] book3s/ppc64: Lower the max real address to 53
cf4a81
 bits for kernels >= v4.11
cf4a81
cf4a81
* Required for kernel 4.11
cf4a81
cf4a81
Kernel commit 2f18d533757da3899f4bedab0b2c051b080079dc lowered the
cf4a81
max real address on ppc64 to 53 bits.
cf4a81
cf4a81
Make similar changes in makedumpfile (on basis of the underlying kernel
cf4a81
version), without which the makedumpfile will fail to create a dumpfile
cf4a81
and instead throw a SEGV fault as shown below on kernels >= v4.11:
cf4a81
cf4a81
 # makedumpfile --split -d 31 -x vmlinux vmcore dumpfile_{1,2,3} 2>&1
cf4a81
cf4a81
 The kernel version is not supported.
cf4a81
 The makedumpfile operation may be incomplete.
cf4a81
 [ 1196.252094] makedumpfile[2367]: unhandled signal 11 at
cf4a81
 00000100f7011ca8 nip 000000001001eecc lr 000000001001f3c0 code 30001
cf4a81
 Segmentation fault
cf4a81
cf4a81
Signed-off-by: Bhupesh Sharma <bhsharma@redhat.com>
cf4a81
---
cf4a81
 arch/ppc64.c   | 8 +++++++-
cf4a81
 makedumpfile.h | 5 +++++
cf4a81
 2 files changed, 12 insertions(+), 1 deletion(-)
cf4a81
cf4a81
diff --git a/makedumpfile-1.6.2/arch/ppc64.c b/makedumpfile-1.6.2/arch/ppc64.c
cf4a81
index bacac778f73c..2f5a0daa16b2 100644
cf4a81
--- a/makedumpfile-1.6.2/arch/ppc64.c
cf4a81
+++ b/makedumpfile-1.6.2/arch/ppc64.c
cf4a81
@@ -307,11 +307,17 @@ ppc64_vmalloc_init(void)
cf4a81
 	}
cf4a81
 
cf4a81
 	info->pte_rpn_mask = PTE_RPN_MASK_DEFAULT;
cf4a81
-	if (info->kernel_version >= KERNEL_VERSION(4, 6, 0)) {
cf4a81
+	if ((info->kernel_version >= KERNEL_VERSION(4, 6, 0)) &&
cf4a81
+	    (info->kernel_version < KERNEL_VERSION(4, 11, 0))) {
cf4a81
 		info->pte_rpn_mask = PTE_RPN_MASK_L4_4_6;
cf4a81
 		info->pte_rpn_shift = PTE_RPN_SHIFT_L4_4_6;
cf4a81
 	}
cf4a81
 
cf4a81
+	if (info->kernel_version >= KERNEL_VERSION(4, 11, 0)) {
cf4a81
+		info->pte_rpn_mask = PTE_RPN_MASK_L4_4_11;
cf4a81
+		info->pte_rpn_shift = PTE_RPN_SHIFT_L4_4_11;
cf4a81
+	}
cf4a81
+
cf4a81
 	/*
cf4a81
 	 * Compute ptrs per each level
cf4a81
 	 */
cf4a81
diff --git a/makedumpfile-1.6.2/makedumpfile.h b/makedumpfile-1.6.2/makedumpfile.h
cf4a81
index 7d81bbcf2234..f4ba02d11f09 100644
cf4a81
--- a/makedumpfile-1.6.2/makedumpfile.h
cf4a81
+++ b/makedumpfile-1.6.2/makedumpfile.h
cf4a81
@@ -692,6 +692,11 @@ unsigned long get_kvbase_arm64(void);
cf4a81
 #define PUD_MASKED_BITS_4_7  0xc0000000000000ffUL
cf4a81
 #define PMD_MASKED_BITS_4_7  0xc0000000000000ffUL
cf4a81
 
cf4a81
+#define PTE_RPN_SIZE_L4_4_11  53
cf4a81
+#define PTE_RPN_MASK_L4_4_11   \
cf4a81
+	(((1UL << PTE_RPN_SIZE_L4_4_11) - 1) & ~((1UL << info->page_shift) - 1))
cf4a81
+#define PTE_RPN_SHIFT_L4_4_11  info->page_shift
cf4a81
+
cf4a81
 /*
cf4a81
  * Supported MMU types
cf4a81
  */
cf4a81
-- 
cf4a81
2.7.4
cf4a81