You need to sign in or sign up before continuing.
  • Chang S. Bae's avatar
    x86/fpu: Exclude dynamic states from init_fpstate · a401f45e
    Chang S. Bae authored
    == Background ==
    
    The XSTATE init code initializes all enabled and supported components.
    Then, the init states are saved in the init_fpstate buffer that is
    statically allocated in about one page.
    
    The AMX TILE_DATA state is large (8KB) but its init state is zero. And the
    feature comes only with the compacted format with these established
    dependencies: AMX->XFD->XSAVES. So this state is excludable from
    init_fpstate.
    
    == Problem ==
    
    But the buffer is formatted to include that large state. Then, this can be
    the cause of a noisy splat like the below.
    
    This came from XRSTORS for the task with init_fpstate in its XSAVE buffer.
    It is reproducible on AMX systems when the running kernel is built with
    CONFIG_DEBUG_PAGEALLOC=y and CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y:
    
     Bad FPU state detected at restore_fpregs_from_fpstate+0x57/0xd0, reinitializing FPU registers.
     ...
     RIP: 0010:restore_fpregs_from_fpstate+0x57/0xd0
      ? restore_fpregs_from_fpstate+0x45/0xd0
      switch_fpu_return+0x4e/0xe0
      exit_to_user_mode_prepare+0x17b/0x1b0
      syscall_exit_to_user_mode+0x29/0x40
      do_syscall_64+0x67/0x80
      ? do_syscall_64+0x67/0x80
      ? exc_page_fault+0x86/0x180
      entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    == Solution ==
    
    Adjust init_fpstate to exclude dynamic states. XRSTORS from init_fpstate
    still initializes those states when their bits are set in the
    requested-feature bitmap.
    
    Fixes: 2308ee57
    
     ("x86/fpu/amx: Enable the AMX feature in 64-bit mode")
    Reported-by: default avatarLin X Wang <lin.x.wang@intel.com>
    Signed-off-by: default avatarChang S. Bae <chang.seok.bae@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Tested-by: default avatarLin X Wang <lin.x.wang@intel.com>
    Link: https://lore.kernel.org/r/20220824191223.1248-4-chang.seok.bae@intel.com
    a401f45e
xstate.c 48.7 KB