c2b95d9a6c
Release: crash-8.0.4-2 Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
71 lines
2.4 KiB
Diff
71 lines
2.4 KiB
Diff
From 4c78eb4a9199631fe94845cb3fbd6376aae1251d Mon Sep 17 00:00:00 2001
|
|
From: Alexander Gordeev <agordeev@linux.ibm.com>
|
|
Date: Wed, 29 Nov 2023 13:47:35 +0100
|
|
Subject: [PATCH 08/14] s390x: fix virtual vs physical address confusion
|
|
|
|
Physical and virtual addresses are the same on S390X.
|
|
That led to missing to use PTOV and VTOP macros where
|
|
they actually expected.
|
|
|
|
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
|
|
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
|
|
---
|
|
s390x.c | 12 ++++++------
|
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/s390x.c b/s390x.c
|
|
index 096c072186f5..957b839a5fa9 100644
|
|
--- a/s390x.c
|
|
+++ b/s390x.c
|
|
@@ -311,7 +311,7 @@ static struct s390x_cpu *s390x_cpu_get(struct bt_info *bt)
|
|
readmem(lowcore_ptr + cpu * sizeof(long), KVADDR,
|
|
&prefix, sizeof(long), "lowcore_ptr", FAULT_ON_ERROR);
|
|
for (i = 0; i < s390x_cpu_cnt; i++) {
|
|
- if (s390x_cpu_vec[i].prefix == prefix)
|
|
+ if (s390x_cpu_vec[i].prefix == VTOP(prefix))
|
|
return &s390x_cpu_vec[i];
|
|
}
|
|
error(FATAL, "cannot determine CPU for task: %lx\n", bt->task);
|
|
@@ -985,12 +985,12 @@ int s390x_vtop(ulong table, ulong vaddr, physaddr_t *phys_addr, int verbose)
|
|
verbose);
|
|
if (!entry)
|
|
return FALSE;
|
|
- table = entry & ~0xfffULL;
|
|
+ table = PTOV(entry & ~0xfffULL);
|
|
/* Check if this a 2GB page */
|
|
if ((entry & 0x400ULL) && (level == 1)) {
|
|
/* Add the 2GB frame offset & return the final value. */
|
|
table &= ~0x7fffffffULL;
|
|
- *phys_addr = table + (vaddr & 0x7fffffffULL);
|
|
+ *phys_addr = VTOP(table + (vaddr & 0x7fffffffULL));
|
|
return TRUE;
|
|
}
|
|
len = entry & 0x3ULL;
|
|
@@ -1001,12 +1001,12 @@ int s390x_vtop(ulong table, ulong vaddr, physaddr_t *phys_addr, int verbose)
|
|
if (entry & 0x400ULL) {
|
|
/* Add the 1MB page offset and return the final value. */
|
|
table &= ~0xfffffULL;
|
|
- *phys_addr = table + (vaddr & 0xfffffULL);
|
|
+ *phys_addr = VTOP(table + (vaddr & 0xfffffULL));
|
|
return TRUE;
|
|
}
|
|
|
|
/* Get the page table entry */
|
|
- entry = _kl_pg_table_deref_s390x(vaddr, entry & ~0x7ffULL, verbose);
|
|
+ entry = _kl_pg_table_deref_s390x(vaddr, PTOV(entry & ~0x7ffULL), verbose);
|
|
if (!entry)
|
|
return FALSE;
|
|
|
|
@@ -1033,7 +1033,7 @@ s390x_vmalloc_start(void)
|
|
{
|
|
unsigned long highmem_addr,high_memory;
|
|
highmem_addr=symbol_value("high_memory");
|
|
- readmem(highmem_addr, PHYSADDR, &high_memory,sizeof(long),
|
|
+ readmem(highmem_addr, KVADDR, &high_memory,sizeof(long),
|
|
"highmem",FAULT_ON_ERROR);
|
|
return high_memory;
|
|
}
|
|
--
|
|
2.41.0
|
|
|