[PATCH] arm64: Add fallback option when vabits_actual is missing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



After the commit 0d9b1ffefabe ("arm64: mm: make vabits_actual
a build time constant if possible") introduced in v5.19
Linux kernel, the crash will not find vabits_actual symbol.
Add a fallback option to initialize VA_BITS based on the
user supplied machdep options.

Tested ramdumps loading in both 6.0 and 5.15 kernels.

Signed-off-by: Pavankumar Kondeti <quic_pkondeti@xxxxxxxxxxx>
---
 arm64.c | 33 +++++++++++++++++++++++++--------
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/arm64.c b/arm64.c
index c3e26a3..9d5d0bd 100644
--- a/arm64.c
+++ b/arm64.c
@@ -4588,6 +4588,27 @@ arm64_IS_VMALLOC_ADDR(ulong vaddr)
 
 /* Return TRUE if we succeed, return FALSE on failure. */
 static int
+arm64_set_va_bits_fallback(void)
+{
+	if (machdep->machspec->VA_BITS_ACTUAL) {
+		machdep->machspec->VA_BITS = machdep->machspec->VA_BITS_ACTUAL;
+		machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
+		return TRUE;
+	}
+
+	if (machdep->machspec->CONFIG_ARM64_VA_BITS) {
+		/* guess */
+		machdep->machspec->VA_BITS_ACTUAL = machdep->machspec->CONFIG_ARM64_VA_BITS;
+		machdep->machspec->VA_BITS = machdep->machspec->CONFIG_ARM64_VA_BITS;
+		machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+/* Return TRUE if we succeed, return FALSE on failure. */
+static int
 arm64_set_va_bits_by_tcr(void)
 {
 	ulong value;
@@ -4648,14 +4669,8 @@ arm64_calc_VA_BITS(void)
 		else {
 			if (arm64_set_va_bits_by_tcr()) {
 				/* nothing */
-			} else if (machdep->machspec->VA_BITS_ACTUAL) {
-				machdep->machspec->VA_BITS = machdep->machspec->VA_BITS_ACTUAL;
-				machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
-			} else if (machdep->machspec->CONFIG_ARM64_VA_BITS) {
-				/* guess */
-				machdep->machspec->VA_BITS_ACTUAL = machdep->machspec->CONFIG_ARM64_VA_BITS;
-				machdep->machspec->VA_BITS = machdep->machspec->CONFIG_ARM64_VA_BITS;
-				machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
+			} else if (arm64_set_va_bits_fallback()) {
+				/* nothing */
 			} else
 				error(FATAL, "cannot determine VA_BITS_ACTUAL\n");
 		}
@@ -4671,6 +4686,8 @@ arm64_calc_VA_BITS(void)
 		return;
 	} else if (arm64_set_va_bits_by_tcr()) {
 		return;
+	} else if (arm64_set_va_bits_fallback()) {
+		return;
 	}
 
 	if (!(sp = symbol_search("swapper_pg_dir")) &&
-- 
2.7.4

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux