|
@@ -164,10 +164,15 @@ static inline void vmexit_fill_RSB(void)
|
|
|
|
|
|
static inline void indirect_branch_prediction_barrier(void)
|
|
|
{
|
|
|
- alternative_input("",
|
|
|
- "call __ibp_barrier",
|
|
|
- X86_FEATURE_USE_IBPB,
|
|
|
- ASM_NO_INPUT_CLOBBER("eax", "ecx", "edx", "memory"));
|
|
|
+ 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");
|
|
|
}
|
|
|
|
|
|
#endif /* __ASSEMBLY__ */
|