lkml.org 
[lkml]   [2021]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 04/26] x86/fpu/xstate: Add a new variable to indicate dynamic user states
    Date
    The XSTATE per-task buffer is in preparation to be dynamic for user states.
    Introduce a new mask variable to indicate the 'dynamic' user states. The
    value is determined at boot-time.

    No functional change.

    Signed-off-by: Chang S. Bae <chang.seok.bae@intel.com>
    Reviewed-by: Len Brown <len.brown@intel.com>
    Cc: x86@kernel.org
    Cc: linux-kernel@vger.kernel.org
    ---
    Changes from v5:
    * Made the variable __ro_after_init.
    * Dropped the perf's xstate buffer renaming, as renamed already.

    Changes from v3:
    * Updated the changelog. (Borislav Petkov)
    * Updated the code comment. (Borislav Petkov)

    Changes from v2:
    * Updated the changelog for clarification.
    ---
    arch/x86/include/asm/fpu/xstate.h | 2 ++
    arch/x86/kernel/fpu/xstate.c | 9 +++++++++
    2 files changed, 11 insertions(+)

    diff --git a/arch/x86/include/asm/fpu/xstate.h b/arch/x86/include/asm/fpu/xstate.h
    index 2451bccc6cac..bc4cba62906b 100644
    --- a/arch/x86/include/asm/fpu/xstate.h
    +++ b/arch/x86/include/asm/fpu/xstate.h
    @@ -129,6 +129,8 @@ static inline u64 xfeatures_mask_independent(void)
    return XFEATURE_MASK_INDEPENDENT;
    }

    +extern u64 xfeatures_mask_user_dynamic;
    +
    extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];

    extern void __init update_regset_xstate_info(unsigned int size,
    diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
    index af2adc954578..1d76afc29f19 100644
    --- a/arch/x86/kernel/fpu/xstate.c
    +++ b/arch/x86/kernel/fpu/xstate.c
    @@ -62,6 +62,12 @@ static short xsave_cpuid_features[] __initdata = {
    u64 xfeatures_mask_all __ro_after_init;
    EXPORT_SYMBOL_GPL(xfeatures_mask_all);

    +/*
    + * This represents user xstates, a subset of xfeatures_mask_all, saved in a
    + * dynamic kernel XSAVE buffer.
    + */
    +u64 xfeatures_mask_user_dynamic __ro_after_init;
    +
    static unsigned int xstate_offsets[XFEATURE_MAX] __ro_after_init =
    { [ 0 ... XFEATURE_MAX - 1] = -1};
    static unsigned int xstate_sizes[XFEATURE_MAX] __ro_after_init =
    @@ -709,6 +715,7 @@ static int __init init_xstate_size(void)
    static void fpu__init_disable_system_xstate(void)
    {
    xfeatures_mask_all = 0;
    + xfeatures_mask_user_dynamic = 0;
    cr4_clear_bits(X86_CR4_OSXSAVE);
    setup_clear_cpu_cap(X86_FEATURE_XSAVE);
    }
    @@ -780,6 +787,8 @@ void __init fpu__init_system_xstate(void)

    /* Store it for paranoia check at the end */
    xfeatures = xfeatures_mask_all;
    + /* Do not support the dynamically allocated buffer yet. */
    + xfeatures_mask_user_dynamic = 0;

    /* Enable xstate instructions to be able to continue with initialization: */
    fpu__init_cpu_xstate();
    --
    2.17.1
    \
     
     \ /
      Last update: 2021-06-30 08:09    [W:3.455 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site