linux/arch/arm64/kernel
Ard Biesheuvel 005f78cd88 arm64: defer reloading a task's FPSIMD state to userland resume
If a task gets scheduled out and back in again and nothing has touched
its FPSIMD state in the mean time, there is really no reason to reload
it from memory. Similarly, repeated calls to kernel_neon_begin() and
kernel_neon_end() will preserve and restore the FPSIMD state every time.

This patch defers the FPSIMD state restore to the last possible moment,
i.e., right before the task returns to userland. If a task does not return to
userland at all (for any reason), the existing FPSIMD state is preserved
and may be reused by the owning task if it gets scheduled in again on the
same CPU.

This patch adds two more functions to abstract away from straight FPSIMD
register file saves and restores:
- fpsimd_restore_current_state -> ensure current's FPSIMD state is loaded
- fpsimd_flush_task_state -> invalidate live copies of a task's FPSIMD state

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2014-05-08 11:31:57 +02:00
..
vdso arm64: vdso: fix coarse clock handling 2014-02-05 11:55:30 +00:00
.gitignore arm64: Build infrastructure 2012-09-17 13:42:21 +01:00
arm64ksyms.c arm64: use generic strnlen_user and strncpy_from_user functions 2013-12-19 17:43:06 +00:00
asm-offsets.c arm64: kernel: cpu_{suspend/resume} implementation 2013-12-16 17:17:31 +00:00
cpu_ops.c arm64: Slightly improve the warning on CPU0 enable-method 2013-10-31 16:37:26 +00:00
cputable.c arm64: add CPU_HOTPLUG infrastructure 2013-10-25 11:33:21 +01:00
debug-monitors.c CPU hotplug notifiers registration fixes for 3.15-rc1 2014-04-07 14:55:46 -07:00
early_printk.c arm64: add early_ioremap support 2014-04-07 16:36:15 -07:00
entry-fpsimd.S arm64: move FP-SIMD save/restore code to a macro 2012-12-05 11:26:50 +00:00
entry.S arm64: defer reloading a task's FPSIMD state to userland resume 2014-05-08 11:31:57 +02:00
fpsimd.c arm64: defer reloading a task's FPSIMD state to userland resume 2014-05-08 11:31:57 +02:00
head.S - Documentation clarification on CPU topology and booting requirements 2014-04-08 12:06:03 -07:00
hw_breakpoint.c arm64, hw_breakpoint.c: Fix CPU hotplug callback registration 2014-03-20 13:43:44 +01:00
hyp-stub.S arm64: add hypervisor stub 2012-12-05 11:26:49 +00:00
insn.c arm64: introduce aarch64_insn_gen_{nop|branch_imm}() helper functions 2014-01-08 15:21:29 +00:00
io.c arm64: Device specific operations 2012-09-17 13:42:04 +01:00
irq.c arm64: add CPU_HOTPLUG infrastructure 2013-10-25 11:33:21 +01:00
jump_label.c arm64, jump label: optimize jump label implementation 2014-01-08 15:23:53 +00:00
kgdb.c arm64: KGDB: Add step debugging support 2014-02-26 11:16:25 +00:00
kuser32.S arm64: atomics: fix use of acquire + release for full barrier semantics 2014-02-07 16:45:43 +00:00
Makefile ARM64: perf: add support for perf registers API 2014-03-13 11:22:37 +00:00
module.c arm64: move encode_insn_immediate() from module.c to insn.c 2014-01-08 15:21:29 +00:00
perf_event.c arm64: fix !CONFIG_COMPAT build failures 2014-04-06 23:25:04 +01:00
perf_regs.c arm64: fix !CONFIG_COMPAT build failures 2014-04-06 23:25:04 +01:00
process.c arm64: add abstractions for FPSIMD state manipulation 2014-05-08 11:31:41 +02:00
psci.c arm64: remove return value form psci_init() 2014-02-28 14:14:53 +00:00
ptrace.c arm64: defer reloading a task's FPSIMD state to userland resume 2014-05-08 11:31:57 +02:00
setup.c arm64: add early_ioremap support 2014-04-07 16:36:15 -07:00
signal.c arm64: defer reloading a task's FPSIMD state to userland resume 2014-05-08 11:31:57 +02:00
signal32.c arm64: add abstractions for FPSIMD state manipulation 2014-05-08 11:31:41 +02:00
sleep.S arm64: kernel: cpu_{suspend/resume} implementation 2013-12-16 17:17:31 +00:00
smp_spin_table.c arm64: smp: make local symbol static 2014-03-13 11:22:41 +00:00
smp.c arm64: topology: Implement basic CPU topology support 2014-03-04 10:30:07 +00:00
stacktrace.c ARM64: unwind: Fix PC calculation 2014-02-17 09:16:33 +00:00
suspend.c arm64: kernel: fix per-cpu offset restore on resume 2014-01-24 14:27:40 +00:00
sys_compat.c compat: generic compat_sys_sched_rr_get_interval() implementation 2012-12-17 17:15:18 -08:00
sys.c arm64: switch to generic sigaltstack 2013-02-14 09:17:29 -05:00
sys32.S arm64: compat: correct register concatenation for syscall wrappers 2013-10-25 15:59:36 +01:00
time.c arch_timer: Move to generic sched_clock framework 2013-10-09 16:54:10 -07:00
topology.c arm64: topology: Implement basic CPU topology support 2014-03-04 10:30:07 +00:00
traps.c arm64: debug: consolidate software breakpoint handlers 2013-06-12 11:23:02 +01:00
vdso.c arm64: vdso: clean up vdso_pagelist initialization 2014-02-26 11:16:30 +00:00
vmlinux.lds.S arm64: Remove unused __data_loc variable 2013-12-20 12:04:48 +00:00