lkml.org 
[lkml]   [2018]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [tip:x86/pti] x86/speculation: Use IBRS if available before calling into firmware
    From
    Date
    On 02/11/2018 11:19 AM, tip-bot for David Woodhouse wrote:
    \
    > })
    > diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
    > index 300cc15..788c4da 100644
    > --- a/arch/x86/include/asm/nospec-branch.h
    > +++ b/arch/x86/include/asm/nospec-branch.h
    > @@ -162,17 +162,36 @@ static inline void vmexit_fill_RSB(void)
    > #endif
    > }
    >
    > +#define alternative_msr_write(_msr, _val, _feature) \
    > + asm volatile(ALTERNATIVE("", \
    > + "movl %[msr], %%ecx\n\t" \
    > + "movl %[val], %%eax\n\t" \
    > + "movl $0, %%edx\n\t" \
    > + "wrmsr", \
    > + _feature) \
    > + : : [msr] "i" (_msr), [val] "i" (_val) \
    > + : "eax", "ecx", "edx", "memory")
    > +

    I encountered hang on a machine but not others when using the above
    macro. It is probably an alignment thing with ALTERNATIVE as the problem went
    away after I made the change below:

    Tim

    diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
    index 8f2ff74..0f65bd2 100644
    --- a/arch/x86/include/asm/nospec-branch.h
    +++ b/arch/x86/include/asm/nospec-branch.h
    @@ -148,6 +148,7 @@ extern char __indirect_thunk_end[];

    #define alternative_msr_write(_msr, _val, _feature) \
    asm volatile(ALTERNATIVE("", \
    + ".align 16\n\t" \
    "movl %[msr], %%ecx\n\t" \
    "movl %[val], %%eax\n\t" \
    "movl $0, %%edx\n\t" \
    \
     
     \ /
      Last update: 2018-02-16 19:45    [W:2.998 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site