|
@@ -164,15 +164,10 @@ static inline void vmexit_fill_RSB(void)
|
|
|
|
|
|
static inline void indirect_branch_prediction_barrier(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__ */
|
|
#endif /* __ASSEMBLY__ */
|