Blame SOURCES/rhelonly-kexec-tools-2.0.20-makedumpfile-arm64-Add-support-for-ARMv8.2-LVA-52-bi.patch

97e513
From 0f632fa180e5a44219ab6bbe0879c3583f8c65cf Mon Sep 17 00:00:00 2001
fe2ad6
From: Pingfan Liu <piliu@redhat.com>
97e513
Date: Tue, 9 Nov 2021 11:24:22 +0800
fe2ad6
Subject: [PATCH] RHEL-only
fe2ad6
97e513
Cope with RHEL8 kernel
97e513
97e513
Signed-off-by: Pingfan Liu <piliu@redhat.com>
fe2ad6
---
fe2ad6
 arch/arm64.c   | 14 +++++++++++++-
fe2ad6
 makedumpfile.c |  2 ++
fe2ad6
 makedumpfile.h |  1 +
fe2ad6
 3 files changed, 16 insertions(+), 1 deletion(-)
fe2ad6
97e513
diff --git a/makedumpfile-1.7.0/arch/arm64.c b/makedumpfile-1.7.0/arch/arm64.c
97e513
index 1072178..95beae6 100644
97e513
--- a/makedumpfile-1.7.0/arch/arm64.c
97e513
+++ b/makedumpfile-1.7.0/arch/arm64.c
97e513
@@ -50,6 +50,7 @@ static int va_bits;
97e513
 static int vabits_actual;
97e513
 static int flipped_va;
fe2ad6
 static unsigned long kimage_voffset;
fe2ad6
+static int max_user_va_bits;
fe2ad6
 
fe2ad6
 #define SZ_4K			4096
fe2ad6
 #define SZ_16K			16384
97e513
@@ -108,7 +109,7 @@ typedef unsigned long pgdval_t;
fe2ad6
 #define PGDIR_SHIFT		ARM64_HW_PGTABLE_LEVEL_SHIFT(4 - (pgtable_level))
fe2ad6
 #define PGDIR_SIZE		(_AC(1, UL) << PGDIR_SHIFT)
fe2ad6
 #define PGDIR_MASK		(~(PGDIR_SIZE-1))
fe2ad6
-#define PTRS_PER_PGD		(1 << ((va_bits) - PGDIR_SHIFT))
fe2ad6
+#define PTRS_PER_PGD           (1 << ((max_user_va_bits) - PGDIR_SHIFT))
fe2ad6
 
fe2ad6
 /*
fe2ad6
  * Section address mask and size definitions.
97e513
@@ -449,6 +450,17 @@ get_machdep_info_arm64(void)
fe2ad6
 		ERRMSG("Can't determine platform config values\n");
fe2ad6
 		return FALSE;
fe2ad6
 	}
fe2ad6
+	if (NUMBER(MAX_USER_VA_BITS) != NOT_FOUND_NUMBER) {
fe2ad6
+		max_user_va_bits = NUMBER(MAX_USER_VA_BITS);
fe2ad6
+		DEBUG_MSG("max_user_va_bits : %d (vmcoreinfo)\n",
fe2ad6
+		                max_user_va_bits);
fe2ad6
+	}
fe2ad6
+	if (!max_user_va_bits) {
fe2ad6
+		max_user_va_bits = va_bits;
fe2ad6
+		DEBUG_MSG("max_user_va_bits : %d (default = va_bits)\n",
fe2ad6
+		                max_user_va_bits);
fe2ad6
+	}
fe2ad6
+
fe2ad6
 
fe2ad6
 	kimage_voffset = NUMBER(kimage_voffset);
fe2ad6
 	info->section_size_bits = SECTIONS_SIZE_BITS;
97e513
diff --git a/makedumpfile-1.7.0/makedumpfile.c b/makedumpfile-1.7.0/makedumpfile.c
97e513
index 3ad4443..018ea4c 100644
97e513
--- a/makedumpfile-1.7.0/makedumpfile.c
97e513
+++ b/makedumpfile-1.7.0/makedumpfile.c
97e513
@@ -2417,6 +2417,7 @@ write_vmcoreinfo_data(void)
fe2ad6
 
fe2ad6
 	WRITE_NUMBER("HUGETLB_PAGE_DTOR", HUGETLB_PAGE_DTOR);
fe2ad6
 #ifdef __aarch64__
fe2ad6
+	WRITE_NUMBER("MAX_USER_VA_BITS", MAX_USER_VA_BITS);
fe2ad6
 	WRITE_NUMBER("VA_BITS", VA_BITS);
97e513
 	/* WRITE_NUMBER("TCR_EL1_T1SZ", TCR_EL1_T1SZ); should not exists */
fe2ad6
 	WRITE_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET);
97e513
@@ -2863,6 +2864,7 @@ read_vmcoreinfo(void)
fe2ad6
 	READ_NUMBER("phys_base", phys_base);
fe2ad6
 	READ_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE);
fe2ad6
 #ifdef __aarch64__
fe2ad6
+	READ_NUMBER("MAX_USER_VA_BITS", MAX_USER_VA_BITS);
fe2ad6
 	READ_NUMBER("VA_BITS", VA_BITS);
97e513
 	READ_NUMBER("TCR_EL1_T1SZ", TCR_EL1_T1SZ);
fe2ad6
 	READ_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET);
97e513
diff --git a/makedumpfile-1.7.0/makedumpfile.h b/makedumpfile-1.7.0/makedumpfile.h
97e513
index e59239d..b6236dd 100644
97e513
--- a/makedumpfile-1.7.0/makedumpfile.h
97e513
+++ b/makedumpfile-1.7.0/makedumpfile.h
97e513
@@ -2064,6 +2064,7 @@ struct number_table {
fe2ad6
 	long	phys_base;
fe2ad6
 	long	KERNEL_IMAGE_SIZE;
fe2ad6
 #ifdef __aarch64__
fe2ad6
+	long    MAX_USER_VA_BITS;
fe2ad6
 	long 	VA_BITS;
97e513
 	long	TCR_EL1_T1SZ;
fe2ad6
 	unsigned long	PHYS_OFFSET;
fe2ad6
-- 
97e513
2.31.1
fe2ad6