lkml.org 
[lkml]   [2022]   [Jun]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 07/15] x86/speculation: Add a common function for MD_CLEAR mitigation update
    Date
    From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>

    commit f52ea6c26953fed339aa4eae717ee5c2133c7ff2 upstream

    Processor MMIO Stale Data mitigation uses similar mitigation as MDS and
    TAA. In preparation for adding its mitigation, add a common function to
    update all mitigations that depend on MD_CLEAR.

    [ bp: Add a newline in md_clear_update_mitigation() to separate
    statements better. ]

    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/x86/kernel/cpu/bugs.c | 59 +++++++++++++++++++++++++--------------------
    1 file changed, 33 insertions(+), 26 deletions(-)

    --- a/arch/x86/kernel/cpu/bugs.c
    +++ b/arch/x86/kernel/cpu/bugs.c
    @@ -40,7 +40,7 @@ static void __init spectre_v2_select_mit
    static void __init ssb_select_mitigation(void);
    static void __init l1tf_select_mitigation(void);
    static void __init mds_select_mitigation(void);
    -static void __init mds_print_mitigation(void);
    +static void __init md_clear_update_mitigation(void);
    static void __init taa_select_mitigation(void);
    static void __init srbds_select_mitigation(void);

    @@ -113,10 +113,10 @@ void __init check_bugs(void)
    srbds_select_mitigation();

    /*
    - * As MDS and TAA mitigations are inter-related, print MDS
    - * mitigation until after TAA mitigation selection is done.
    + * As MDS and TAA mitigations are inter-related, update and print their
    + * mitigation after TAA mitigation selection is done.
    */
    - mds_print_mitigation();
    + md_clear_update_mitigation();

    arch_smt_update();

    @@ -257,14 +257,6 @@ static void __init mds_select_mitigation
    }
    }

    -static void __init mds_print_mitigation(void)
    -{
    - if (!boot_cpu_has_bug(X86_BUG_MDS) || cpu_mitigations_off())
    - return;
    -
    - pr_info("%s\n", mds_strings[mds_mitigation]);
    -}
    -
    static int __init mds_cmdline(char *str)
    {
    if (!boot_cpu_has_bug(X86_BUG_MDS))
    @@ -312,7 +304,7 @@ static void __init taa_select_mitigation
    /* TSX previously disabled by tsx=off */
    if (!boot_cpu_has(X86_FEATURE_RTM)) {
    taa_mitigation = TAA_MITIGATION_TSX_DISABLED;
    - goto out;
    + return;
    }

    if (cpu_mitigations_off()) {
    @@ -326,7 +318,7 @@ static void __init taa_select_mitigation
    */
    if (taa_mitigation == TAA_MITIGATION_OFF &&
    mds_mitigation == MDS_MITIGATION_OFF)
    - goto out;
    + return;

    if (boot_cpu_has(X86_FEATURE_MD_CLEAR))
    taa_mitigation = TAA_MITIGATION_VERW;
    @@ -358,18 +350,6 @@ static void __init taa_select_mitigation

    if (taa_nosmt || cpu_mitigations_auto_nosmt())
    cpu_smt_disable(false);
    -
    - /*
    - * Update MDS mitigation, if necessary, as the mds_user_clear is
    - * now enabled for TAA mitigation.
    - */
    - if (mds_mitigation == MDS_MITIGATION_OFF &&
    - boot_cpu_has_bug(X86_BUG_MDS)) {
    - mds_mitigation = MDS_MITIGATION_FULL;
    - mds_select_mitigation();
    - }
    -out:
    - pr_info("%s\n", taa_strings[taa_mitigation]);
    }

    static int __init tsx_async_abort_parse_cmdline(char *str)
    @@ -394,6 +374,33 @@ static int __init tsx_async_abort_parse_
    early_param("tsx_async_abort", tsx_async_abort_parse_cmdline);

    #undef pr_fmt
    +#define pr_fmt(fmt) "" fmt
    +
    +static void __init md_clear_update_mitigation(void)
    +{
    + if (cpu_mitigations_off())
    + return;
    +
    + if (!static_key_enabled(&mds_user_clear))
    + goto out;
    +
    + /*
    + * mds_user_clear is now enabled. Update MDS mitigation, if
    + * necessary.
    + */
    + if (mds_mitigation == MDS_MITIGATION_OFF &&
    + boot_cpu_has_bug(X86_BUG_MDS)) {
    + mds_mitigation = MDS_MITIGATION_FULL;
    + mds_select_mitigation();
    + }
    +out:
    + if (boot_cpu_has_bug(X86_BUG_MDS))
    + pr_info("MDS: %s\n", mds_strings[mds_mitigation]);
    + if (boot_cpu_has_bug(X86_BUG_TAA))
    + pr_info("TAA: %s\n", taa_strings[taa_mitigation]);
    +}
    +
    +#undef pr_fmt
    #define pr_fmt(fmt) "SRBDS: " fmt

    enum srbds_mitigations {

    \
     
     \ /
      Last update: 2022-06-14 20:49    [W:2.476 / U:1.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site