[PATCH] s390: Add restart stack support

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

 



Hi Dave,

With Linux 3.0.1 on s390 we have a new kernel stack for the PSW restart
interrupt. See kernel git commit 7dd6b3343fdc190712d1620ee8848d25c4c77c33
for details. With this patch the crash "bt" command will find this stack.

Signed-off-by: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>
---
 s390x.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

--- a/s390x.c
+++ b/s390x.c
@@ -825,9 +825,16 @@ static void get_int_stack(char *stack_na
 	unsigned long stack_addr;
 
 	*start = *end = 0;
-	if (!MEMBER_EXISTS("_lowcore", stack_name))
-		return;
-	stack_addr = ULONG(lc + MEMBER_OFFSET("_lowcore", stack_name));
+	if (strcmp(stack_name, "restart_stack") == 0) {
+		stack_addr = symbol_value("restart_stack");
+		if (!stack_addr)
+			return;
+		stack_addr = readmem_ul(stack_addr);
+	} else {
+		if (!MEMBER_EXISTS("_lowcore", stack_name))
+			return;
+		stack_addr = ULONG(lc + MEMBER_OFFSET("_lowcore", stack_name));
+	}
 	if (stack_addr == 0)
 		return;
 	*start = stack_addr - INT_STACK_SIZE;
@@ -993,6 +1000,8 @@ static void s390x_back_trace_cmd(struct 
 		}
 		s390x_print_lowcore(lowcore,bt,1);
 		fprintf(fp,"\n");
+		get_int_stack("restart_stack", lowcore, &low, &high);
+		sp = show_trace(bt, cnt, sp, low, high);
 		get_int_stack("panic_stack", lowcore, &low, &high);
 		sp = show_trace(bt, cnt, sp, low, high);
 		get_int_stack("async_stack", lowcore, &low, &high);

Subject: [PATCH] s390: Add restart stack support

From: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>

With Linux 3.0.1 on s390 we have a new kernel stack for the PSW restart
interrupt. See kernel git commit 7dd6b3343fdc190712d1620ee8848d25c4c77c33
for details. With this patch the crash "bt" command will find this stack.

Signed-off-by: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>
---
 s390x.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

--- a/s390x.c
+++ b/s390x.c
@@ -825,9 +825,16 @@ static void get_int_stack(char *stack_na
 	unsigned long stack_addr;
 
 	*start = *end = 0;
-	if (!MEMBER_EXISTS("_lowcore", stack_name))
-		return;
-	stack_addr = ULONG(lc + MEMBER_OFFSET("_lowcore", stack_name));
+	if (strcmp(stack_name, "restart_stack") == 0) {
+		stack_addr = symbol_value("restart_stack");
+		if (!stack_addr)
+			return;
+		stack_addr = readmem_ul(stack_addr);
+	} else {
+		if (!MEMBER_EXISTS("_lowcore", stack_name))
+			return;
+		stack_addr = ULONG(lc + MEMBER_OFFSET("_lowcore", stack_name));
+	}
 	if (stack_addr == 0)
 		return;
 	*start = stack_addr - INT_STACK_SIZE;
@@ -993,6 +1000,8 @@ static void s390x_back_trace_cmd(struct 
 		}
 		s390x_print_lowcore(lowcore,bt,1);
 		fprintf(fp,"\n");
+		get_int_stack("restart_stack", lowcore, &low, &high);
+		sp = show_trace(bt, cnt, sp, low, high);
 		get_int_stack("panic_stack", lowcore, &low, &high);
 		sp = show_trace(bt, cnt, sp, low, high);
 		get_int_stack("async_stack", lowcore, &low, &high);
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility

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

 

Powered by Linux