cb7ba21ef8
Resolves: bz1930502 bz1895682 Upstream: crash-utility Conflict: None The series includes: f53b73e arm64: implement switchable PTOV()/VTOP() for kernels >= 5.10 bf1379a arm64: use dedicated bits to record the VA space layout changes 167d37e arm64: assign page_offset with VA_BITS kernel configuration value 5719afc arm64: rename ARM64_PAGE_OFFSET_ACTUAL to ARM64_FLIP_PAGE_OFFSET_ACTUAL Signed-off-by: Pingfan Liu <piliu@redhat.com>
84 lines
2.7 KiB
Diff
84 lines
2.7 KiB
Diff
From bf1379a8b6ff8d6a8fa12978f7194f15f85c4380 Mon Sep 17 00:00:00 2001
|
|
From: Pingfan Liu <piliu@redhat.com>
|
|
Date: Fri, 2 Jul 2021 10:14:23 +0800
|
|
Subject: [PATCH 3/4] arm64: use dedicated bits to record the VA space layout
|
|
changes
|
|
|
|
arm64 memory layout experiences big changes due to the following kernel
|
|
commits in date descending order:
|
|
5. 7bc1a0f9e176 arm64: mm: use single quantity to represent the PA to VA translation
|
|
4. b6d00d47e81a arm64: mm: Introduce 52-bit Kernel VAs
|
|
3. 5383cc6efed1 arm64: mm: Introduce vabits_actual
|
|
2. 14c127c957c1 arm64: mm: Flip kernel VA space
|
|
1. f80fb3a3d508 arm64: add support for kernel ASLR
|
|
|
|
For 1, crash has already used NEW_VMEMMAP to trace it.
|
|
For 2, crash lacks a flag to tag it and handle it differently.
|
|
For 3, two important kernel variables vabits_actual and physvirt_offset
|
|
are introduced.
|
|
For 4, since it comes immediately after 3, crash-utility does not need
|
|
to distinguish it.
|
|
For 5, kernel variable phyvirt_offset is removed
|
|
|
|
These changes have effects on PTOV()/VTOP() formula. So introducing
|
|
two bits HAS_PHYSVIRT_OFFSET and FLIPPED_VM as hint to apply different
|
|
formula.
|
|
|
|
Signed-off-by: Pingfan Liu <piliu@redhat.com>
|
|
---
|
|
arm64.c | 10 ++++++++++
|
|
defs.h | 2 ++
|
|
2 files changed, 12 insertions(+)
|
|
|
|
diff --git a/arm64.c b/arm64.c
|
|
index 149db36..b04369f 100644
|
|
--- a/arm64.c
|
|
+++ b/arm64.c
|
|
@@ -563,6 +563,10 @@ arm64_dump_machdep_table(ulong arg)
|
|
fprintf(fp, "%sMACHDEP_BT_TEXT", others++ ? "|" : "");
|
|
if (machdep->flags & NEW_VMEMMAP)
|
|
fprintf(fp, "%sNEW_VMEMMAP", others++ ? "|" : "");
|
|
+ if (machdep->flags & FLIPPED_VM)
|
|
+ fprintf(fp, "%sFLIPPED_VM", others++ ? "|" : "");
|
|
+ if (machdep->flags & HAS_PHYSVIRT_OFFSET)
|
|
+ fprintf(fp, "%sHAS_PHYSVIRT_OFFSET", others++ ? "|" : "");
|
|
fprintf(fp, ")\n");
|
|
|
|
fprintf(fp, " kvbase: %lx\n", machdep->kvbase);
|
|
@@ -997,6 +1001,7 @@ arm64_calc_physvirt_offset(void)
|
|
if (READMEM(pc->mfd, &physvirt_offset, sizeof(physvirt_offset),
|
|
sp->value, sp->value -
|
|
machdep->machspec->kimage_voffset) > 0) {
|
|
+ machdep->flags |= HAS_PHYSVIRT_OFFSET;
|
|
ms->physvirt_offset = physvirt_offset;
|
|
}
|
|
}
|
|
@@ -3963,6 +3968,11 @@ arm64_calc_VA_BITS(void)
|
|
error(FATAL, "cannot determine VA_BITS_ACTUAL\n");
|
|
}
|
|
|
|
+ /*
|
|
+ * The mm flip commit is introduced before 52-bits VA, which is before the
|
|
+ * commit to export NUMBER(TCR_EL1_T1SZ)
|
|
+ */
|
|
+ machdep->flags |= FLIPPED_VM;
|
|
return;
|
|
}
|
|
|
|
diff --git a/defs.h b/defs.h
|
|
index b7b20af..eca145c 100644
|
|
--- a/defs.h
|
|
+++ b/defs.h
|
|
@@ -3214,6 +3214,8 @@ typedef signed int s32;
|
|
#define NEW_VMEMMAP (0x80)
|
|
#define VM_L4_4K (0x100)
|
|
#define UNW_4_14 (0x200)
|
|
+#define FLIPPED_VM (0x400)
|
|
+#define HAS_PHYSVIRT_OFFSET (0x800)
|
|
|
|
/*
|
|
* Get kimage_voffset from /dev/crash
|
|
--
|
|
2.29.2
|
|
|