__vmwrite(HOST_RIP, (unsigned long)vmx_asm_vmexit_handler);
/* Host SYSENTER CS:RIP. */
- __vmwrite(HOST_SYSENTER_CS, __HYPERVISOR_CS);
- __vmwrite(HOST_SYSENTER_EIP, (unsigned long)sysenter_entry);
+ __vmwrite(HOST_SYSENTER_CS, IS_ENABLED(CONFIG_PV) ? __HYPERVISOR_CS : 0);
+ __vmwrite(HOST_SYSENTER_EIP,
+ IS_ENABLED(CONFIG_PV) ? (unsigned long)sysenter_entry : 0);
/* MSR intercepts. */
__vmwrite(VM_EXIT_MSR_LOAD_COUNT, 0);
}
DEFINE_PER_CPU(struct stubs, stubs);
+
+#ifdef CONFIG_PV
void lstar_enter(void);
void cstar_enter(void);
+#else
+static inline void lstar_enter(void)
+{
+ panic("%s called\n", __func__);
+}
+
+static inline void cstar_enter(void)
+{
+ panic("%s called\n", __func__);
+}
+#endif /* CONFIG_PV */
void subarch_percpu_traps_init(void)
{
{
/* SYSENTER entry. */
wrmsrl(MSR_IA32_SYSENTER_ESP, stack_bottom);
- wrmsrl(MSR_IA32_SYSENTER_EIP, (unsigned long)sysenter_entry);
- wrmsr(MSR_IA32_SYSENTER_CS, __HYPERVISOR_CS, 0);
+ wrmsrl(MSR_IA32_SYSENTER_EIP,
+ IS_ENABLED(CONFIG_PV) ? (unsigned long)sysenter_entry : 0);
+ wrmsr(MSR_IA32_SYSENTER_CS,
+ IS_ENABLED(CONFIG_PV) ? __HYPERVISOR_CS : 0, 0);
}
/* Trampoline for SYSCALL entry from compatibility mode. */