linux/arch/s390/kernel
Heiko Carstens 8c09871a95 s390/fpu: limit save and restore to used registers
The first invocation of kernel_fpu_begin() after switching from user to
kernel context will save all vector registers, even if only parts of the
vector registers are used within the kernel fpu context. Given that save
and restore of all vector registers is quite expensive change the current
approach in several ways:

- Instead of saving and restoring all user registers limit this to those
  registers which are actually used within an kernel fpu context.

- On context switch save all remaining user fpu registers, so they can be
  restored when the task is rescheduled.

- Saving user registers within kernel_fpu_begin() is done without disabling
  and enabling interrupts - which also slightly reduces runtime. In worst
  case (e.g. interrupt context uses the same registers) this may lead to
  the situation that registers are saved several times, however the
  assumption is that this will not happen frequently, so that the new
  method is faster in nearly all cases.

- save_user_fpu_regs() can still be called from all contexts and saves all
  (or all remaining) user registers to a tasks ufpu user fpu save area.

Overall this reduces the time required to save and restore the user fpu
context for nearly all cases.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
2024-02-16 14:30:16 +01:00
..
syscalls lsm/stable-6.8 PR 20240105 2024-01-09 12:57:46 -08:00
vdso32 s390/vdso: remove unused ENTRY in linker scripts 2024-02-14 13:50:53 +01:00
vdso64 s390/vdso: remove unused ENTRY in linker scripts 2024-02-14 13:50:53 +01:00
.gitignore
abs_lowcore.c s390/mm: allocate Absolute Lowcore Area in decompressor 2023-01-13 14:15:06 +01:00
alternative.c s390/alternatives: remove padding generation code 2022-05-17 15:16:28 +02:00
asm-offsets.c s390/tracing: pass struct ftrace_regs to ftrace_trace_function 2023-07-24 12:12:24 +02:00
audit.c audit: add support for the openat2 syscall 2021-10-01 16:52:48 -04:00
audit.h
cache.c s390/cache: change type from unsigned long long to unsigned long 2023-01-25 20:51:09 +01:00
cert_store.c s390/cert_store: fix string length handling 2023-09-19 13:25:44 +02:00
compat_audit.c audit: add support for the openat2 syscall 2021-10-01 16:52:48 -04:00
compat_linux.c
compat_linux.h s390/compat: cleanup compat_linux.h header file 2022-05-06 20:45:16 +02:00
compat_ptrace.h
compat_signal.c s390/fpu: rename save_fpu_regs() to save_user_fpu_regs(), etc 2024-02-16 14:30:15 +01:00
cpcmd.c s390: include linux/io.h instead of asm/io.h 2023-07-03 11:19:40 +02:00
cpufeature.c s390/uvdevice: autoload module based on CPU facility 2022-07-19 16:18:49 +02:00
crash_dump.c s390/fpu: move, rename, and merge header files 2024-02-16 14:30:14 +01:00
ctlreg.c s390/ctlreg: add system_ctl_load() 2023-09-19 13:26:57 +02:00
debug.c S390: Remove now superfluous sentinel elem from ctl_table arrays 2023-10-10 15:22:02 -07:00
diag.c s390/diag: add missing virt_to_phys() translation to diag14() 2024-02-09 13:58:14 +01:00
dis.c s390: fix various typos 2023-07-03 11:19:42 +02:00
dumpstack.c s390/dumpstack: simplify in stack logic code 2023-04-04 18:34:55 +02:00
early_printk.c s390/sclp: remove unused sclp_early_printk_forced 2020-09-21 08:08:44 +02:00
early.c s390/fpu: move, rename, and merge header files 2024-02-16 14:30:14 +01:00
earlypgm.S s390/earlypgm: use SYM* macros instead of ENTRY(), etc. 2023-04-19 17:24:17 +02:00
ebcdic.c s390/ebcdic: fix typo in comment 2023-07-27 13:11:35 +02:00
entry.h s390/switch_to: use generic header file 2024-02-12 15:03:33 +01:00
entry.S s390/kvm: convert to regular kernel fpu user 2024-02-16 14:30:16 +01:00
facility.c KVM: s390: vsie: Fix length of facility list shadowed 2023-12-23 10:41:09 +01:00
fpu.c s390/fpu: limit save and restore to used registers 2024-02-16 14:30:16 +01:00
ftrace.c s390/ftrace: do not assume module_alloc() returns executable memory 2023-04-13 17:36:26 +02:00
ftrace.h s390: raise minimum supported machine generation to z10 2022-03-10 15:58:17 +01:00
guarded_storage.c s390: use control register bit defines 2023-09-19 13:26:57 +02:00
head64.S s390: consistently use .balign instead of .align 2023-06-28 13:57:09 +02:00
idle.c sched/idle: Mark arch_cpu_idle_dead() __noreturn 2023-03-08 08:44:28 -08:00
ima_arch.c
ipl_vmparm.c s390/cio: remove unused include linux/spinlock.h from cio.h 2021-07-27 09:39:13 +02:00
ipl.c s390/ipl: add missing IPL_TYPE_ECKD_DUMP case to ipl_init() 2023-11-22 13:54:57 +01:00
irq.c s390/ctlreg: add local and system prefix to some functions 2023-09-19 13:26:56 +02:00
jump_label.c jump_label: make initial NOP patching the special case 2022-06-24 09:48:55 +02:00
kdebugfs.c
kexec_elf.c
kexec_image.c
kprobes_insn_page.S s390: consistently use .balign instead of .align 2023-06-28 13:57:09 +02:00
kprobes.c s390/ctlreg: add struct ctlreg 2023-09-19 13:26:56 +02:00
kprobes.h s390/kprobes: define insn cache ops within private header file 2022-11-23 16:24:07 +01:00
lgr.c s390/lgr: use simple assignment instead of memcpy 2022-02-06 23:31:29 +01:00
machine_kexec_file.c s390/ipl: fix virtual vs physical address confusion 2023-08-18 15:08:12 +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 s390/fpu: move, rename, and merge header files 2024-02-16 14:30:14 +01:00
Makefile KVM: s390: vsie: Fix length of facility list shadowed 2023-12-23 10:41:09 +01:00
mcount.S s390: remove unneeded #include <asm/export.h> 2023-08-09 15:20:50 +02:00
module.c s390/module: fix rela calculation for R_390_GOTENT 2023-06-20 19:55:00 +02:00
nmi.c s390/fpu: move, rename, and merge header files 2024-02-16 14:30:14 +01:00
nospec-branch.c s390: fix various typos 2023-07-03 11:19:42 +02:00
nospec-sysfs.c s390: introduce nospec_uses_trampoline() 2021-10-26 15:21:29 +02:00
numa.c drivers/base/node: consolidate node device subsystem initialization in node_dev_init() 2022-03-22 15:57:10 -07:00
os_info.c s390/mm: allocate Absolute Lowcore Area in decompressor 2023-01-13 14:15:06 +01:00
perf_cpum_cf_events.c s390/cpumf: add new extended counter set for IBM z16 2022-05-16 10:58:33 +02:00
perf_cpum_cf.c s390: use control register bit defines 2023-09-19 13:26:57 +02:00
perf_cpum_sf.c s390/cpum_sf: remove check on CPU being online 2023-07-04 07:45:18 +02:00
perf_event.c s390/perf: implement perf_callchain_user() 2023-11-05 22:34:57 +01:00
perf_pai_crypto.c s390/pai_crypto: return proper error code in paicrypt_init 2024-02-09 13:58:14 +01:00
perf_pai_ext.c s390/pai: export number of sysfs attribute files 2024-02-09 13:58:14 +01:00
perf_regs.c s390/fpu: remove anonymous union from struct fpu 2024-02-16 14:30:16 +01:00
process.c s390/fpu: remove regs member from struct fpu 2024-02-16 14:30:16 +01:00
processor.c s390/fpu: get rid of MACHINE_HAS_VX 2023-12-11 14:33:07 +01:00
ptrace.c s390/fpu: remove anonymous union from struct fpu 2024-02-16 14:30:16 +01:00
reipl.S s390/reipl: use SYM* macros instead of ENTRY(), etc. 2023-04-19 17:24:17 +02:00
relocate_kernel.S s390/relocate_kernel: adjust indentation 2023-04-19 17:24:18 +02:00
rethook.c s390/rethook: add local rethook header file 2023-02-06 11:13:53 +01:00
rethook.h s390/rethook: add local rethook header file 2023-02-06 11:13:53 +01:00
runtime_instr.c s390/runtime_instrumentation: fix storage key handling 2020-08-17 13:17:10 +02:00
setup.c s390/setup: fix virtual vs physical address confusion 2024-02-16 14:30:12 +01:00
signal.c s390/fpu: rename save_fpu_regs() to save_user_fpu_regs(), etc 2024-02-16 14:30:15 +01:00
smp.c s390/fpu: move, rename, and merge header files 2024-02-16 14:30:14 +01:00
stacktrace.c s390: add USER_STACKTRACE support 2023-11-05 22:34:57 +01:00
sthyi.c s390 updates for 6.6 merge window 2023-08-28 17:22:39 -07:00
syscall.c s390: add support for BEAR enhancement facility 2021-10-26 15:21:29 +02:00
sysinfo.c s390/fpu: decrease stack usage for some cases 2024-02-16 14:30:16 +01:00
text_amode31.S s390/hypfs_diag0c: fix virtual vs physical address confusion 2024-02-09 13:58:13 +01:00
time.c s390/time: make stp_subsys const 2024-02-09 13:58:15 +01:00
topology.c sysctl-6.7-rc1 2023-11-01 20:51:41 -10:00
trace.c s390/ftrace: fix potential crashes when switching tracers 2020-04-22 16:20:55 +02:00
traps.c s390/fpu: rename save_fpu_regs() to save_user_fpu_regs(), etc 2024-02-16 14:30:15 +01:00
unwind_bc.c s390/unwind: avoid duplicated unwinding entries for kretprobes 2022-03-27 22:18:39 +02:00
uprobes.c s390/switch_to: use generic header file 2024-02-12 15:03:33 +01:00
uv.c s390/uv: UV feature check utility 2023-08-28 09:27:55 +00:00
vdso.c mm: remove zap_page_range and create zap_vma_pages 2023-01-18 17:12:55 -08:00
vmlinux.lds.S s390: vmlinux.lds.S: explicitly keep various sections 2024-02-14 13:50:52 +01:00
vtime.c cputime: remove cputime_to_nsecs fallback 2022-12-27 12:52:17 +01:00