android_kernel_xiaomi_sm8450/arch/s390/kernel
Vasily Gorbik da99331fc6 s390/entry: save the caller of psw_idle
[ Upstream commit a994eddb947ea9ebb7b14d9a1267001699f0a136 ]

Currently psw_idle does not allocate a stack frame and does not
save its r14 and r15 into the save area. Even though this is valid from
call ABI point of view, because psw_idle does not make any calls
explicitly, in reality psw_idle is an entry point for controlled
transition into serving interrupts. So, in practice, psw_idle stack
frame is analyzed during stack unwinding. Depending on build options
that r14 slot in the save area of psw_idle might either contain a value
saved by previous sibling call or complete garbage.

  [task    0000038000003c28] do_ext_irq+0xd6/0x160
  [task    0000038000003c78] ext_int_handler+0xba/0xe8
  [task   *0000038000003dd8] psw_idle_exit+0x0/0x8 <-- pt_regs
 ([task    0000038000003dd8] 0x0)
  [task    0000038000003e10] default_idle_call+0x42/0x148
  [task    0000038000003e30] do_idle+0xce/0x160
  [task    0000038000003e70] cpu_startup_entry+0x36/0x40
  [task    0000038000003ea0] arch_call_rest_init+0x76/0x80

So, to make a stacktrace nicer and actually point for the real caller of
psw_idle in this frequently occurring case, make psw_idle save its r14.

  [task    0000038000003c28] do_ext_irq+0xd6/0x160
  [task    0000038000003c78] ext_int_handler+0xba/0xe8
  [task   *0000038000003dd8] psw_idle_exit+0x0/0x6 <-- pt_regs
 ([task    0000038000003dd8] arch_cpu_idle+0x3c/0xd0)
  [task    0000038000003e10] default_idle_call+0x42/0x148
  [task    0000038000003e30] do_idle+0xce/0x160
  [task    0000038000003e70] cpu_startup_entry+0x36/0x40
  [task    0000038000003ea0] arch_call_rest_init+0x76/0x80

Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-04-28 13:40:02 +02:00
..
syscalls mm/madvise: introduce process_madvise() syscall: an external memory hinting API 2020-10-18 09:27:10 -07:00
vdso64 Kbuild updates for v5.10 2020-10-22 13:13:57 -07:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
alternative.c s390: add automatic detection of the spectre defense 2018-03-28 08:38:24 +02:00
asm-offsets.c s390: fix fpu restore in entry.S 2020-11-23 11:52:13 +01:00
audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
audit.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
base.S s390/base: remove unused s390_base_mcck_handler 2019-09-03 13:53:56 +02:00
cache.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_linux.c s390: use generic UID16 implementation 2019-01-18 09:33:18 +01:00
compat_linux.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_ptrace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_signal.c signal: Remove task parameter from force_sig 2019-05-27 09:36:28 -05:00
cpcmd.c s390/cpcmd: fix inline assembly register clobbering 2021-04-14 08:42:10 +02:00
crash_dump.c s390/nvme: support firmware-assisted dump to NVMe disks 2020-10-02 14:40:48 +02:00
debug.c s390/debug: debug feature version 3 2020-08-11 18:16:43 +02:00
diag.c s390/diag: convert to use DEFINE_SEQ_ATTRIBUTE macro 2020-09-17 14:11:03 +02:00
dis.c s390/dis: get rid of set_fs() usage 2020-09-17 14:11:03 +02:00
dumpstack.c kernel: rename show_stack_loglvl() => show_stack() 2020-06-09 09:39:13 -07:00
early_printk.c s390/sclp: remove unused sclp_early_printk_forced 2020-09-21 08:08:44 +02:00
early.c s390: remove cad commandline option 2020-09-30 12:09:54 +02:00
ebcdic.c s390: ebcdic: convert comments to UTF-8 2018-08-23 18:48:43 -07:00
entry.h s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
entry.S s390/entry: save the caller of psw_idle 2021-04-28 13:40:02 +02:00
fpu.c s390: correct some inline assembly constraints 2019-04-17 10:40:57 +02:00
ftrace.c maccess: rename probe_kernel_{read,write} to copy_{from,to}_kernel_nofault 2020-06-17 10:57:41 -07:00
guarded_storage.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-13 11:47:01 -08:00
head64.S s390/head64: correct init_task stack setup 2019-11-30 10:52:45 +01:00
idle.c sched/idle: Fix arch_cpu_idle() vs tracing 2020-11-24 16:47:35 +01:00
ima_arch.c s390/kexec_file: Disable kexec_load when IPLed secure 2019-04-29 10:44:03 +02:00
ipl_vmparm.c s390/ipl: provide uapi header for list directed IPL 2019-04-26 12:34:05 +02:00
ipl.c s390/ipl: add support to control memory clearing for nvme re-IPL 2020-10-02 14:40:48 +02:00
irq.c s390/irq: make init_ext_interrupts static 2020-03-11 14:18:44 +01:00
jump_label.c s390/jump_label: remove unused structure definition 2019-06-07 10:10:10 +02:00
kdebugfs.c s390: no need to check return value of debugfs_create functions 2019-01-28 15:58:55 +01:00
kexec_elf.c kexec: Fix file verification on S390 2019-09-10 13:27:51 +01:00
kexec_image.c kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE 2019-08-19 21:54:15 -07:00
kprobes_insn_page.S s390/kprobes: move insn_page to text segment 2020-10-09 23:45:30 +02:00
kprobes.c s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
lgr.c s390: convert to msecs_to_jiffies() 2020-06-29 16:31:46 +02:00
machine_kexec_file.c s390/kexec_file: fix initrd location for kdump kernel 2020-05-14 23:21:37 +02:00
machine_kexec_reloc.c s390/kaslr: add support for R_390_JMP_SLOT relocation type 2020-05-20 10:13:27 +02:00
machine_kexec.c mm: remove unneeded includes of <asm/pgalloc.h> 2020-08-07 11:33:26 -07:00
Makefile s390/kprobes: move insn_page to text segment 2020-10-09 23:45:30 +02:00
mcount.S s390: support KPROBES_ON_FTRACE 2020-01-30 13:07:55 +01:00
module.c s390/module: Use s390_kernel_write() for late relocations 2020-05-08 00:12:43 +02:00
nmi.c s390: remove critical section cleanup from entry.S 2020-05-28 12:21:54 +02:00
nospec-branch.c s390 updates for the 5.2 merge window 2019-05-06 16:42:54 -07:00
nospec-sysfs.c s390: Convert IS_ENABLED uses to __is_defined 2019-04-11 13:36:53 +02:00
numa.c s390/numa: move code to arch/s390/kernel 2020-08-11 18:16:55 +02:00
os_info.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf_cpum_cf_common.c s390/cpum_cf: move common functions into a separate file 2019-02-22 09:19:55 +01:00
perf_cpum_cf_diag.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +01:00
perf_cpum_cf_events.c s390/cpum_cf,perf: change DFLT_CCERROR counter name 2020-07-21 13:53:56 +02:00
perf_cpum_cf.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +01:00
perf_cpum_sf.c - fix system call exit path; avoid return to user space with 2020-11-17 11:22:03 -08:00
perf_event.c s390: add error handling to perf_callchain_kernel 2019-10-31 17:20:54 +01:00
perf_regs.c perf/arch: Remove perf_sample_data::regs_user_copy 2020-11-09 18:12:34 +01:00
pgm_check.S s390: add 3f program exception handler 2020-09-14 10:08:07 +02:00
process.c Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2020-08-09 13:33:54 -07:00
processor.c s390/cpuinfo: do not skip info for CPUs without MHz feature 2020-03-23 13:41:55 +01:00
ptrace.c s390/ptrace: fix storage key handling 2020-08-17 13:17:14 +02:00
reipl.S s390: add missing ENDPROC statements to assembler functions 2019-05-02 13:54:11 +02:00
relocate_kernel.S s390: add missing ENDPROC statements to assembler functions 2019-05-02 13:54:11 +02:00
runtime_instr.c s390/runtime_instrumentation: fix storage key handling 2020-08-17 13:17:10 +02:00
setup.c s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
signal.c tracehook: clear TIF_NOTIFY_RESUME in tracehook_notify_resume() 2020-10-17 15:04:36 -06:00
smp.c s390/smp: __smp_rescan_cpus() - move cpumask away from stack 2021-03-17 17:06:25 +01:00
stacktrace.c stacktrace: Remove reliable argument from arch_stack_walk() callback 2020-09-18 14:24:16 +01:00
sthyi.c s390/sthyi: Fix machine name validity indication 2018-10-15 12:17:00 +02:00
sys_s390.c s390: autogenerate compat syscall wrappers 2019-01-18 09:33:19 +01:00
sysinfo.c s390: no need to check return value of debugfs_create functions 2019-01-28 15:58:55 +01:00
time.c s390/vdso: copy tod_steering_delta value to vdso_data page 2021-04-07 15:00:10 +02:00
topology.c s390: convert to msecs_to_jiffies() 2020-06-29 16:31:46 +02:00
trace.c s390/ftrace: fix potential crashes when switching tracers 2020-04-22 16:20:55 +02:00
traps.c s390/kernel: expand exception table logic to allow new handling options 2020-07-20 10:55:50 +02:00
unwind_bc.c s390/unwind: stop gracefully at user mode pt_regs in irq stack 2019-12-18 23:29:26 +01:00
uprobes.c s390/uprobes: implement arch_uretprobe_is_alive() 2018-04-23 07:57:16 +02:00
uv.c s390: uv: Fix sysfs max number of VCPUs reporting 2021-02-03 23:28:39 +01:00
vdso.c s390: convert to GENERIC_VDSO 2020-08-26 18:47:21 +02:00
vmlinux.lds.S vmlinux.lds.h: Split ELF_DETAILS from STABS_DEBUG 2020-09-01 09:50:35 +02:00
vtime.c s390/vtime: fix increased steal time accounting 2021-03-25 09:04:05 +01:00