----- Original Message ----- > On Mon, 8 Jun 2015 14:13:17 -0400 (EDT) > Dave Anderson <[email protected]> wrote: > > > > > > > ----- Original Message ----- > > > The kernel commit 2f859d0dad8 ("s390/smp: reduce size of struct pcpu") > > > for linux-4.0 removed the "async_stack" and "panic_stack" members from > > > "struct pcpu". > > > > > > So now the only option to find out the stack address is using "struct > > > lowcore" (again). Unfortunately we don't get the exact address because > > > since commit dc7ee00d477 ("s390: lowcore stack pointer offsets") the stack > > > frame overhead is already subtracted from the addresses. Therefore we > > > have to roundup the stack address to PAGE_SIZE. > > > > > > Signed-off-by: Michael Holzheu <[email protected]> > > > > Hi Michael, > > > > For the changelog -- what's the symptom of the failure? > > Hi Dave, > > Here the symptom description: > > Backtraces (e.g. bt -a) for active tasks that execute I/O or machine check > interrupts are not printed and for "normal" task backtraces ugly messages like > "bt: invalid kernel virtual address: 100000180000088 type: "readmem_ul"" > are shown. > > Michael >
Thanks Michael -- queued for crash-7.1.2: https://github.com/crash-utility/crash/commit/cefda9be11001c3f09f6f118ab9454509f967fee Dave > > > > Dave > > > > > --- > > > s390x.c | 7 +++---- > > > 1 file changed, 3 insertions(+), 4 deletions(-) > > > > > > --- a/s390x.c > > > +++ b/s390x.c > > > @@ -1027,8 +1027,6 @@ static unsigned long get_int_stack_pcpu( > > > { > > > unsigned long addr; > > > > > > - if (!MEMBER_EXISTS("pcpu", stack_name)) > > > - return 0; > > > addr = symbol_value("pcpu_devices") + > > > cpu * STRUCT_SIZE("pcpu") + MEMBER_OFFSET("pcpu", stack_name); > > > return readmem_ul(addr) + INT_STACK_SIZE; > > > @@ -1041,7 +1039,8 @@ static unsigned long get_int_stack_lc(ch > > > { > > > if (!MEMBER_EXISTS(lc_struct, stack_name)) > > > return 0; > > > - return ULONG(lc + MEMBER_OFFSET(lc_struct, stack_name)); > > > + return roundup(ULONG(lc + MEMBER_OFFSET(lc_struct, stack_name)), > > > + PAGESIZE()); > > > } > > > > > > /* > > > @@ -1057,7 +1056,7 @@ static void get_int_stack(char *stack_na > > > stack_addr = symbol_value("restart_stack"); > > > stack_addr = readmem_ul(stack_addr); > > > } else { > > > - if (symbol_exists("pcpu_devices")) > > > + if (symbol_exists("pcpu_devices") && MEMBER_EXISTS("pcpu", > > > stack_name)) > > > stack_addr = get_int_stack_pcpu(stack_name, cpu); > > > else > > > stack_addr = get_int_stack_lc(stack_name, lc); > > > > > > > -- Crash-utility mailing list [email protected] https://www.redhat.com/mailman/listinfo/crash-utility
