linux/arch/s390/kernel
Heiko Carstens b1cae1f84a s390: fix irq state tracing
With commit 58c644ba51 ("sched/idle: Fix arch_cpu_idle() vs
tracing") common code calls arch_cpu_idle() with a lockdep state that
tells irqs are on.

This doesn't work very well for s390: psw_idle() will enable interrupts
to wait for an interrupt. As soon as an interrupt occurs the interrupt
handler will verify if the old context was psw_idle(). If that is the
case the interrupt enablement bits in the old program status word will
be cleared.

A subsequent test in both the external as well as the io interrupt
handler checks if in the old context interrupts were enabled. Due to
the above patching of the old program status word it is assumed the
old context had interrupts disabled, and therefore a call to
TRACE_IRQS_OFF (aka trace_hardirqs_off_caller) is skipped. Which in
turn makes lockdep incorrectly "think" that interrupts are enabled
within the interrupt handler.

Fix this by unconditionally calling TRACE_IRQS_OFF when entering
interrupt handlers. Also call unconditionally TRACE_IRQS_ON when
leaving interrupts handlers.

This leaves the special psw_idle() case, which now returns with
interrupts disabled, but has an "irqs on" lockdep state. So callers of
psw_idle() must adjust the state on their own, if required. This is
currently only __udelay_disabled().

Fixes: 58c644ba51 ("sched/idle: Fix arch_cpu_idle() vs tracing")
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
2020-12-02 18:17:50 +01: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
Makefile s390/kprobes: move insn_page to text segment 2020-10-09 23:45:30 +02: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 License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01: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.c s390: remove cad commandline option 2020-09-30 12:09:54 +02:00
early_printk.c s390/sclp: remove unused sclp_early_printk_forced 2020-09-21 08:08:44 +02:00
ebcdic.c s390: ebcdic: convert comments to UTF-8 2018-08-23 18:48:43 -07:00
entry.S s390: fix irq state tracing 2020-12-02 18:17:50 +01:00
entry.h s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07: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.c s390/ipl: add support to control memory clearing for nvme re-IPL 2020-10-02 14:40:48 +02:00
ipl_vmparm.c s390/ipl: provide uapi header for list directed IPL 2019-04-26 12:34:05 +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.c s390 updates for the 5.10 merge window 2020-10-16 12:36:38 -07:00
kprobes_insn_page.S s390/kprobes: move insn_page to text segment 2020-10-09 23:45:30 +02:00
lgr.c s390: convert to msecs_to_jiffies() 2020-06-29 16:31:46 +02:00
machine_kexec.c mm: remove unneeded includes of <asm/pgalloc.h> 2020-08-07 11:33:26 -07: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
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.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +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_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: move rcu_cpu_starting() earlier 2020-11-03 15:12:16 +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/stp: unify stp_work_mutex and clock_sync_mutex 2020-09-26 15:51:21 +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: handle destroy page legacy interface 2020-11-18 13:08:49 +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 sched/cputime: Rename vtime_account_system() to vtime_account_kernel() 2019-10-09 12:39:25 +02:00