Re: [PATCH V3 0/9] Support RISCV64 arch and common commands

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

 



Hi, Xianting
Sorry for the late reply.

I have no such machine, so I only tested it on the latest qemu, and most crash commands work well, but there are still some flaws as below:

[root@fedora-riscv crash]# ./crash

crash 8.0.1++
Copyright (C) 2002-2022  Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
Copyright (C) 1999-2006  Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011, 2020-2022  NEC Corporation
Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
Copyright (C) 2015, 2021  VMware, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions.  Enter "help copying" to see the conditions.
This program has absolutely no warranty.  Enter "help warranty" for details.
 
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "riscv64-unknown-linux-gnu".
Type "show configuration" for configuration details.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...


lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument

      KERNEL: /lib/modules/5.19.0-rc1+/build/vmlinux
    DUMPFILE: /proc/kcore
        CPUS: 1
        DATE: Wed Sep  7 04:23:27 EDT 2022
      UPTIME: 00:12:13
LOAD AVERAGE: 2.02, 1.81, 1.18
       TASKS: 116
    NODENAME: fedora-riscv
     RELEASE: 5.19.0-rc1+
     VERSION: #2 SMP Tue Sep 6 21:39:16 EDT 2022
     MACHINE: riscv64  (unknown Mhz)
      MEMORY: 2 GB
         PID: 660
     COMMAND: "crash"
        TASK: ff6000000874d280  [THREAD_INFO: ff6000000874d280]
         CPU: 0
       STATE: TASK_RUNNING (ACTIVE)

crash> 

On Sat, Aug 13, 2022 at 11:18 AM Xianting Tian <xianting.tian@xxxxxxxxxxxxxxxxx> wrote:
This series of patches are for Crash-utility tool, it make crash tool support
RISCV64 arch and the common commands(*, bt, p, rd, mod, log, set, struct, task,
dis, help -r, help -m, and so on).

To make the crash tool work normally for RISCV64 arch, we need a Linux kernel
patch, which exports the kernel virtual memory layout, va_bits, phys_ram_base
to vmcoreinfo, it can simplify the development of crash tool.

