lkml.org 
[lkml]   [2023]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 04/26] x86/fpu/xstate: Introduce XFEATURE_MASK_KERNEL_DYNAMIC xfeature set
    Date
    Define new XFEATURE_MASK_KERNEL_DYNAMIC set including the features can be
    optionally enabled by kernel components, i.e., the features are required by
    specific kernel components. Currently it's used by KVM to configure guest
    dedicated fpstate for calculating the xfeature and fpstate storage size etc.

    The kernel dynamic xfeatures now only contain XFEATURE_CET_KERNEL, which is
    supported by host as they're enabled in xsaves/xrstors operating xfeature set
    (XCR0 | XSS), but the relevant CPU feature, i.e., supervisor shadow stack, is
    not enabled in host kernel so it can be omitted for normal fpstate by default.

    Remove the kernel dynamic feature from fpu_kernel_cfg.default_features so that
    the bits in xstate_bv and xcomp_bv are cleared and xsaves/xrstors can be
    optimized by HW for normal fpstate.

    Suggested-by: Dave Hansen <dave.hansen@intel.com>
    Signed-off-by: Yang Weijiang <weijiang.yang@intel.com>
    ---
    arch/x86/include/asm/fpu/xstate.h | 5 ++++-
    arch/x86/kernel/fpu/xstate.c | 1 +
    2 files changed, 5 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/include/asm/fpu/xstate.h b/arch/x86/include/asm/fpu/xstate.h
    index 3b4a038d3c57..a212d3851429 100644
    --- a/arch/x86/include/asm/fpu/xstate.h
    +++ b/arch/x86/include/asm/fpu/xstate.h
    @@ -46,9 +46,12 @@
    #define XFEATURE_MASK_USER_RESTORE \
    (XFEATURE_MASK_USER_SUPPORTED & ~XFEATURE_MASK_PKRU)

    -/* Features which are dynamically enabled for a process on request */
    +/* Features which are dynamically enabled per userspace request */
    #define XFEATURE_MASK_USER_DYNAMIC XFEATURE_MASK_XTILE_DATA

    +/* Features which are dynamically enabled per kernel side request */
    +#define XFEATURE_MASK_KERNEL_DYNAMIC XFEATURE_MASK_CET_KERNEL
    +
    /* All currently supported supervisor features */
    #define XFEATURE_MASK_SUPERVISOR_SUPPORTED (XFEATURE_MASK_PASID | \
    XFEATURE_MASK_CET_USER | \
    diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
    index b57d909facca..ba4172172afd 100644
    --- a/arch/x86/kernel/fpu/xstate.c
    +++ b/arch/x86/kernel/fpu/xstate.c
    @@ -824,6 +824,7 @@ void __init fpu__init_system_xstate(unsigned int legacy_size)
    /* Clean out dynamic features from default */
    fpu_kernel_cfg.default_features = fpu_kernel_cfg.max_features;
    fpu_kernel_cfg.default_features &= ~XFEATURE_MASK_USER_DYNAMIC;
    + fpu_kernel_cfg.default_features &= ~XFEATURE_MASK_KERNEL_DYNAMIC;

    fpu_user_cfg.default_features = fpu_user_cfg.max_features;
    fpu_user_cfg.default_features &= ~XFEATURE_MASK_USER_DYNAMIC;
    --
    2.27.0
    \
     
     \ /
      Last update: 2023-11-24 09:01    [W:3.469 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site