aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/vmx.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2010-10-19 12:48:35 -0400
committerMarcelo Tosatti <mtosatti@redhat.com>2010-11-17 16:47:59 -0500
commit0a77fe4c188e25917799f2356d4aa5e6d80c39a2 (patch)
treeaed5a7a44ac832a0cc0f63c9eaa760448eacc117 /arch/x86/kvm/vmx.c
parent59365d136d205cc20fe666ca7f89b1c5001b0d5a (diff)
KVM: Correct ordering of ldt reload wrt fs/gs reload
If fs or gs refer to the ldt, they must be reloaded after the ldt. Reorder the code to that effect. Userspace code that uses the ldt with kvm is nonexistent, so this doesn't fix a user-visible bug. Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r--arch/x86/kvm/vmx.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 8da0e45ff7c9..6fe7df75bfd4 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -839,8 +839,6 @@ static void __vmx_load_host_state(struct vcpu_vmx *vmx)
839 839
840 ++vmx->vcpu.stat.host_state_reload; 840 ++vmx->vcpu.stat.host_state_reload;
841 vmx->host_state.loaded = 0; 841 vmx->host_state.loaded = 0;
842 if (vmx->host_state.fs_reload_needed)
843 loadsegment(fs, vmx->host_state.fs_sel);
844 if (vmx->host_state.gs_ldt_reload_needed) { 842 if (vmx->host_state.gs_ldt_reload_needed) {
845 kvm_load_ldt(vmx->host_state.ldt_sel); 843 kvm_load_ldt(vmx->host_state.ldt_sel);
846#ifdef CONFIG_X86_64 844#ifdef CONFIG_X86_64
@@ -850,6 +848,8 @@ static void __vmx_load_host_state(struct vcpu_vmx *vmx)
850 loadsegment(gs, vmx->host_state.gs_sel); 848 loadsegment(gs, vmx->host_state.gs_sel);
851#endif 849#endif
852 } 850 }
851 if (vmx->host_state.fs_reload_needed)
852 loadsegment(fs, vmx->host_state.fs_sel);
853 reload_tss(); 853 reload_tss();
854#ifdef CONFIG_X86_64 854#ifdef CONFIG_X86_64
855 if (is_long_mode(&vmx->vcpu)) { 855 if (is_long_mode(&vmx->vcpu)) {