|
|
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 |
|