]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
x86: Make SYSENTER MSR restoration VMX-specific
authorJan Kiszka <jan.kiszka@siemens.com>
Sun, 5 Apr 2015 07:19:33 +0000 (09:19 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Fri, 10 Apr 2015 07:00:53 +0000 (09:00 +0200)
SVM does not overwrite these MSRs on VM exit, thus does not require the
restoration done in arch_cpu_restore so far. Make them VMX-specific so
that we can drop a few lines of code.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
hypervisor/arch/x86/setup.c
hypervisor/arch/x86/svm.c
hypervisor/arch/x86/vmx.c

index bb73439d6766142d5d7a1ad5d711fbeaf6ae7b43..af090af1c59c7a24d264833f31ba57e4c6f6ea61 100644 (file)
@@ -286,8 +286,4 @@ void arch_cpu_restore(struct per_cpu *cpu_data, int return_code)
 
        write_msr(MSR_FS_BASE, cpu_data->linux_fs.base);
        write_msr(MSR_GS_BASE, cpu_data->linux_gs.base);
-
-       write_msr(MSR_IA32_SYSENTER_CS, cpu_data->linux_sysenter_cs);
-       write_msr(MSR_IA32_SYSENTER_EIP, cpu_data->linux_sysenter_eip);
-       write_msr(MSR_IA32_SYSENTER_ESP, cpu_data->linux_sysenter_esp);
 }
index 54be21d06ce694aef06735cc9c40477243b8436b..d35bbe163b83afcc671523a79ecd704c2d98637d 100644 (file)
@@ -462,10 +462,6 @@ void __attribute__((noreturn)) vcpu_deactivate_vmm(void)
        cpu_data->linux_fs.base = vmcb->fs.base;
        cpu_data->linux_gs.base = vmcb->gs.base;
 
-       cpu_data->linux_sysenter_cs = vmcb->sysenter_cs;
-       cpu_data->linux_sysenter_eip = vmcb->sysenter_eip;
-       cpu_data->linux_sysenter_esp = vmcb->sysenter_esp;
-
        cpu_data->linux_ds.selector = vmcb->ds.selector;
        cpu_data->linux_es.selector = vmcb->es.selector;
        cpu_data->linux_fs.selector = vmcb->fs.selector;
index 0cb34bd5d73a4445c1de47a82fc0c0b464ae4899..94a2083c5689f2072becd1dd163480632359fd42 100644 (file)
@@ -720,9 +720,9 @@ void __attribute__((noreturn)) vcpu_deactivate_vmm(void)
        cpu_data->linux_fs.base = vmcs_read64(GUEST_FS_BASE);
        cpu_data->linux_gs.base = vmcs_read64(GUEST_GS_BASE);
 
-       cpu_data->linux_sysenter_cs = vmcs_read32(GUEST_SYSENTER_CS);
-       cpu_data->linux_sysenter_eip = vmcs_read64(GUEST_SYSENTER_EIP);
-       cpu_data->linux_sysenter_esp = vmcs_read64(GUEST_SYSENTER_ESP);
+       write_msr(MSR_IA32_SYSENTER_CS, vmcs_read32(GUEST_SYSENTER_CS));
+       write_msr(MSR_IA32_SYSENTER_EIP, vmcs_read64(GUEST_SYSENTER_EIP));
+       write_msr(MSR_IA32_SYSENTER_ESP, vmcs_read64(GUEST_SYSENTER_ESP));
 
        cpu_data->linux_ds.selector = vmcs_read16(GUEST_DS_SELECTOR);
        cpu_data->linux_es.selector = vmcs_read16(GUEST_ES_SELECTOR);