[PATCH V6 0/6] RISC-V fixups to work with crash tool
I ever sent the patch 1 in the link: https://patchwork.kernel.org/project/linux-riscv/patch/20220708073150.352830-3-xianting.t...@linux.alibaba.com/ And patch 2,3 in the link: https://patchwork.kernel.org/project/linux-riscv/patch/20220714113300.367854-2-xianting.t...@linux.alibaba.com/ https://patchwork.kernel.org/project/linux-riscv/patch/20220714113300.367854-3-xianting.t...@linux.alibaba.com/ This patch set just put these patches together, and with three new patch 4, 5, 6. these six patches are the fixups for machine_kexec, kernel mode PC for vmcore and improvements for vmcoreinfo, memory layout dump and fixup schedule out issue in machine_crash_shutdown(). The main changes in the six patchs as below, Patch 1: Fixup use of smp_processor_id() in preemptible context, to cleanup the console prints. Patch 2: Fixup to get correct kernel mode PC for kernel mode regs for vmcore. Patch 3: Fixup schedule out issue in machine_crash_shutdown() Patch 4: Add modules to virtual kernel memory layout dump. Patch 5: Add VM layout, va bits, ram base to vmcoreinfo, which can simplify the development of crash tool as ARM64 already did (arch/arm64/kernel/crash_core.c). Patch 6: Updates vmcoreinfo.rst for vmcoreinfo export for RISCV64. With these six patches(patch 2 is must), crash tool can work well to analyze a vmcore. The patches for crash tool for RISCV64 is in the link: https://lore.kernel.org/linux-riscv/20220801043040.2003264-1-xianting.t...@linux.alibaba.com/ -- Changes v1 -> v2: 1, remove the patch "Add a fast call path of crash_kexec()" from this series of patches, as it already applied to riscv git. https://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git/commit/?h=for-next&id=3f1901110a89b0e2e13adb2ac8d1a7102879ea98 2, add 'Reviewed-by' based on the comments of v1. Changes v2 -> v3: use "riscv" instead of "riscv64" in patch 5 subject line. Changes v3 -> v4: use "riscv" instead of "riscv64" in the summary of patch 5 subject line. Changes v4 -> v5: add a new patch "RISC-V: Fixup schedule out issue in machine_crash_shutdown()" Changes v5 -> v6: 1, move "fixup" patches to the start of the patch set. 2, change patch 1, 2, 6's subject to make it tell more what it's about. 3, add Fixes for patch 3. 4, adjuest the changes format for patch 6. Xianting Tian (6): RISC-V: kexec: Fixup use of smp_processor_id() in preemptible context RISC-V: Fixup get incorrect user mode PC for kernel mode regs RISC-V: Fixup schedule out issue in machine_crash_shutdown() RISC-V: Add modules to virtual kernel memory layout dump RISC-V: Add arch_crash_save_vmcoreinfo support Documentation: kdump: describe VMCOREINFO export for RISCV64 .../admin-guide/kdump/vmcoreinfo.rst | 31 +++ arch/riscv/kernel/Makefile| 1 + arch/riscv/kernel/crash_core.c| 29 + arch/riscv/kernel/crash_save_regs.S | 2 +- arch/riscv/kernel/machine_kexec.c | 28 ++--- arch/riscv/mm/init.c | 4 +++ 6 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 arch/riscv/kernel/crash_core.c -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH V6 4/6] RISC-V: Add modules to virtual kernel memory layout dump
Modules always live before the kernel, MODULES_END is fixed but MODULES_VADDR isn't fixed, it depends on the kernel size. Let's add it to virtual kernel memory layout dump. As MODULES is only defined for CONFIG_64BIT, so we dump it when CONFIG_64BIT=y. eg, MODULES_VADDR - MODULES_END 0x01133000 - 0x8000 Reviewed-by: Guo Ren Reviewed-by: Heiko Stuebner Signed-off-by: Xianting Tian --- arch/riscv/mm/init.c | 4 1 file changed, 4 insertions(+) diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index a88b7dc31a68..b56a0a75533f 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -135,6 +135,10 @@ static void __init print_vm_layout(void) (unsigned long)VMEMMAP_END); print_ml("vmalloc", (unsigned long)VMALLOC_START, (unsigned long)VMALLOC_END); +#ifdef CONFIG_64BIT + print_ml("modules", (unsigned long)MODULES_VADDR, + (unsigned long)MODULES_END); +#endif print_ml("lowmem", (unsigned long)PAGE_OFFSET, (unsigned long)high_memory); if (IS_ENABLED(CONFIG_64BIT)) { -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH V6 2/6] RISC-V: Fixup get incorrect user mode PC for kernel mode regs
When use 'echo c > /proc/sysrq-trigger' to trigger kdump, riscv_crash_save_regs() will be called to save regs for vmcore, we found "epc" value 00ffa5537400 is not a valid kernel virtual address, but is a user virtual address. Other regs(eg, ra, sp, gp...) are correct kernel virtual address. Actually 0x00ffb0dd9400 is the user mode PC of 'PID: 113 Comm: sh', which is saved in the task's stack. [ 21.201701] CPU: 0 PID: 113 Comm: sh Kdump: loaded Not tainted 5.18.9 #45 [ 21.201979] Hardware name: riscv-virtio,qemu (DT) [ 21.202160] epc : 00ffa5537400 ra : 80088640 sp : ff2010333b90 [ 21.202435] gp : 810dde38 tp : ff600226c200 t0 : 8032be7c [ 21.202707] t1 : 0720072007200720 t2 : 30203a7375746174 s0 : ff2010333cf0 [ 21.202973] s1 : a0 : ff2010333b98 a1 : 0001 [ 21.203243] a2 : 0010 a3 : a4 : 28c8f0aeffea4e00 [ 21.203519] a5 : 28c8f0aeffea4e00 a6 : 0009 a7 : 8035c9b8 [ 21.203794] s2 : 810df0a8 s3 : 810df718 s4 : ff2010333b98 [ 21.204062] s5 : s6 : 0007 s7 : 80c4a468 [ 21.204331] s8 : 00ffef451410 s9 : 0007 s10: 00aac0510700 [ 21.204606] s11: 0001 t3 : ff6001218f00 t4 : ff6001218f00 [ 21.204876] t5 : ff6001218000 t6 : ff20103338b8 [ 21.205079] status: 00020020 badaddr: cause: 0008 With the incorrect PC, the backtrace showed by crash tool as below, the first stack frame is abnormal, crash> bt PID: 113 TASK: ff6002269600 CPU: 0COMMAND: "sh" #0 [ff201039bb90] __efistub_.Ldebug_info0 at 00ffa5537400 <-- Abnormal #1 [ff201039bcf0] panic at 806578ba #2 [ff201039bd50] sysrq_reset_seq_param_set at 8038c030 #3 [ff201039bda0] __handle_sysrq at 8038c5f8 #4 [ff201039be00] write_sysrq_trigger at 8038cad8 #5 [ff201039be20] proc_reg_write at 801b7edc #6 [ff201039be40] vfs_write at 80152ba6 #7 [ff201039be80] ksys_write at 80152ece #8 [ff201039bed0] sys_write at 80152f46 With the patch, we can get current kernel mode PC, the output as below, [ 17.607658] CPU: 0 PID: 113 Comm: sh Kdump: loaded Not tainted 5.18.9 #42 [ 17.607937] Hardware name: riscv-virtio,qemu (DT) [ 17.608150] epc : 800078f8 ra : 8008862c sp : ff2010333b90 [ 17.608441] gp : 810dde38 tp : ff600226c200 t0 : 8032be68 [ 17.608741] t1 : 0720072007200720 t2 : 663c s0 : ff2010333cf0 [ 17.609025] s1 : a0 : ff2010333b98 a1 : 0001 [ 17.609320] a2 : 0010 a3 : a4 : [ 17.609601] a5 : ff6001c78000 a6 : 003c a7 : 8035c9a4 [ 17.609894] s2 : 810df0a8 s3 : 810df718 s4 : ff2010333b98 [ 17.610186] s5 : s6 : 0007 s7 : 80c4a468 [ 17.610469] s8 : 00ffca281410 s9 : 0007 s10: 00aab5bb6700 [ 17.610755] s11: 0001 t3 : ff6001218f00 t4 : ff6001218f00 [ 17.611041] t5 : ff6001218000 t6 : ff2010333988 [ 17.611255] status: 00020020 badaddr: cause: 0008 With the correct PC, the backtrace showed by crash tool as below, crash> bt PID: 113 TASK: ff600226c200 CPU: 0COMMAND: "sh" #0 [ff2010333b90] riscv_crash_save_regs at 800078f8 <--- Normal #1 [ff2010333cf0] panic at 806578c6 #2 [ff2010333d50] sysrq_reset_seq_param_set at 8038c03c #3 [ff2010333da0] __handle_sysrq at 8038c604 #4 [ff2010333e00] write_sysrq_trigger at 8038cae4 #5 [ff2010333e20] proc_reg_write at 801b7ee8 #6 [ff2010333e40] vfs_write at 80152bb2 #7 [ff2010333e80] ksys_write at 80152eda #8 [ff2010333ed0] sys_write at 80152f52 Fixes: e53d28180d4d ("RISC-V: Add kdump support") Co-developed-by: Guo Ren Signed-off-by: Xianting Tian --- arch/riscv/kernel/crash_save_regs.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/kernel/crash_save_regs.S b/arch/riscv/kernel/crash_save_regs.S index 7832fb763aba..b2a1908c0463 100644 --- a/arch/riscv/kernel/crash_save_regs.S +++ b/arch/riscv/kernel/crash_save_regs.S @@ -44,7 +44,7 @@ SYM_CODE_START(riscv_crash_save_regs) REG_S t6, PT_T6(a0)/* x31 */ csrr t1, CSR_STATUS - csrr t2, CSR_EPC + auipc t2, 0x0 csrr t3, CSR_TVAL csrr t4, CSR_CAUSE -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH V6 3/6] RISC-V: Fixup schedule out issue in machine_crash_shutdown()
Current task of executing crash kexec will be schedule out when panic is triggered by RCU Stall, as it needs to wait rcu completion. It lead to inability to enter the crash system. The implementation of machine_crash_shutdown() is non-standard for RISC-V according to other Arch's implementation(eg, x86, arm64), we need to send IPI to stop secondary harts. [224521.877268] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks: [224521.883471] rcu:0-...0: (3 GPs behind) idle=cfa/0/0x1 softirq=3968793/3968793 fqs=2495 [224521.891742] (detected by 2, t=5255 jiffies, g=60855593, q=328) [224521.897754] Task dump for CPU 0: [224521.901074] task:swapper/0 state:R running task stack: 0 pid: 0 ppid: 0 flags:0x0008 [224521.911090] Call Trace: [224521.913638] [] __schedule+0x208/0x5ea [224521.918957] Kernel panic - not syncing: RCU Stall [224521.923773] bad: scheduling from the idle thread! [224521.928571] CPU: 2 PID: 0 Comm: swapper/2 Kdump: loaded Tainted: G O 5.10.113-yocto-standard #1 [224521.938658] Call Trace: [224521.941200] [] walk_stackframe+0x0/0xaa [224521.946689] [] show_stack+0x32/0x3e [224521.951830] [] dump_stack_lvl+0x7e/0xa2 [224521.957317] [] dump_stack+0x14/0x1c [224521.962459] [] dequeue_task_idle+0x2c/0x40 [224521.968207] [] __schedule+0x41e/0x5ea [224521.973520] [] schedule+0x34/0xe4 [224521.978487] [] schedule_timeout+0xc6/0x170 [224521.984234] [] wait_for_completion+0x98/0xf2 [224521.990157] [] __wait_rcu_gp+0x148/0x14a [224521.995733] [] synchronize_rcu+0x5c/0x66 [224522.001307] [] rcu_sync_enter+0x54/0xe6 [224522.006795] [] percpu_down_write+0x32/0x11c [224522.012629] [] _cpu_down+0x92/0x21a [224522.017771] [] smp_shutdown_nonboot_cpus+0x90/0x118 [224522.024299] [] machine_crash_shutdown+0x30/0x4a [224522.030483] [] __crash_kexec+0x62/0xa6 [224522.035884] [] panic+0xfa/0x2b6 [224522.040678] [] rcu_sched_clock_irq+0xc26/0xcb8 [224522.046774] [] update_process_times+0x62/0x8a [224522.052785] [] tick_sched_timer+0x9e/0x102 [224522.058533] [] __hrtimer_run_queues+0x16a/0x318 [224522.064716] [] hrtimer_interrupt+0xd4/0x228 [224522.070551] [] riscv_timer_interrupt+0x3c/0x48 [224522.076646] [] handle_percpu_devid_irq+0xb0/0x24c [224522.083004] [] __handle_domain_irq+0xa8/0x122 [224522.089014] [] riscv_intc_irq+0x38/0x60 [224522.094501] [] ret_from_exception+0x0/0xc [224522.100161] [] rcu_eqs_enter.constprop.0+0x8c/0xb8 With the patch, it can enter crash system when RCU Stall occur. Fixes: e53d28180d4d ("RISC-V: Add kdump support") Signed-off-by: Xianting Tian --- arch/riscv/kernel/machine_kexec.c | 26 ++ 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c index 86d1b5f9dfb5..ee79e6839b86 100644 --- a/arch/riscv/kernel/machine_kexec.c +++ b/arch/riscv/kernel/machine_kexec.c @@ -138,19 +138,37 @@ void machine_shutdown(void) #endif } +/* Override the weak function in kernel/panic.c */ +void crash_smp_send_stop(void) +{ + static int cpus_stopped; + + /* +* This function can be called twice in panic path, but obviously +* we execute this only once. +*/ + if (cpus_stopped) + return; + + smp_send_stop(); + cpus_stopped = 1; +} + /* * machine_crash_shutdown - Prepare to kexec after a kernel crash * * This function is called by crash_kexec just before machine_kexec - * below and its goal is similar to machine_shutdown, but in case of - * a kernel crash. Since we don't handle such cases yet, this function - * is empty. + * and its goal is to shutdown non-crashing cpus and save registers. */ void machine_crash_shutdown(struct pt_regs *regs) { + local_irq_disable(); + + /* shutdown non-crashing cpus */ + crash_smp_send_stop(); + crash_save_cpu(regs, smp_processor_id()); - machine_shutdown(); pr_info("Starting crashdump kernel...\n"); } -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH V6 5/6] RISC-V: Add arch_crash_save_vmcoreinfo support
Add arch_crash_save_vmcoreinfo(), which exports VM layout(MODULES, VMALLOC, VMEMMAP and KERNEL_LINK_ADDR ranges), va bits and ram base for vmcore. Default pagetable levels and PAGE_OFFSET aren't same for different kernel version as below. For default pagetable levels, it sets sv57 on defaultly in latest kernel and do fallback to try to set sv48 on boot time if sv57 is not supported in current hardware. For ram base, the default value is 0x8020 for qemu riscv64 env, 0x20 for riscv64 SoC platform(eg, SoC platform of RISC-V XuanTie 910 CPU). * Linux Kernel 5.18 ~ * PGTABLE_LEVELS = 5 * PAGE_OFFSET = 0xff60 * Linux Kernel 5.17 ~ * PGTABLE_LEVELS = 4 * PAGE_OFFSET = 0xaf80 * Linux Kernel 4.19 ~ * PGTABLE_LEVELS = 3 * PAGE_OFFSET = 0xffe0 Since these configurations change from time to time and version to version, it is preferable to export them via vmcoreinfo than to change the crash's code frequently, it can simplify the development of crash tool. Signed-off-by: Xianting Tian --- arch/riscv/kernel/Makefile | 1 + arch/riscv/kernel/crash_core.c | 29 + 2 files changed, 30 insertions(+) create mode 100644 arch/riscv/kernel/crash_core.c diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile index 33bb60a354cd..5e149df58176 100644 --- a/arch/riscv/kernel/Makefile +++ b/arch/riscv/kernel/Makefile @@ -81,6 +81,7 @@ obj-$(CONFIG_KGDB)+= kgdb.o obj-$(CONFIG_KEXEC_CORE) += kexec_relocate.o crash_save_regs.o machine_kexec.o obj-$(CONFIG_KEXEC_FILE) += elf_kexec.o machine_kexec_file.o obj-$(CONFIG_CRASH_DUMP) += crash_dump.o +obj-$(CONFIG_CRASH_CORE) += crash_core.o obj-$(CONFIG_JUMP_LABEL) += jump_label.o diff --git a/arch/riscv/kernel/crash_core.c b/arch/riscv/kernel/crash_core.c new file mode 100644 index ..8d7f5ff108da --- /dev/null +++ b/arch/riscv/kernel/crash_core.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include + +void arch_crash_save_vmcoreinfo(void) +{ + VMCOREINFO_NUMBER(VA_BITS); + VMCOREINFO_NUMBER(phys_ram_base); + + vmcoreinfo_append_str("NUMBER(PAGE_OFFSET)=0x%lx\n", PAGE_OFFSET); + vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); + vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", VMALLOC_END); + vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", VMEMMAP_START); + vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END); +#ifdef CONFIG_64BIT + vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR); + vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END); +#endif + + if (IS_ENABLED(CONFIG_64BIT)) { +#ifdef CONFIG_KASAN + vmcoreinfo_append_str("NUMBER(KASAN_SHADOW_START)=0x%lx\n", KASAN_SHADOW_START); + vmcoreinfo_append_str("NUMBER(KASAN_SHADOW_END)=0x%lx\n", KASAN_SHADOW_END); +#endif + vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", KERNEL_LINK_ADDR); + vmcoreinfo_append_str("NUMBER(ADDRESS_SPACE_END)=0x%lx\n", ADDRESS_SPACE_END); + } +} -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH V6 1/6] RISC-V: kexec: Fixup use of smp_processor_id() in preemptible context
Use __smp_processor_id() to avoid check the preemption context when CONFIG_DEBUG_PREEMPT enabled, as we will enter crash kernel and no return. Without the patch, [ 103.781044] sysrq: Trigger a crash [ 103.784625] Kernel panic - not syncing: sysrq triggered crash [ 103.837634] CPU1: off [ 103.889668] CPU2: off [ 103.933479] CPU3: off [ 103.939424] Starting crashdump kernel... [ 103.943442] BUG: using smp_processor_id() in preemptible [] code: sh/346 [ 103.950884] caller is debug_smp_processor_id+0x1c/0x26 [ 103.956051] CPU: 0 PID: 346 Comm: sh Kdump: loaded Not tainted 5.10.113-2-gce03f03bf4ec-dirty #149 [ 103.965355] Call Trace: [ 103.967805] [] walk_stackframe+0x0/0xa2 [ 103.973206] [] show_stack+0x32/0x3e [ 103.978258] [] dump_stack_lvl+0x72/0x8e [ 103.983655] [] dump_stack+0x14/0x1c [ 103.988705] [] check_preemption_disabled+0x9e/0xaa [ 103.995057] [] debug_smp_processor_id+0x1c/0x26 [ 104.001150] [] machine_kexec+0x22/0xd0 [ 104.006463] [] __crash_kexec+0x6a/0xa4 [ 104.011774] [] panic+0xfc/0x2b0 [ 104.016480] [] sysrq_reset_seq_param_set+0x0/0x70 [ 104.022745] [] __handle_sysrq+0x8c/0x154 [ 104.028229] [] write_sysrq_trigger+0x5a/0x6a [ 104.034061] [] proc_reg_write+0x58/0xd4 [ 104.039459] [] vfs_write+0x7e/0x254 [ 104.044509] [] ksys_write+0x58/0xbe [ 104.049558] [] sys_write+0xe/0x16 [ 104.054434] [] ret_from_syscall+0x0/0x2 [ 104.067863] Will call new kernel at ecc0 from hart id 0 [ 104.074939] FDT image at fc5ee000 [ 104.079523] Bye... With the patch we can got clear output, [ 67.740553] sysrq: Trigger a crash [ 67.744166] Kernel panic - not syncing: sysrq triggered crash [ 67.809123] CPU1: off [ 67.865210] CPU2: off [ 67.909075] CPU3: off [ 67.919123] Starting crashdump kernel... [ 67.924900] Will call new kernel at ecc0 from hart id 0 [ 67.932045] FDT image at fc5ee000 [ 67.935560] Bye... Fixes: 0e105f1d0037 ("riscv: use hart id instead of cpu id on machine_kexec") Reviewed-by: Guo Ren Reviewed-by: Heiko Stuebner Reviewed-by: Atish Patra Signed-off-by: Xianting Tian --- arch/riscv/kernel/machine_kexec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c index df8e24559035..86d1b5f9dfb5 100644 --- a/arch/riscv/kernel/machine_kexec.c +++ b/arch/riscv/kernel/machine_kexec.c @@ -171,7 +171,7 @@ machine_kexec(struct kimage *image) struct kimage_arch *internal = &image->arch; unsigned long jump_addr = (unsigned long) image->start; unsigned long first_ind_entry = (unsigned long) &image->head; - unsigned long this_cpu_id = smp_processor_id(); + unsigned long this_cpu_id = __smp_processor_id(); unsigned long this_hart_id = cpuid_to_hartid_map(this_cpu_id); unsigned long fdt_addr = internal->fdt_addr; void *control_code_buffer = page_address(image->control_code_page); -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH V6 6/6] Documentation: kdump: describe VMCOREINFO export for RISCV64
The following interrelated definitions and ranges are needed by the kdump crash tool, they are exported by "arch/riscv/kernel/crash_core.c": VA_BITS, PAGE_OFFSET, phys_ram_base MODULES_VADDR ~ MODULES_END, VMALLOC_START ~ VMALLOC_END, VMEMMAP_START ~ VMEMMAP_END KASAN_SHADOW_START ~ KASAN_SHADOW_END, KERNEL_LINK_ADDR ~ ADDRESS_SPACE_END This patch just add the description of VMCOREINFO export for RISCV64. Signed-off-by: Xianting Tian --- .../admin-guide/kdump/vmcoreinfo.rst | 31 +++ 1 file changed, 31 insertions(+) diff --git a/Documentation/admin-guide/kdump/vmcoreinfo.rst b/Documentation/admin-guide/kdump/vmcoreinfo.rst index 8419019b6a88..1e71e6710404 100644 --- a/Documentation/admin-guide/kdump/vmcoreinfo.rst +++ b/Documentation/admin-guide/kdump/vmcoreinfo.rst @@ -595,3 +595,34 @@ X2TLB - Indicates whether the crashed kernel enabled SH extended mode. + +RISCV64 +=== + +VA_BITS +--- + +The maximum number of bits for virtual addresses. Used to compute the +virtual memory ranges. + +PAGE_OFFSET +--- + +Indicates the virtual kernel start address of direct-mapped RAM region. + +phys_ram_base +- + +Indicates the start physical RAM address. + + +MODULES_VADDR|MODULES_END|VMALLOC_START|VMALLOC_END|VMEMMAP_START|VMEMMAP_END|KASAN_SHADOW_START|KASAN_SHADOW_END|KERNEL_LINK_ADDR|ADDRESS_SPACE_END + + +Used to get the correct ranges: + + * MODULES_VADDR ~ MODULES_END : Kernel module space. + * VMALLOC_START ~ VMALLOC_END : vmalloc() / ioremap() space. + * VMEMMAP_START ~ VMEMMAP_END : vmemmap region, used for struct page array. + * KASAN_SHADOW_START ~ KASAN_SHADOW_END : kasan shadow space. + * KERNEL_LINK_ADDR ~ ADDRESS_SPACE_END : Kernel link and BPF space. -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCH V6 6/6] Documentation: kdump: describe VMCOREINFO export for RISCV64
On 8/11/22 14:41, Xianting Tian wrote: > The following interrelated definitions and ranges are needed by the kdump > crash tool, they are exported by "arch/riscv/kernel/crash_core.c": > VA_BITS, PAGE_OFFSET, phys_ram_base > MODULES_VADDR ~ MODULES_END, > VMALLOC_START ~ VMALLOC_END, > VMEMMAP_START ~ VMEMMAP_END > KASAN_SHADOW_START ~ KASAN_SHADOW_END, > KERNEL_LINK_ADDR ~ ADDRESS_SPACE_END > > This patch just add the description of VMCOREINFO export for RISCV64. > Better say "Document these RISCV64 exports above". -- An old man doll... just what I always wanted! - Clara ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCH V6 0/6] RISC-V fixups to work with crash tool
On Thu, 11 Aug 2022 00:41:44 PDT (-0700), xianting.t...@linux.alibaba.com wrote: I ever sent the patch 1 in the link: https://patchwork.kernel.org/project/linux-riscv/patch/20220708073150.352830-3-xianting.t...@linux.alibaba.com/ And patch 2,3 in the link: https://patchwork.kernel.org/project/linux-riscv/patch/20220714113300.367854-2-xianting.t...@linux.alibaba.com/ https://patchwork.kernel.org/project/linux-riscv/patch/20220714113300.367854-3-xianting.t...@linux.alibaba.com/ This patch set just put these patches together, and with three new patch 4, 5, 6. these six patches are the fixups for machine_kexec, kernel mode PC for vmcore and improvements for vmcoreinfo, memory layout dump and fixup schedule out issue in machine_crash_shutdown(). The main changes in the six patchs as below, Patch 1: Fixup use of smp_processor_id() in preemptible context, to cleanup the console prints. Patch 2: Fixup to get correct kernel mode PC for kernel mode regs for vmcore. Patch 3: Fixup schedule out issue in machine_crash_shutdown() Patch 4: Add modules to virtual kernel memory layout dump. Patch 5: Add VM layout, va bits, ram base to vmcoreinfo, which can simplify the development of crash tool as ARM64 already did (arch/arm64/kernel/crash_core.c). Patch 6: Updates vmcoreinfo.rst for vmcoreinfo export for RISCV64. With these six patches(patch 2 is must), crash tool can work well to analyze a vmcore. The patches for crash tool for RISCV64 is in the link: https://lore.kernel.org/linux-riscv/20220801043040.2003264-1-xianting.t...@linux.alibaba.com/ -- Changes v1 -> v2: 1, remove the patch "Add a fast call path of crash_kexec()" from this series of patches, as it already applied to riscv git. https://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git/commit/?h=for-next&id=3f1901110a89b0e2e13adb2ac8d1a7102879ea98 2, add 'Reviewed-by' based on the comments of v1. Changes v2 -> v3: use "riscv" instead of "riscv64" in patch 5 subject line. Changes v3 -> v4: use "riscv" instead of "riscv64" in the summary of patch 5 subject line. Changes v4 -> v5: add a new patch "RISC-V: Fixup schedule out issue in machine_crash_shutdown()" Changes v5 -> v6: 1, move "fixup" patches to the start of the patch set. 2, change patch 1, 2, 6's subject to make it tell more what it's about. 3, add Fixes for patch 3. 4, adjuest the changes format for patch 6. Xianting Tian (6): RISC-V: kexec: Fixup use of smp_processor_id() in preemptible context RISC-V: Fixup get incorrect user mode PC for kernel mode regs RISC-V: Fixup schedule out issue in machine_crash_shutdown() RISC-V: Add modules to virtual kernel memory layout dump RISC-V: Add arch_crash_save_vmcoreinfo support Documentation: kdump: describe VMCOREINFO export for RISCV64 .../admin-guide/kdump/vmcoreinfo.rst | 31 +++ arch/riscv/kernel/Makefile| 1 + arch/riscv/kernel/crash_core.c| 29 + arch/riscv/kernel/crash_save_regs.S | 2 +- arch/riscv/kernel/machine_kexec.c | 28 ++--- arch/riscv/mm/init.c | 4 +++ 6 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 arch/riscv/kernel/crash_core.c Thank. I've taken the first 4 onto for-next, which is still targeted for 5.20, as they're fixes. I'm not opposed to taking the documentation patch for this cycle as well, it just needs some going-over as the wording looks very odd (or at least it does to me right now, maybe I'm just still half asleep). Patch 5 is a new feature, and given that it's being spun during the merge window it's too late. ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCH V6 0/6] RISC-V fixups to work with crash tool
在 2022/8/12 上午12:17, Palmer Dabbelt 写道: On Thu, 11 Aug 2022 00:41:44 PDT (-0700), xianting.t...@linux.alibaba.com wrote: I ever sent the patch 1 in the link: https://patchwork.kernel.org/project/linux-riscv/patch/20220708073150.352830-3-xianting.t...@linux.alibaba.com/ And patch 2,3 in the link: https://patchwork.kernel.org/project/linux-riscv/patch/20220714113300.367854-2-xianting.t...@linux.alibaba.com/ https://patchwork.kernel.org/project/linux-riscv/patch/20220714113300.367854-3-xianting.t...@linux.alibaba.com/ This patch set just put these patches together, and with three new patch 4, 5, 6. these six patches are the fixups for machine_kexec, kernel mode PC for vmcore and improvements for vmcoreinfo, memory layout dump and fixup schedule out issue in machine_crash_shutdown(). The main changes in the six patchs as below, Patch 1: Fixup use of smp_processor_id() in preemptible context, to cleanup the console prints. Patch 2: Fixup to get correct kernel mode PC for kernel mode regs for vmcore. Patch 3: Fixup schedule out issue in machine_crash_shutdown() Patch 4: Add modules to virtual kernel memory layout dump. Patch 5: Add VM layout, va bits, ram base to vmcoreinfo, which can simplify the development of crash tool as ARM64 already did (arch/arm64/kernel/crash_core.c). Patch 6: Updates vmcoreinfo.rst for vmcoreinfo export for RISCV64. With these six patches(patch 2 is must), crash tool can work well to analyze a vmcore. The patches for crash tool for RISCV64 is in the link: https://lore.kernel.org/linux-riscv/20220801043040.2003264-1-xianting.t...@linux.alibaba.com/ -- Changes v1 -> v2: 1, remove the patch "Add a fast call path of crash_kexec()" from this series of patches, as it already applied to riscv git. https://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git/commit/?h=for-next&id=3f1901110a89b0e2e13adb2ac8d1a7102879ea98 2, add 'Reviewed-by' based on the comments of v1. Changes v2 -> v3: use "riscv" instead of "riscv64" in patch 5 subject line. Changes v3 -> v4: use "riscv" instead of "riscv64" in the summary of patch 5 subject line. Changes v4 -> v5: add a new patch "RISC-V: Fixup schedule out issue in machine_crash_shutdown()" Changes v5 -> v6: 1, move "fixup" patches to the start of the patch set. 2, change patch 1, 2, 6's subject to make it tell more what it's about. 3, add Fixes for patch 3. 4, adjuest the changes format for patch 6. Xianting Tian (6): RISC-V: kexec: Fixup use of smp_processor_id() in preemptible context RISC-V: Fixup get incorrect user mode PC for kernel mode regs RISC-V: Fixup schedule out issue in machine_crash_shutdown() RISC-V: Add modules to virtual kernel memory layout dump RISC-V: Add arch_crash_save_vmcoreinfo support Documentation: kdump: describe VMCOREINFO export for RISCV64 .../admin-guide/kdump/vmcoreinfo.rst | 31 +++ arch/riscv/kernel/Makefile | 1 + arch/riscv/kernel/crash_core.c | 29 + arch/riscv/kernel/crash_save_regs.S | 2 +- arch/riscv/kernel/machine_kexec.c | 28 ++--- arch/riscv/mm/init.c | 4 +++ 6 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 arch/riscv/kernel/crash_core.c Thank. I've taken the first 4 onto for-next, which is still targeted for 5.20, as they're fixes. I'm not opposed to taking the documentation patch for this cycle as well, it just needs some going-over as the wording looks very odd (or at least it does to me right now, maybe I'm just still half asleep). Patch 5 is a new feature, and given that it's being spun during the merge window it's too late. Thank you Palmer, Conor. I saw 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 Looking forward to be merged to 6.1(?). thanks. ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec