b6407a85f0
Update to the latest upstream commit 47216437e79a ("Fix "net" command on kernel configured with CONFIG_IPV6=m") Resolves: rhbz#2166880 Resolves: rhbz#2161133 Resolves: rhbz#2158721 Resolves: rhbz#2156904 Resolves: rhbz#2156898 Resolves: rhbz#2156892 Resolves: rhbz#2156889 Resolves: rhbz#2156885 Resolves: rhbz#2152619 Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
104 lines
3.5 KiB
Diff
104 lines
3.5 KiB
Diff
From e39a2560928ef6f7e8dad80cb9a7521bdf0495e3 Mon Sep 17 00:00:00 2001
|
|
From: Lianbo Jiang <lijiang@redhat.com>
|
|
Date: Tue, 4 Oct 2022 18:57:11 +0800
|
|
Subject: [PATCH 42/89] ppc64: still allow to move on if the emergency stacks
|
|
info fails to initialize
|
|
|
|
Currently crash will fail and then exit, if the initialization of
|
|
the emergency stacks information fails. In real customer environments,
|
|
sometimes, a vmcore may be partially damaged, although such vmcores
|
|
are rare. For example:
|
|
|
|
# ./crash ../3.10.0-1127.18.2.el7.ppc64le/vmcore ../3.10.0-1127.18.2.el7.ppc64le/vmlinux -s
|
|
crash: invalid kernel virtual address: 38 type: "paca->emergency_sp"
|
|
#
|
|
|
|
Lets try to keep loading vmcore if such issues happen, so call
|
|
the readmem() with the RETURN_ON_ERROR instead of FAULT_ON_ERROR,
|
|
which allows the crash move on.
|
|
|
|
Reported-by: Dave Wysochanski <dwysocha@redhat.com>
|
|
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
|
|
---
|
|
ppc64.c | 18 +++++++++---------
|
|
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/ppc64.c b/ppc64.c
|
|
index 4ea1f7c0c6f8..b95a621d8fe4 100644
|
|
--- a/ppc64.c
|
|
+++ b/ppc64.c
|
|
@@ -1224,13 +1224,13 @@ ppc64_init_paca_info(void)
|
|
ulong paca_loc;
|
|
|
|
readmem(symbol_value("paca_ptrs"), KVADDR, &paca_loc, sizeof(void *),
|
|
- "paca double pointer", FAULT_ON_ERROR);
|
|
+ "paca double pointer", RETURN_ON_ERROR);
|
|
readmem(paca_loc, KVADDR, paca_ptr, sizeof(void *) * kt->cpus,
|
|
- "paca pointers", FAULT_ON_ERROR);
|
|
+ "paca pointers", RETURN_ON_ERROR);
|
|
} else if (symbol_exists("paca") &&
|
|
(get_symbol_type("paca", NULL, NULL) == TYPE_CODE_PTR)) {
|
|
readmem(symbol_value("paca"), KVADDR, paca_ptr, sizeof(void *) * kt->cpus,
|
|
- "paca pointers", FAULT_ON_ERROR);
|
|
+ "paca pointers", RETURN_ON_ERROR);
|
|
} else {
|
|
free(paca_ptr);
|
|
return;
|
|
@@ -1245,7 +1245,7 @@ ppc64_init_paca_info(void)
|
|
for (i = 0; i < kt->cpus; i++)
|
|
readmem(paca_ptr[i] + offset, KVADDR, &ms->emergency_sp[i],
|
|
sizeof(void *), "paca->emergency_sp",
|
|
- FAULT_ON_ERROR);
|
|
+ RETURN_ON_ERROR);
|
|
}
|
|
|
|
if (MEMBER_EXISTS("paca_struct", "nmi_emergency_sp")) {
|
|
@@ -1256,7 +1256,7 @@ ppc64_init_paca_info(void)
|
|
for (i = 0; i < kt->cpus; i++)
|
|
readmem(paca_ptr[i] + offset, KVADDR, &ms->nmi_emergency_sp[i],
|
|
sizeof(void *), "paca->nmi_emergency_sp",
|
|
- FAULT_ON_ERROR);
|
|
+ RETURN_ON_ERROR);
|
|
}
|
|
|
|
if (MEMBER_EXISTS("paca_struct", "mc_emergency_sp")) {
|
|
@@ -1267,7 +1267,7 @@ ppc64_init_paca_info(void)
|
|
for (i = 0; i < kt->cpus; i++)
|
|
readmem(paca_ptr[i] + offset, KVADDR, &ms->mc_emergency_sp[i],
|
|
sizeof(void *), "paca->mc_emergency_sp",
|
|
- FAULT_ON_ERROR);
|
|
+ RETURN_ON_ERROR);
|
|
}
|
|
|
|
free(paca_ptr);
|
|
@@ -1947,7 +1947,7 @@ ppc64_in_emergency_stack(int cpu, ulong addr, bool verbose)
|
|
if (cpu < 0 || cpu >= kt->cpus)
|
|
return NONE_STACK;
|
|
|
|
- if (ms->emergency_sp) {
|
|
+ if (ms->emergency_sp && IS_KVADDR(ms->emergency_sp[cpu])) {
|
|
top = ms->emergency_sp[cpu];
|
|
base = top - STACKSIZE();
|
|
if (addr >= base && addr < top) {
|
|
@@ -1957,7 +1957,7 @@ ppc64_in_emergency_stack(int cpu, ulong addr, bool verbose)
|
|
}
|
|
}
|
|
|
|
- if (ms->nmi_emergency_sp) {
|
|
+ if (ms->nmi_emergency_sp && IS_KVADDR(ms->nmi_emergency_sp[cpu])) {
|
|
top = ms->nmi_emergency_sp[cpu];
|
|
base = top - STACKSIZE();
|
|
if (addr >= base && addr < top) {
|
|
@@ -1967,7 +1967,7 @@ ppc64_in_emergency_stack(int cpu, ulong addr, bool verbose)
|
|
}
|
|
}
|
|
|
|
- if (ms->mc_emergency_sp) {
|
|
+ if (ms->mc_emergency_sp && IS_KVADDR(ms->mc_emergency_sp[cpu])) {
|
|
top = ms->mc_emergency_sp[cpu];
|
|
base = top - STACKSIZE();
|
|
if (addr >= base && addr < top) {
|
|
--
|
|
2.37.1
|
|
|