linux/arch
Christian Borntraeger 01137d8980 s390/gmap: voluntarily schedule during key setting
[ Upstream commit 6d5946274d ]

With large and many guest with storage keys it is possible to create
large latencies or stalls during initial key setting:

rcu: INFO: rcu_sched self-detected stall on CPU
rcu:   18-....: (2099 ticks this GP) idle=54e/1/0x4000000000000002 softirq=35598716/35598716 fqs=998
       (t=2100 jiffies g=155867385 q=20879)
Task dump for CPU 18:
CPU 1/KVM       R  running task        0 1030947 256019 0x06000004
Call Trace:
sched_show_task
rcu_dump_cpu_stacks
rcu_sched_clock_irq
update_process_times
tick_sched_handle
tick_sched_timer
__hrtimer_run_queues
hrtimer_interrupt
do_IRQ
ext_int_handler
ptep_zap_key

The mmap lock is held during the page walking but since this is a
semaphore scheduling is still possible. Same for the kvm srcu.
To minimize overhead do this on every segment table entry or large page.

Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Link: https://lore.kernel.org/r/20220530092706.11637-2-borntraeger@linux.ibm.com
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-06-14 18:32:44 +02:00
..
alpha alpha: define get_cycles macro for arch-override 2022-05-30 09:33:40 +02:00
arc ARC: entry: fix syscall_trace_exit argument 2022-04-27 13:53:55 +02:00
arm ARM: pxa: maybe fix gpio lookup tables 2022-06-09 10:21:28 +02:00
arm64 bpf, arm64: Clear prog->jited_len along prog->jited 2022-06-14 18:32:40 +02:00
c6x
csky csky: patch_text: Fixup last cpu should be master 2022-06-09 10:21:26 +02:00
h8300
hexagon hexagon: clean up timer-regs.h 2021-11-26 10:39:19 +01:00
ia64 ia64: define get_cycles macro for arch-override 2022-05-30 09:33:40 +02:00
m68k m68knommu: fix undefined reference to `_init_sp' 2022-06-14 18:32:38 +02:00
microblaze uaccess: fix nios2 and microblaze get_user_8() 2022-04-08 14:40:08 +02:00
mips mips: cpc: Fix refcount leak in mips_cpc_default_phys_base 2022-06-14 18:32:37 +02:00
nds32 nds32: fix access_ok() checks in get/put_user 2022-03-28 09:57:10 +02:00
nios2 nios2: use fallback for random_get_entropy() instead of zero 2022-05-30 09:33:41 +02:00
openrisc openrisc: start CPU timer early in boot 2022-06-09 10:20:55 +02:00
parisc parisc/stifb: Implement fb_is_primary_device() 2022-06-09 10:20:47 +02:00
powerpc powerpc/kasan: Force thread size increase with KASAN 2022-06-14 18:32:39 +02:00
riscv riscv: read-only pages should not be writable 2022-06-14 18:32:36 +02:00
s390 s390/gmap: voluntarily schedule during key setting 2022-06-14 18:32:44 +02:00
sh sh: define __BIG_ENDIAN for math-emu 2021-11-26 10:39:12 +01:00
sparc sparc: use fallback for random_get_entropy() instead of zero 2022-05-30 09:33:42 +02:00
um um: chan_user: Fix winch_tramp() return value 2022-06-09 10:21:26 +02:00
x86 x86/cpu: Elide KCSAN for cpu_has() and friends 2022-06-14 18:32:44 +02:00
xtensa xtensa/simdisk: fix proc_read_simdisk() 2022-06-09 10:21:27 +02:00
.gitignore
Kconfig arch/cc: Introduce a function to check for confidential computing features 2021-11-18 14:04:32 +01:00