lkml.org 
[lkml]   [2018]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.15 17/60] x86/speculation: Simplify indirect_branch_prediction_barrier()
    Date
    4.15-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Borislav Petkov bp@suse.de

    commit 64e16720ea0879f8ab4547e3b9758936d483909b

    Make it all a function which does the WRMSR instead of having a hairy
    inline asm.

    [dwmw2: export it, fix CONFIG_RETPOLINE issues]

    Signed-off-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: ak@linux.intel.com
    Cc: dave.hansen@intel.com
    Cc: karahmed@amazon.de
    Cc: arjan@linux.intel.com
    Cc: torvalds@linux-foundation.org
    Cc: peterz@infradead.org
    Cc: bp@alien8.de
    Cc: pbonzini@redhat.com
    Cc: tim.c.chen@linux.intel.com
    Cc: gregkh@linux-foundation.org
    Link: https://lkml.kernel.org/r/1517070274-12128-4-git-send-email-dwmw@amazon.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>


    ---
    arch/x86/include/asm/nospec-branch.h | 13 ++++---------
    arch/x86/include/asm/processor.h | 3 +++
    arch/x86/kernel/cpu/bugs.c | 6 ++++++
    3 files changed, 13 insertions(+), 9 deletions(-)

    --- a/arch/x86/include/asm/nospec-branch.h
    +++ b/arch/x86/include/asm/nospec-branch.h
    @@ -164,15 +164,10 @@ static inline void vmexit_fill_RSB(void)

    static inline void indirect_branch_prediction_barrier(void)
    {
    - asm volatile(ALTERNATIVE("",
    - "movl %[msr], %%ecx\n\t"
    - "movl %[val], %%eax\n\t"
    - "movl $0, %%edx\n\t"
    - "wrmsr",
    - X86_FEATURE_USE_IBPB)
    - : : [msr] "i" (MSR_IA32_PRED_CMD),
    - [val] "i" (PRED_CMD_IBPB)
    - : "eax", "ecx", "edx", "memory");
    + alternative_input("",
    + "call __ibp_barrier",
    + X86_FEATURE_USE_IBPB,
    + ASM_NO_INPUT_CLOBBER("eax", "ecx", "edx", "memory"));
    }

    #endif /* __ASSEMBLY__ */
    --- a/arch/x86/include/asm/processor.h
    +++ b/arch/x86/include/asm/processor.h
    @@ -971,4 +971,7 @@ bool xen_set_default_idle(void);

    void stop_this_cpu(void *dummy);
    void df_debug(struct pt_regs *regs, long error_code);
    +
    +void __ibp_barrier(void);
    +
    #endif /* _ASM_X86_PROCESSOR_H */
    --- a/arch/x86/kernel/cpu/bugs.c
    +++ b/arch/x86/kernel/cpu/bugs.c
    @@ -311,3 +311,9 @@ ssize_t cpu_show_spectre_v2(struct devic
    spectre_v2_module_string());
    }
    #endif
    +
    +void __ibp_barrier(void)
    +{
    + __wrmsr(MSR_IA32_PRED_CMD, PRED_CMD_IBPB, 0);
    +}
    +EXPORT_SYMBOL_GPL(__ibp_barrier);

    \
     
     \ /
      Last update: 2018-02-05 19:52    [W:5.833 / U:0.916 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site