1. 28 Oct, 2021 1 commit
    • Chang S. Bae's avatar
      selftests/x86/amx: Add test cases for AMX state management · 6a3e0651
      Chang S. Bae authored
      AMX TILEDATA is a very large XSAVE feature.  It could have caused
      nasty XSAVE buffer space waste in two places:
      
       * Signal stacks
       * Kernel task_struct->fpu buffers
      
      To avoid this waste, neither of these buffers have AMX state by
      default.  The non-default features are called "dynamic" features.
      
      There is an arch_prctl(ARCH_REQ_XCOMP_PERM) which allows a task
      to declare that it wants to use AMX or other "dynamic" XSAVE
      features.  This arch_prctl() ensures that sufficient sigaltstack
      space is available before it will succeed.  It also expands the
      task_struct buffer.
      
      Functions of this test:
       * Test arch_prctl(ARCH_REQ_XCOMP_PERM).  Ensure that it checks for
         proper sigaltstack sizing and that the sizing is enforced for
         future sigaltstack calls.
       * Ensure that ARCH_REQ_XCOMP_PERM is inherited across fork()
       * Ensure that TILEDATA use before the prctl() is fatal
       * Ensure that TILEDATA is cleared across fork()
      
      Note: Generally, compiler support is needed to do something with
      AMX.  Instead, directly load AMX state from userspace with a
      plain XSAVE.  Do not depend on the compiler.
      
       [ dhansen: bunches of cleanups ]
      Signed-off-by: default avatarChang S. Bae <chang.seok.bae@intel.com>
      Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Link: https://lkml.kernel.org/r/20211026122524.7BEDAA95@davehans-spike.ostc.intel.com
      6a3e0651
  2. 26 Oct, 2021 23 commits
  3. 23 Oct, 2021 4 commits
    • Thomas Gleixner's avatar
    • Thomas Gleixner's avatar
      x86/kvm: Convert FPU handling to a single swap buffer · d69c1382
      Thomas Gleixner authored
      For the upcoming AMX support it's necessary to do a proper integration with
      KVM. Currently KVM allocates two FPU structs which are used for saving the user
      state of the vCPU thread and restoring the guest state when entering
      vcpu_run() and doing the reverse operation before leaving vcpu_run().
      
      With the new fpstate mechanism this can be reduced to one extra buffer by
      swapping the fpstate pointer in current::thread::fpu. This makes the
      upcoming support for AMX and XFD simpler because then fpstate information
      (features, sizes, xfd) are always consistent and it does not require any
      nasty workarounds.
      
      Convert the KVM FPU code over to this new scheme.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Link: https://lkml.kernel.org/r/20211022185313.019454292@linutronix.de
      d69c1382
    • Thomas Gleixner's avatar
      x86/fpu: Provide infrastructure for KVM FPU cleanup · 69f6ed1d
      Thomas Gleixner authored
      For the upcoming AMX support it's necessary to do a proper integration with
      KVM. Currently KVM allocates two FPU structs which are used for saving the user
      state of the vCPU thread and restoring the guest state when entering
      vcpu_run() and doing the reverse operation before leaving vcpu_run().
      
      With the new fpstate mechanism this can be reduced to one extra buffer by
      swapping the fpstate pointer in current::thread::fpu. This makes the
      upcoming support for AMX and XFD simpler because then fpstate information
      (features, sizes, xfd) are always consistent and it does not require any
      nasty workarounds.
      
      Provide:
      
        - An allocator which initializes the state properly
      
        - A replacement for the existing FPU swap mechanim
      
      Aside of the reduced memory footprint, this also makes state switching
      more efficient when TIF_FPU_NEED_LOAD is set. It does not require a
      memcpy as the state is already correct in the to be swapped out fpstate.
      
      The existing interfaces will be removed once KVM is converted over.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Link: https://lkml.kernel.org/r/20211022185312.954684740@linutronix.de
      69f6ed1d
    • Thomas Gleixner's avatar
      x86/fpu: Prepare for sanitizing KVM FPU code · 75c52dad
      Thomas Gleixner authored
      For the upcoming AMX support it's necessary to do a proper integration with
      KVM. To avoid more nasty hackery in KVM which violate encapsulation extend
      struct fpu and fpstate so the fpstate switching can be consolidated and
      simplified.
      
      Currently KVM allocates two FPU structs which are used for saving the user
      state of the vCPU thread and restoring the guest state when entering
      vcpu_run() and doing the reverse operation before leaving vcpu_run().
      
      With the new fpstate mechanism this can be reduced to one extra buffer by
      swapping the fpstate pointer in current::thread::fpu. This makes the
      upcoming support for AMX and XFD simpler because then fpstate information
      (features, sizes, xfd) are always consistent and it does not require any
      nasty workarounds.
      
      Add fpu::__task_fpstate to save the regular fpstate pointer while the task
      is inside vcpu_run(). Add some state fields to fpstate to indicate the
      nature of the state.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Link: https://lkml.kernel.org/r/20211022185312.896403942@linutronix.de
      75c52dad
  4. 22 Oct, 2021 3 commits
  5. 21 Oct, 2021 9 commits