[PATCH V6 0/6] RISC-V fixups to work with crash tool

2022-08-11 Thread Xianting Tian
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

2022-08-11 Thread Xianting Tian
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

2022-08-11 Thread Xianting Tian
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()

2022-08-11 Thread Xianting Tian
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

2022-08-11 Thread Xianting Tian
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

2022-08-11 Thread Xianting Tian
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

2022-08-11 Thread Xianting Tian
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

2022-08-11 Thread Bagas Sanjaya
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

2022-08-11 Thread 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.


___
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-08-11 Thread Xianting Tian


在 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