s390x: Fix "bt -f/-F" command fail with seek error

Kernel commit ce3dc447493ff ("s390: add support for virtually mapped
kernel stacks") renamed "panic_task" to "nodat_stack" in the struct
lowcore, which leads a wrong stack base/top calculation. As a result,
the "bt -f/-F" may fail with the seek error:

  crash> bt -f
  PID: 3359     TASK: 28b01a09400       CPU: 0    COMMAND: "runtest.sh"
   LOWCORE INFO:
    ...
    -general registers:
       0x0000000034dd9140 0x0000039600000002
       0x00000396cad7dfa0 0x0000028b03ba5000
    ...
      0000028c6e9fffd8:  0000000000000000 0000000000000000
      0000028c6e9fffe8:  0000000000000000 0000000000000000
      0000028c6e9ffff8:  0000000000000000bt: seek error: kernel virtual
      address: 28c6ea00000  type: "readmem_ul"

Signed-off-by: Tao Liu <ltao@redhat.com>
This commit is contained in:
Tao Liu 2024-08-14 18:34:57 +12:00 committed by Lianbo Jiang
parent 321e1e8545
commit 5218919ec1
1 changed files with 4 additions and 1 deletions

View File

@ -1797,6 +1797,9 @@ static void s390x_back_trace_cmd(struct bt_info *bt)
cpu, lowcore, &low, &high);
sp = show_trace(bt, cnt, sp, low, high);
}
if (MEMBER_EXISTS("lowcore", "nodat_stack"))
get_int_stack("nodat_stack", cpu, lowcore, &low, &high);
else
get_int_stack("panic_stack", cpu, lowcore, &low, &high);
sp = show_trace(bt, cnt, sp, low, high);
get_int_stack("async_stack", cpu, lowcore, &low, &high);