From 2f529f9b558ca1c1bd74be7437a84e4711743404 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 01 Nov 2024 02:11:33 +0000 Subject: [PATCH] add xenomai --- kernel/arch/x86/kernel/fpu/signal.c | 29 ++++++++++++++++------------- 1 files changed, 16 insertions(+), 13 deletions(-) diff --git a/kernel/arch/x86/kernel/fpu/signal.c b/kernel/arch/x86/kernel/fpu/signal.c index b7b92cd..20d04a3 100644 --- a/kernel/arch/x86/kernel/fpu/signal.c +++ b/kernel/arch/x86/kernel/fpu/signal.c @@ -61,11 +61,12 @@ struct xregs_state *xsave = &tsk->thread.fpu.state.xsave; struct user_i387_ia32_struct env; struct _fpstate_32 __user *fp = buf; + unsigned long flags; - fpregs_lock(); + flags = fpregs_lock(); if (!test_thread_flag(TIF_NEED_FPU_LOAD)) copy_fxregs_to_kernel(&tsk->thread.fpu); - fpregs_unlock(); + fpregs_unlock(flags); convert_from_fxsr(&env, tsk); @@ -165,6 +166,7 @@ { struct task_struct *tsk = current; int ia32_fxstate = (buf != buf_fx); + unsigned long flags; int ret; ia32_fxstate &= (IS_ENABLED(CONFIG_X86_32) || @@ -186,14 +188,14 @@ * userland's stack frame which will likely succeed. If it does not, * resolve the fault in the user memory and try again. */ - fpregs_lock(); + flags = fpregs_lock(); if (test_thread_flag(TIF_NEED_FPU_LOAD)) __fpregs_load_activate(); pagefault_disable(); ret = copy_fpregs_to_sigframe(buf_fx); pagefault_enable(); - fpregs_unlock(); + fpregs_unlock(flags); if (ret) { if (!fault_in_pages_writeable(buf_fx, fpu_user_xstate_size)) @@ -286,6 +288,7 @@ struct fpu *fpu = &tsk->thread.fpu; struct user_i387_ia32_struct env; u64 user_xfeatures = 0; + unsigned long flags; int fx_only = 0; int ret = 0; @@ -337,7 +340,7 @@ * going through the kernel buffer with the enabled pagefault * handler. */ - fpregs_lock(); + flags = fpregs_lock(); pagefault_disable(); ret = copy_user_to_fpregs_zeroing(buf_fx, user_xfeatures, fx_only); pagefault_enable(); @@ -360,7 +363,7 @@ copy_kernel_to_xregs(&fpu->state.xsave, xfeatures_mask_supervisor()); fpregs_mark_activate(); - fpregs_unlock(); + fpregs_unlock(flags); return 0; } @@ -382,7 +385,7 @@ if (test_thread_flag(TIF_NEED_FPU_LOAD)) __cpu_invalidate_fpregs_state(); - fpregs_unlock(); + fpregs_unlock(flags); } else { /* * For 32-bit frames with fxstate, copy the fxstate so it can @@ -400,7 +403,7 @@ * to be loaded again on return to userland (overriding last_cpu avoids * the optimisation). */ - fpregs_lock(); + flags = fpregs_lock(); if (!test_thread_flag(TIF_NEED_FPU_LOAD)) { @@ -413,7 +416,7 @@ set_thread_flag(TIF_NEED_FPU_LOAD); } __fpu_invalidate_fpregs_state(fpu); - fpregs_unlock(); + fpregs_unlock(flags); if (use_xsave() && !fx_only) { u64 init_bv = xfeatures_mask_user() & ~user_xfeatures; @@ -425,7 +428,7 @@ sanitize_restored_user_xstate(&fpu->state, envp, user_xfeatures, fx_only); - fpregs_lock(); + flags = fpregs_lock(); if (unlikely(init_bv)) copy_kernel_to_xregs(&init_fpstate.xsave, init_bv); @@ -446,7 +449,7 @@ sanitize_restored_user_xstate(&fpu->state, envp, user_xfeatures, fx_only); - fpregs_lock(); + flags = fpregs_lock(); if (use_xsave()) { u64 init_bv; @@ -460,14 +463,14 @@ if (ret) goto out; - fpregs_lock(); + flags = fpregs_lock(); ret = copy_kernel_to_fregs_err(&fpu->state.fsave); } if (!ret) fpregs_mark_activate(); else fpregs_deactivate(fpu); - fpregs_unlock(); + fpregs_unlock(flags); out: if (ret) -- Gitblit v1.6.2