The Linux kernel patch set:
https://lore.kernel.org/linux-riscv/20220811074150.3020189-1-xianting.tian@xxxxxxxxxxxxxxxxx/
[ Patch 1 ~ 4 already merged to Linux for-next branch, targeted for 5.20;
  Patch 5, 6 already merged to Palmer's riscv-crash branch:
  https://git.kernel.org/pub/scm/linux/kernel/git/palmer/linux.git/log/?h=riscv-crash ]

This series of patches are tested on QEMU RISCV64 env and SoC platform of
T-head Xuantie 910 RISCV64 CPU.

====================================
  Some test examples list as below
====================================
... ...
      KERNEL: vmlinux
    DUMPFILE: vmcore
        CPUS: 1
        DATE: Fri Jul 15 10:24:25 CST 2022
      UPTIME: 00:00:33
LOAD AVERAGE: 0.05, 0.01, 0.00
       TASKS: 41
    NODENAME: buildroot
     RELEASE: 5.18.9
     VERSION: #30 SMP Fri Jul 15 09:47:03 CST 2022
     MACHINE: riscv64  (unknown Mhz)
      MEMORY: 1 GB
       PANIC: "Kernel panic - not syncing: sysrq triggered crash"
         PID: 113
     COMMAND: "sh"
        TASK: ff60000002269600  [THREAD_INFO: ff60000002269600]
         CPU: 0
       STATE: TASK_RUNNING (PANIC)

carsh>

crash> p mem_map
mem_map = $1 = (struct page *) 0xff6000003effbf00

crash> p /x *(struct page *) 0xff6000003effbf00
$5 = {
  flags = 0x1000,
  {
    {
      {
        lru = {
          next = 0xff6000003effbf08,
          prev = 0xff6000003effbf08
        },
        {
          __filler = 0xff6000003effbf08,
          mlock_count = 0x3effbf08
        }
      },
      mapping = 0x0,
      index = 0x0,
      private = 0x0
    },
  ... ...

crash> mod
     MODULE       NAME             BASE         SIZE  OBJECT FILE
ffffffff0113e740  nvme_core  ffffffff01133000  98304  (not loaded)  [CONFIG_KALLSYMS]
ffffffff011542c0  nvme       ffffffff0114c000  61440  (not loaded)  [CONFIG_KALLSYMS]

crash> rd ffffffff0113e740 8
ffffffff0113e740:  0000000000000000 ffffffff810874f8   .........t......
ffffffff0113e750:  ffffffff011542c8 726f635f656d766e   .B......nvme_cor
ffffffff0113e760:  0000000000000065 0000000000000000   e...............
ffffffff0113e770:  0000000000000000 0000000000000000   ................

crash> vtop ffffffff0113e740
VIRTUAL           PHYSICAL
ffffffff0113e740  8254d740

   PGD: ffffffff810e9ff8 => 2ffff001
  P4D: 0000000000000000 => 000000002fffec01
  PUD: 00005605c2957470 => 0000000020949801
  PMD: 00007fff7f1750c0 => 0000000020947401
   PTE: 0 => 209534e7
 PAGE: 000000008254d000

  PTE     PHYSICAL  FLAGS
209534e7  8254d000  (PRESENT|READ|WRITE|GLOBAL|ACCESSED|DIRTY)

      PAGE       PHYSICAL      MAPPING       INDEX CNT FLAGS
ff6000003f0777d8 8254d000                0        0  1 0

 
In addition, I got different results with yours, and I'm not sure if they are specific issues on qemu.

crash> vtop ff6000000874d280
VIRTUAL           PHYSICAL        
ff6000000874d280  8894d280        

   PGD: ffffffff81ccfb00 => 3ffffc01
  P4D: 00000000fffff000 => 000000003ffff801
  PUD: 00000000ffffe000 => 000000003ffff401
  PMD: 00000000ffffd000 => 00000000222000e7
   PTE: 88800000 => 0
invalid


crash> ptov 8894d280
VIRTUAL           PHYSICAL        
ff6000000874d280  8894d280  

crash> vtop ff60000003231b80
VIRTUAL           PHYSICAL        
ff60000003231b80  83431b80        

   PGD: ffffffff81cd0b00 => 3ffffc01
  P4D: 00000000fffff000 => 000000003ffff801
  PUD: 00000000ffffe000 => 000000003ffff401
  PMD: 00000000ffffd000 => 0000000020d000e7
   PTE: 83400000 => 4b0af71c8825e2a4

!_PAGE_PRESENT
     PTE       

But anyway, these issues can be improved with later patches, so for the v3: ACK.

Lianbo
 
crash> bt
PID: 113      TASK: ff6000000226c200  CPU: 0    COMMAND: "sh"
 #0 [ff20000010333b90] riscv_crash_save_regs at ffffffff800078f8
 #1 [ff20000010333cf0] panic at ffffffff806578c6
 #2 [ff20000010333d50] sysrq_reset_seq_param_set at ffffffff8038c03c
 #3 [ff20000010333da0] __handle_sysrq at ffffffff8038c604
 #4 [ff20000010333e00] write_sysrq_trigger at ffffffff8038cae4
 #5 [ff20000010333e20] proc_reg_write at ffffffff801b7ee8
 #6 [ff20000010333e40] vfs_write at ffffffff80152bb2
 #7 [ff20000010333e80] ksys_write at ffffffff80152eda
 #8 [ff20000010333ed0] sys_write at ffffffff80152f52

-------
Changes V1 -> V2:
 1, Do the below fixes based on HAGIO KAZUHITO's comments:
    Fix build warnings,
    Use MACRO for Linux version,
    Add description of x86_64 binary for riscv64 in README,
    Fix build error for the "sticky" target for build on x86_64,
    Fix the mixed indent.
 2, Add 'help -m/M' support patch to this patch set.
 3, Support native compiling approach, which means the host OS distro
    is also a riscv64 (lp64d) Linux, based on Yixun Lan's comments.
 4, Use __riscv and __riscv_xlen instead of __riscv64__ based on Yixun Lan's comments.
Changes V2 -> V3:
 1, Fix coding style, avoid including the header twice, move free() to right place,
    introduce VM_FLAGS and so on based on Li Jiang's comments.
 2, Adjust the implementation of riscv64_verify_symbol(refer to the logic of x86_64_verify_symbol)
    as KSYMS_START isn't set when verify symbol in some case.


Xianting Tian (9):
  Add RISCV64 framework code support
  RISCV64: Make crash tool enter command line and support some commands
  RISCV64: Add 'dis' command support
  RISCV64: Add 'irq' command support
  RISCV64: Add 'bt' command support
  RISCV64: Add 'help -r' command support
  RISCV64: Add 'help -m/M' command support
  RISCV64: Add 'mach' command support
  RISCV64: Add the implementation of symbol verify

 Makefile            |    7 +-
 README              |    4 +-
 configure.c         |   43 +-
 defs.h              |  252 +++++++-
 diskdump.c          |   21 +-
 help.c              |    2 +-
 lkcd_vmdump_v1.h    |    8 +-
 lkcd_vmdump_v2_v3.h |    8 +-
 netdump.c           |   22 +-
 ramdump.c           |    2 +
 riscv64.c           | 1491 +++++++++++++++++++++++++++++++++++++++++++
 symbols.c           |   10 +
 12 files changed, 1848 insertions(+), 22 deletions(-)
 create mode 100644 riscv64.c

--
2.17.1

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

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

 

Powered by Linux