Blame SOURCES/kexec-tools-2.0.17-makedumpfile-Prepare-paddr_to_vaddr-for-arch-specific-p2v-c.patch

893e0b
From 9eb5a31bc2d7f6af88459b89c414fe144e7491f8 Mon Sep 17 00:00:00 2001
893e0b
From: Kazuhito Hagio <k-hagio@ab.jp.nec.com>
893e0b
Date: Thu, 8 Nov 2018 14:26:43 -0500
893e0b
Subject: [PATCH] [PATCH] Prepare paddr_to_vaddr() for arch-specific p2v
893e0b
 conversion
893e0b
893e0b
Currently, conversion from physical address to virtual address in
893e0b
--mem-usage option is "paddr + PAGE_OFFSET", which was written for
893e0b
x86_64, but it's not suitable especially for arm64.
893e0b
893e0b
This patch introduces paddr_to_vaddr() macro to get prepared for
893e0b
arch-specific physical to virtual conversion.
893e0b
893e0b
Tested-by: Bhupesh Sharma <bhsharma@redhat.com>
893e0b
Signed-off-by: Kazuhito Hagio <k-hagio@ab.jp.nec.com>
893e0b
---
893e0b
 elf_info.c     |  7 ++++---
893e0b
 makedumpfile.h | 11 +++++++++++
893e0b
 2 files changed, 15 insertions(+), 3 deletions(-)
893e0b
893e0b
diff --git a/makedumpfile-1.6.4/elf_info.c b/makedumpfile-1.6.4/elf_info.c
893e0b
index 711601a170c7..1d33e96684b6 100644
893e0b
--- a/makedumpfile-1.6.4/elf_info.c
893e0b
+++ b/makedumpfile-1.6.4/elf_info.c
893e0b
@@ -372,7 +372,7 @@ int set_kcore_vmcoreinfo(uint64_t vmcoreinfo_addr, uint64_t vmcoreinfo_len)
893e0b
 	off_t offset_desc;
893e0b
 
893e0b
 	offset = UNINITIALIZED;
893e0b
-	kvaddr = (ulong)vmcoreinfo_addr + PAGE_OFFSET;
893e0b
+	kvaddr = paddr_to_vaddr(vmcoreinfo_addr);
893e0b
 
