Merge 5.17-rc6 into char-misc-next
[linux-2.6-microblaze.git] / arch / x86 / kernel / fpu / regset.c
index 437d7c9..75ffaef 100644 (file)
@@ -91,11 +91,9 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
                const void *kbuf, const void __user *ubuf)
 {
        struct fpu *fpu = &target->thread.fpu;
-       struct user32_fxsr_struct newstate;
+       struct fxregs_state newstate;
        int ret;
 
-       BUILD_BUG_ON(sizeof(newstate) != sizeof(struct fxregs_state));
-
        if (!cpu_feature_enabled(X86_FEATURE_FXSR))
                return -ENODEV;
 
@@ -116,9 +114,10 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
        /* Copy the state  */
        memcpy(&fpu->fpstate->regs.fxsave, &newstate, sizeof(newstate));
 
-       /* Clear xmm8..15 */
+       /* Clear xmm8..15 for 32-bit callers */
        BUILD_BUG_ON(sizeof(fpu->__fpstate.regs.fxsave.xmm_space) != 16 * 16);
-       memset(&fpu->fpstate->regs.fxsave.xmm_space[8], 0, 8 * 16);
+       if (in_ia32_syscall())
+               memset(&fpu->fpstate->regs.fxsave.xmm_space[8*4], 0, 8 * 16);
 
        /* Mark FP and SSE as in use when XSAVE is enabled */
        if (use_xsave())