summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0025-x86-fpu-Add-a-fastpath-to-copy_fpstate_to_sigframe.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0025-x86-fpu-Add-a-fastpath-to-copy_fpstate_to_sigframe.patch')
-rw-r--r--debian/patches-rt/0025-x86-fpu-Add-a-fastpath-to-copy_fpstate_to_sigframe.patch79
1 files changed, 0 insertions, 79 deletions
diff --git a/debian/patches-rt/0025-x86-fpu-Add-a-fastpath-to-copy_fpstate_to_sigframe.patch b/debian/patches-rt/0025-x86-fpu-Add-a-fastpath-to-copy_fpstate_to_sigframe.patch
deleted file mode 100644
index 3d4f1df09..000000000
--- a/debian/patches-rt/0025-x86-fpu-Add-a-fastpath-to-copy_fpstate_to_sigframe.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Wed, 3 Apr 2019 15:59:12 +0200
-Subject: [PATCH 25/27] x86/fpu: Add a fastpath to copy_fpstate_to_sigframe()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.0/older/patches-5.0.10-rt7.tar.xz
-
-If the CPU holds the FPU register for the current task then we can try to save
-them directly to the userland stack frame. This has to be done with the
-pagefault disabled because we can't fault (while the FPU registers are locked)
-and therefore the operation might fail.
-If it fails try the slowpath which can handle faults.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- arch/x86/kernel/fpu/signal.c | 34 ++++++++++++++++++++++------------
- 1 file changed, 22 insertions(+), 12 deletions(-)
-
---- a/arch/x86/kernel/fpu/signal.c
-+++ b/arch/x86/kernel/fpu/signal.c
-@@ -144,8 +144,10 @@ static inline int copy_fpregs_to_sigfram
- * buf == buf_fx for 64-bit frames and 32-bit fsave frame.
- * buf != buf_fx for 32-bit frames with fxstate.
- *
-- * Save the state to task's fpu->state and then copy it to the user frame
-- * pointed by the aligned pointer 'buf_fx'.
-+ * Try to save it directly to the user frame with disabled page fault handler.
-+ * If this fails then do the slow path where the FPU state is first saved to
-+ * task's fpu->state and then copy it to the user frame pointed by the aligned
-+ * pointer 'buf_fx'.
- *
- * If this is a 32-bit frame with fxstate, put a fsave header before
- * the aligned state at 'buf_fx'.
-@@ -159,6 +161,7 @@ int copy_fpstate_to_sigframe(void __user
- struct xregs_state *xsave = &fpu->state.xsave;
- struct task_struct *tsk = current;
- int ia32_fxstate = (buf != buf_fx);
-+ int ret = -EFAULT;
-
- ia32_fxstate &= (IS_ENABLED(CONFIG_X86_32) ||
- IS_ENABLED(CONFIG_IA32_EMULATION));
-@@ -174,22 +177,29 @@ int copy_fpstate_to_sigframe(void __user
- fpregs_lock();
- /*
- * If we do not need to load the FPU registers at return to userspace
-- * then the CPU has the current state and we need to save it. Otherwise
-- * it is already done and we can skip it.
-+ * then the CPU has the current state. Try to save it directly to
-+ * userland's stack frame if it does not cause a pagefault. If it does,
-+ * try the slowpath.
- */
- if (!test_thread_flag(TIF_NEED_FPU_LOAD)) {
-- copy_fpregs_to_fpstate(fpu);
-+ pagefault_disable();
-+ ret = copy_fpregs_to_sigframe(buf_fx);
-+ pagefault_enable();
-+ if (ret)
-+ copy_fpregs_to_fpstate(fpu);
- set_thread_flag(TIF_NEED_FPU_LOAD);
- }
- fpregs_unlock();
-
-- if (using_compacted_format()) {
-- if (copy_xstate_to_user(buf_fx, xsave, 0, size))
-- return -1;
-- } else {
-- fpstate_sanitize_xstate(fpu);
-- if (__copy_to_user(buf_fx, xsave, fpu_user_xstate_size))
-- return -1;
-+ if (ret) {
-+ if (using_compacted_format()) {
-+ if (copy_xstate_to_user(buf_fx, xsave, 0, size))
-+ return -1;
-+ } else {
-+ fpstate_sanitize_xstate(fpu);
-+ if (__copy_to_user(buf_fx, xsave, fpu_user_xstate_size))
-+ return -1;
-+ }
- }
-
- /* Save the fsave header for the 32-bit frames. */