893e0b
 	for (i = 0; i < num_pt_loads; ++i) {
893e0b
 		struct pt_load_segment *p = &pt_loads[i];
893e0b
@@ -810,10 +810,11 @@ static int exclude_segment(struct pt_load_segment **pt_loads,
893e0b
 	int i, j, tidx = -1;
893e0b
 	unsigned long long	vstart, vend, kvstart, kvend;
893e0b
 	struct pt_load_segment temp_seg = {0};
893e0b
-	kvstart = (ulong)start + PAGE_OFFSET;
893e0b
-	kvend = (ulong)end + PAGE_OFFSET;
893e0b
 	unsigned long size;
893e0b
 
893e0b
+	kvstart = paddr_to_vaddr(start);
893e0b
+	kvend = paddr_to_vaddr(end);
893e0b
+
893e0b
 	for (i = 0; i < (*num_pt_loads); i++) {
893e0b
 		vstart = (*pt_loads)[i].virt_start;
893e0b
 		vend = (*pt_loads)[i].virt_end;
893e0b
diff --git a/makedumpfile-1.6.4/makedumpfile.h b/makedumpfile-1.6.4/makedumpfile.h
893e0b
index 46ebe2ee5a1f..574a335e84af 100644
893e0b
--- a/makedumpfile-1.6.4/makedumpfile.h
893e0b
+++ b/makedumpfile-1.6.4/makedumpfile.h
893e0b
@@ -965,6 +965,8 @@ typedef unsigned long pgd_t;
893e0b
 static inline int stub_true() { return TRUE; }
893e0b
 static inline int stub_true_ul(unsigned long x) { return TRUE; }
893e0b
 static inline int stub_false() { return FALSE; }
893e0b
+#define paddr_to_vaddr_general(X) ((X) + PAGE_OFFSET)
893e0b
+
893e0b
 #ifdef __aarch64__
893e0b
 int get_phys_base_arm64(void);
893e0b
 int get_machdep_info_arm64(void);
893e0b
@@ -975,6 +977,7 @@ int get_xen_info_arm64(void);
893e0b
 unsigned long get_kaslr_offset_arm64(unsigned long vaddr);
893e0b
 #define find_vmemmap()		stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_arm64(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define get_phys_base()		get_phys_base_arm64()
893e0b
 #define get_machdep_info()	get_machdep_info_arm64()
893e0b
 #define get_versiondep_info()	get_versiondep_info_arm64()
893e0b
@@ -995,6 +998,7 @@ unsigned long long vaddr_to_paddr_arm(unsigned long vaddr);
893e0b
 #define get_versiondep_info()	stub_true()
893e0b
 #define get_kaslr_offset(X)	stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_arm(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
 #endif /* arm */
893e0b
@@ -1009,6 +1013,7 @@ unsigned long long vaddr_to_paddr_x86(unsigned long vaddr);
893e0b
 #define get_versiondep_info()	get_versiondep_info_x86()
893e0b
 #define get_kaslr_offset(X)	stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_x86(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
 #endif /* x86 */
893e0b
@@ -1026,6 +1031,7 @@ unsigned long long vtop4_x86_64_pagetable(unsigned long vaddr, unsigned long pag
893e0b
 #define get_versiondep_info()	get_versiondep_info_x86_64()
893e0b
 #define get_kaslr_offset(X)	get_kaslr_offset_x86_64(X)
893e0b
 #define vaddr_to_paddr(X)	vtop4_x86_64(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
 #endif /* x86_64 */
893e0b
@@ -1041,6 +1047,7 @@ int arch_crashkernel_mem_size_ppc64(void);
893e0b
 #define get_versiondep_info()	get_versiondep_info_ppc64()
893e0b
 #define get_kaslr_offset(X)	stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_ppc64(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	arch_crashkernel_mem_size_ppc64()
893e0b
 #endif          /* powerpc64 */
893e0b
@@ -1054,6 +1061,7 @@ unsigned long long vaddr_to_paddr_ppc(unsigned long vaddr);
893e0b
 #define get_versiondep_info()	stub_true()
893e0b
 #define get_kaslr_offset(X)	stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_ppc(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
 #endif          /* powerpc32 */
893e0b
@@ -1068,6 +1076,7 @@ int is_iomem_phys_addr_s390x(unsigned long addr);
893e0b
 #define get_versiondep_info()	stub_true()
893e0b
 #define get_kaslr_offset(X)	stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_s390x(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		is_iomem_phys_addr_s390x(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
 #endif          /* s390x */
893e0b
@@ -1082,6 +1091,7 @@ unsigned long long vaddr_to_paddr_ia64(unsigned long vaddr);
893e0b
 #define get_versiondep_info()	stub_true()
893e0b
 #define get_kaslr_offset(X)	stub_false()
893e0b
 #define vaddr_to_paddr(X)	vaddr_to_paddr_ia64(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define VADDR_REGION(X)		(((unsigned long)(X)) >> REGION_SHIFT)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
@@ -1096,6 +1106,7 @@ unsigned long long vaddr_to_paddr_sparc64(unsigned long vaddr);
893e0b
 #define get_phys_base()         get_phys_base_sparc64()
893e0b
 #define get_versiondep_info()   get_versiondep_info_sparc64()
893e0b
 #define vaddr_to_paddr(X)       vaddr_to_paddr_sparc64(X)
893e0b
+#define paddr_to_vaddr(X)	paddr_to_vaddr_general(X)
893e0b
 #define is_phys_addr(X)		stub_true_ul(X)
893e0b
 #define arch_crashkernel_mem_size()	stub_false()
893e0b
 #endif		/* sparc64 */
893e0b
-- 
893e0b
2.7.4
893e0b