linux/arch/riscv/kernel
Chen Huang eac2f3059e
riscv: stacktrace: fix the riscv stacktrace when CONFIG_FRAME_POINTER enabled
As [1] and [2] said, the arch_stack_walk should not to trace itself, or it will
leave the trace unexpectedly when called. The example is when we do "cat
/sys/kernel/debug/page_owner", all pages' stack is the same.

arch_stack_walk+0x18/0x20
stack_trace_save+0x40/0x60
register_dummy_stack+0x24/0x5e
init_page_owner+0x2e

So we use __builtin_frame_address(1) as the first frame to be walked. And mark
the arch_stack_walk() noinline.

We found that pr_cont will affact pages' stack whose task state is RUNNING when
testing "echo t > /proc/sysrq-trigger". So move the place of pr_cont and mark
the function dump_backtrace() noinline.

Also we move the case when task == NULL into else branch, and test for it in
"echo c > /proc/sysrq-trigger".

[1] https://lore.kernel.org/lkml/20210319184106.5688-1-mark.rutland@arm.com/
[2] https://lore.kernel.org/lkml/20210317142050.57712-1-chenjun102@huawei.com/

Signed-off-by: Chen Huang <chenhuang5@huawei.com>
Fixes: 5d8544e2d0 ("RISC-V: Generic library routines and assembly")
Cc: stable@vger.kernel.org
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
2021-05-22 18:59:20 -07:00
..
probes RISC-V Patches for the 5.13 Merge Window, Part 1 2021-05-06 09:24:18 -07:00
vdso riscv: vdso: fix and clean-up Makefile 2021-04-26 08:25:19 -07:00
.gitignore
asm-offsets.c riscv: Enable per-task stack canaries 2021-01-14 15:09:10 -08:00
cacheinfo.c riscv: cacheinfo: Fix using smp_processor_id() in preemptible 2021-01-12 20:25:32 -08:00
cpu-hotplug.c
cpu.c RISC-V: Rename and move plic_find_hart_id() to arch directory 2020-06-09 19:11:20 -07:00
cpu_ops.c treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
cpu_ops_sbi.c
cpu_ops_spinwait.c
cpufeature.c
crash_dump.c RISC-V: Add crash kernel support 2021-04-26 08:25:24 -07:00
crash_save_regs.S RISC-V: Add kdump support 2021-04-26 08:25:23 -07:00
efi-header.S RISC-V: Add PE/COFF header for EFI stub 2020-10-02 14:31:16 -07:00
efi.c RISC-V: Add EFI runtime services 2020-10-02 14:31:28 -07:00
entry.S RISC-V Patches for the 5.13 Merge Window, Part 1 2021-05-06 09:24:18 -07:00
fpu.S
ftrace.c riscv: Using PATCHABLE_FUNCTION_ENTRY instead of MCOUNT 2021-01-14 15:09:05 -08:00
head.h RISC-V: enable XIP 2021-04-26 08:31:28 -07:00
head.S RISC-V: enable XIP 2021-04-26 08:31:28 -07:00
image-vars.h arch/riscv:fix typo in a comment in arch/riscv/kernel/image-vars.h 2021-02-18 23:18:00 -08:00
irq.c RISC-V: Remove do_IRQ() function 2020-06-09 19:11:24 -07:00
jump_label.c riscv: Add jump-label implementation 2020-07-30 11:37:43 -07:00
kexec_relocate.S RISC-V: Add kdump support 2021-04-26 08:25:23 -07:00
kgdb.c riscv: Fix "no previous prototype" compile warning in kgdb.c file 2020-07-09 20:09:30 -07:00
machine_kexec.c RISC-V: Add kdump support 2021-04-26 08:25:23 -07:00
Makefile RISC-V Patches for the 5.13 Merge Window, Part 1 2021-05-06 09:24:18 -07:00
mcount-dyn.S riscv: Using PATCHABLE_FUNCTION_ENTRY instead of MCOUNT 2021-01-14 15:09:05 -08:00
mcount.S riscv: Workaround mcount name prior to clang-13 2021-04-26 08:25:01 -07:00
module-sections.c
module.c riscv: module: Create module allocations without exec permissions 2021-04-26 08:25:15 -07:00
patch.c riscv: Fixup compile error BUILD_BUG_ON failed 2021-01-14 15:09:01 -08:00
perf_callchain.c riscv: Make stack walk callback consistent with generic code 2020-11-20 18:53:38 -08:00
perf_event.c
perf_regs.c perf/arch: Remove perf_sample_data::regs_user_copy 2020-11-09 18:12:34 +01:00
process.c riscv: process: Fix no prototype for show_regs 2021-03-09 20:46:05 -08:00
ptrace.c RISC-V: Implement ptrace regs and stack API 2021-01-14 15:09:01 -08:00
reset.c
riscv_ksyms.c riscv: provide memmove implementation 2020-12-10 17:27:54 -08:00
sbi.c RISC-V Patches for the 5.13 Merge Window, Part 1 2021-05-06 09:24:18 -07:00
setup.c riscv: Consistify protect_kernel_linear_mapping_text_rodata() use 2021-05-06 09:40:15 -07:00
signal.c riscv: Add uprobes supported 2021-01-14 15:09:08 -08:00
smp.c RISC-V: Fix error code returned by riscv_hartid_to_cpuid() 2021-05-01 08:53:19 -07:00
smpboot.c riscv: Introduce alternative mechanism to apply errata solution 2021-04-26 08:24:55 -07:00
soc.c riscv: Fix builtin DTB handling 2021-01-07 19:00:50 -08:00
stacktrace.c riscv: stacktrace: fix the riscv stacktrace when CONFIG_FRAME_POINTER enabled 2021-05-22 18:59:20 -07:00
sys_riscv.c RISC-V: Don't allow write+exec only page mapping request in mmap 2020-06-18 17:28:53 -07:00
syscall_table.c riscv: Constify sys_call_table 2021-04-26 08:25:09 -07:00
time.c RISC-V Patches for the 5.13 Merge Window, Part 1 2021-05-06 09:24:18 -07:00
traps.c riscv: remove unused handle_exception symbol 2021-05-06 09:40:16 -07:00
traps_misaligned.c
vdso.c riscv: Mark some global variables __ro_after_init 2021-04-26 08:25:08 -07:00
vmlinux-xip.lds.S RISC-V: enable XIP 2021-04-26 08:31:28 -07:00
vmlinux.lds.S RISC-V: enable XIP 2021-04-26 08:31:28 -07:00