arm64: defer reloading a task's FPSIMD state to userland resume
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 8 May 2014 09:20:23 +0000 (11:20 +0200)
committerJP Abgrall <jpa@google.com>
Thu, 28 Aug 2014 17:22:27 +0000 (10:22 -0700)
commit74780f86ec6464edee0a87309da342f6237a6138
tree9db651e7e508569c3bf8f77ebe77029b014b79d8
parentf11a3d1bc1528e0a01dde578c2ab88c70b3fbeff
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>
Conflicts:
arch/arm64/kernel/fpsimd.c

Change-Id: Ib1c0d8d0afb3c248cd4d060eb35877530dd92fdc
arch/arm64/include/asm/fpsimd.h
arch/arm64/include/asm/thread_info.h
arch/arm64/kernel/entry.S
arch/arm64/kernel/fpsimd.c
arch/arm64/kernel/ptrace.c
arch/arm64/kernel/signal.c