kernel_samsung_a53x/arch/powerpc/kernel
Naveen N Rao 01ff5fc7f7 powerpc/ftrace: Create a dummy stackframe to fix stack unwind
commit 41a506ef71eb38d94fe133f565c87c3e06ccc072 upstream.

With ppc64 -mprofile-kernel and ppc32 -pg, profiling instructions to
call into ftrace are emitted right at function entry. The instruction
sequence used is minimal to reduce overhead. Crucially, a stackframe is
not created for the function being traced. This breaks stack unwinding
since the function being traced does not have a stackframe for itself.
As such, it never shows up in the backtrace:

/sys/kernel/debug/tracing # echo 1 > /proc/sys/kernel/stack_tracer_enabled
/sys/kernel/debug/tracing # cat stack_trace
        Depth    Size   Location    (17 entries)
        -----    ----   --------
  0)     4144      32   ftrace_call+0x4/0x44
  1)     4112     432   get_page_from_freelist+0x26c/0x1ad0
  2)     3680     496   __alloc_pages+0x290/0x1280
  3)     3184     336   __folio_alloc+0x34/0x90
  4)     2848     176   vma_alloc_folio+0xd8/0x540
  5)     2672     272   __handle_mm_fault+0x700/0x1cc0
  6)     2400     208   handle_mm_fault+0xf0/0x3f0
  7)     2192      80   ___do_page_fault+0x3e4/0xbe0
  8)     2112     160   do_page_fault+0x30/0xc0
  9)     1952     256   data_access_common_virt+0x210/0x220
 10)     1696     400   0xc00000000f16b100
 11)     1296     384   load_elf_binary+0x804/0x1b80
 12)      912     208   bprm_execve+0x2d8/0x7e0
 13)      704      64   do_execveat_common+0x1d0/0x2f0
 14)      640     160   sys_execve+0x54/0x70
 15)      480      64   system_call_exception+0x138/0x350
 16)      416     416   system_call_common+0x160/0x2c4

Fix this by having ftrace create a dummy stackframe for the function
being traced. With this, backtraces now capture the function being
traced:

/sys/kernel/debug/tracing # cat stack_trace
        Depth    Size   Location    (17 entries)
        -----    ----   --------
  0)     3888      32   _raw_spin_trylock+0x8/0x70
  1)     3856     576   get_page_from_freelist+0x26c/0x1ad0
  2)     3280      64   __alloc_pages+0x290/0x1280
  3)     3216     336   __folio_alloc+0x34/0x90
  4)     2880     176   vma_alloc_folio+0xd8/0x540
  5)     2704     416   __handle_mm_fault+0x700/0x1cc0
  6)     2288      96   handle_mm_fault+0xf0/0x3f0
  7)     2192      48   ___do_page_fault+0x3e4/0xbe0
  8)     2144     192   do_page_fault+0x30/0xc0
  9)     1952     608   data_access_common_virt+0x210/0x220
 10)     1344      16   0xc0000000334bbb50
 11)     1328     416   load_elf_binary+0x804/0x1b80
 12)      912      64   bprm_execve+0x2d8/0x7e0
 13)      848     176   do_execveat_common+0x1d0/0x2f0
 14)      672     192   sys_execve+0x54/0x70
 15)      480      64   system_call_exception+0x138/0x350
 16)      416     416   system_call_common+0x160/0x2c4

This results in two additional stores in the ftrace entry code, but
produces reliable backtraces.

Fixes: 153086644fd1 ("powerpc/ftrace: Add support for -mprofile-kernel ftrace ABI")
Cc: stable@vger.kernel.org
Signed-off-by: Naveen N Rao <naveen@kernel.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230621051349.759567-1-naveen@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-18 12:11:58 +01:00
..
ptrace Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
syscalls Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
trace powerpc/ftrace: Create a dummy stackframe to fix stack unwind 2024-11-18 12:11:58 +01:00
vdso32 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vdso64 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
align.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
asm-offsets.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
audit.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
btext.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cacheinfo.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cacheinfo.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
compat_audit.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu_setup_6xx.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu_setup_44x.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu_setup_fsl_booke.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu_setup_pa6t.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu_setup_power.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu_setup_ppc970.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cputable.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crash_dump.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dawr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dbell.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dma-iommu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dma-mask.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dma-swiotlb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dt_cpu_ftrs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
early_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eeh.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eeh_cache.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eeh_driver.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eeh_event.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eeh_pe.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eeh_sysfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
entry_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
entry_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
epapr_hcalls.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
epapr_paravirt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
exceptions-64e.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
exceptions-64s.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fadump.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
firmware.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fpu.S powerpc: Don't clobber f0/vs0 during fp|altivec register save 2024-11-18 12:11:09 +01:00
fsl_booke_entry_mapping.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_8xx.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_32.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_40x.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_44x.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_book3s_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_booke.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head_fsl_booke.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hw_breakpoint.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hw_breakpoint_constraints.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idle.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idle_6xx.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idle_book3e.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idle_book3s.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idle_e500.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ima_arch.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
io-workarounds.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
io.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iomap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iommu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
isa-bridge.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jump_label.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kgdb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kprobes-ftrace.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kprobes.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kvm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kvm_emul.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
l2cr_6xx.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
legacy_serial.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mce.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mce_power.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
misc.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
misc_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
misc_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
module.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
module_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
module_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
msi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
note.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nvram_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
of_platform.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
optprobes.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
optprobes_head.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
paca.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-common.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-hotplug.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci_dn.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci_of_scan.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pmc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ppc32.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ppc_save_regs.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
proc_powerpc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
process.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
prom.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
prom_init.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
prom_init_check.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
prom_parse.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
reloc_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
reloc_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtas-proc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtas-rtc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtas.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtas_flash.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtas_pci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtasd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
secure_boot.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
security.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
secvar-ops.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
secvar-sysfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
setup-common.c powerpc/mm: Fix boot crash with FLATMEM 2024-11-18 10:58:47 +01:00
setup.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
setup_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
setup_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
signal.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
signal.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
signal_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
signal_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
smp-tbsync.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
smp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stacktrace.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
suspend.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swsusp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swsusp_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swsusp_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swsusp_asm64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
swsusp_booke.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sys_ppc32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
syscall_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
syscalls.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sysfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
systbl.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
systbl_chk.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tau_6xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
time.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tm.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
traps.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ucall.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
udbg.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
udbg_16550.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uprobes.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vdso.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vecemu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vector.S powerpc: Don't clobber f0/vs0 during fp|altivec register save 2024-11-18 12:11:09 +01:00
vmlinux.lds.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
watchdog.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00