On Wed, 17 Oct 2018, Tim Chen wrote:

> Reorganize the spculation control MSR update code. Currently it is limited
> to only dynamic update of the Speculative Store Bypass Disable bit.
> This patch consolidates the logic to check for AMD CPUs that may or may

# git grep 'This patch' Documentation/process/

> not use this MSR to control SSBD. This prepares us to add logic to update
> other bits in the SPEC_CTRL MSR cleanly.
> 
> Originally-by: Thomas Lendacky <thomas.lenda...@amd.com>
> Signed-off-by: Tim Chen <tim.c.c...@linux.intel.com>
> ---
>  arch/x86/kernel/process.c | 39 +++++++++++++++++++++++++++++----------
>  1 file changed, 29 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
> index 8aa4960..789f1bada 100644
> --- a/arch/x86/kernel/process.c
> +++ b/arch/x86/kernel/process.c
> @@ -397,25 +397,45 @@ static __always_inline void 
> amd_set_ssb_virt_state(unsigned long tifn)
>  
>  static __always_inline void spec_ctrl_update_msr(unsigned long tifn)
>  {
> -     u64 msr = x86_spec_ctrl_base | ssbd_tif_to_spec_ctrl(tifn);
> +     u64 msr = x86_spec_ctrl_base;
> +
> +     /*
> +      * If X86_FEATURE_SSBD is not set, the SSBD
> +      * bit is not to be touched.
> +      */
> +     if (static_cpu_has(X86_FEATURE_SSBD))
> +             msr |= ssbd_tif_to_spec_ctrl(tifn);
>  
>       wrmsrl(MSR_IA32_SPEC_CTRL, msr);
>  }
>  
> -static __always_inline void __speculation_ctrl_update(unsigned long tifn)
> +static __always_inline void __speculation_ctrl_update(unsigned long tifp,
> +                                                   unsigned long tifn)
>  {
> -     if (static_cpu_has(X86_FEATURE_VIRT_SSBD))
> -             amd_set_ssb_virt_state(tifn);
> -     else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD))
> -             amd_set_core_ssb_state(tifn);
> -     else
> +     bool updmsr = false;
> +
> +     /* Check for AMD cpu to see if it uses SPEC_CTRL MSR for SSBD */

Errm. This checks a TIF bit and nothing AMD. The AMD specific check only
happens when the branch is taken. Please be precise with your comments.

        /* If TIF_SSBD is different, select the proper mitigation method */

Hmm?

> +     if ((tifp ^ tifn) & _TIF_SSBD) {
> +             if (static_cpu_has(X86_FEATURE_VIRT_SSBD))
> +                     amd_set_ssb_virt_state(tifn);
> +             else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD))
> +                     amd_set_core_ssb_state(tifn);
> +             else if (static_cpu_has(X86_FEATURE_SSBD))
> +                     updmsr  = true;
> +     }
> +
> +     if (updmsr)
>               spec_ctrl_update_msr(tifn);
>  }
>  
>  void speculation_ctrl_update(unsigned long tif)
>  {
> +     /*
> +      * On this path we're forcing the update, so use ~tif as the
> +      * previous flags.
> +      */

        /* Forced update. Make sure all relevant TIF flags are different */

Hmm?

Thanks,

        tglx

Reply via email to