Merge tag 'x86-fpu-2020-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 1 Jun 2020 21:09:26 +0000 (14:09 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 1 Jun 2020 21:09:26 +0000 (14:09 -0700)
Pull x86 FPU updates from Ingo Molnar:
 "Most of the changes here related to 'XSAVES supervisor state' support,
  which is a feature that allows kernel-only data to be automatically
  saved/restored by the FPU context switching code.

  CPU features that can be supported this way are Intel PT, 'PASID' and
  CET features"

* tag 'x86-fpu-2020-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/fpu/xstate: Restore supervisor states for signal return
  x86/fpu/xstate: Preserve supervisor states for the slow path in __fpu__restore_sig()
  x86/fpu: Introduce copy_supervisor_to_kernel()
  x86/fpu/xstate: Update copy_kernel_to_xregs_err() for supervisor states
  x86/fpu/xstate: Update sanitize_restored_xstate() for supervisor xstates
  x86/fpu/xstate: Define new functions for clearing fpregs and xstates
  x86/fpu/xstate: Introduce XSAVES supervisor states
  x86/fpu/xstate: Separate user and supervisor xfeatures mask
  x86/fpu/xstate: Define new macros for supervisor and user xstates
  x86/fpu/xstate: Rename validate_xstate_header() to validate_user_xstate_header()

1  2 
arch/x86/kernel/fpu/xstate.c
arch/x86/kernel/process.c

@@@ -1010,25 -1048,8 +1062,25 @@@ int copy_xstate_to_kernel(void *kbuf, s
         */
        memset(&header, 0, sizeof(header));
        header.xfeatures = xsave->header.xfeatures;
-       header.xfeatures &= ~XFEATURE_MASK_SUPERVISOR;
+       header.xfeatures &= xfeatures_mask_user();
  
 +      if (header.xfeatures & XFEATURE_MASK_FP)
 +              copy_part(0, off_mxcsr,
 +                        &xsave->i387, &kbuf, &offset_start, &count);
 +      if (header.xfeatures & (XFEATURE_MASK_SSE | XFEATURE_MASK_YMM))
 +              copy_part(off_mxcsr, MXCSR_AND_FLAGS_SIZE,
 +                        &xsave->i387.mxcsr, &kbuf, &offset_start, &count);
 +      if (header.xfeatures & XFEATURE_MASK_FP)
 +              copy_part(offsetof(struct fxregs_state, st_space), 128,
 +                        &xsave->i387.st_space, &kbuf, &offset_start, &count);
 +      if (header.xfeatures & XFEATURE_MASK_SSE)
 +              copy_part(xstate_offsets[XFEATURE_MASK_SSE], 256,
 +                        &xsave->i387.xmm_space, &kbuf, &offset_start, &count);
 +      /*
 +       * Fill xsave->i387.sw_reserved value for ptrace frame:
 +       */
 +      copy_part(offsetof(struct fxregs_state, sw_reserved), 48,
 +                xstate_fx_sw_bytes, &kbuf, &offset_start, &count);
        /*
         * Copy xregs_state->header:
         */
Simple merge