KVM: VMX: Use host_gdt variable wherever we need the host gdt
authorAvi Kivity <avi@redhat.com>
Mon, 26 Jul 2010 15:32:39 +0000 (18:32 +0300)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:50:01 +0000 (10:50 +0200)
Now that we have the host gdt conveniently stored in a variable, make use
of it instead of querying the cpu.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/vmx.c

index 7bddfab120139435d1d10885520cc5293fefcc07..751a2d29f4ce190653e4e8935157b046ba83bfe0 100644 (file)
@@ -706,11 +706,10 @@ static void reload_tss(void)
        /*
         * VT restores TR but not its size.  Useless.
         */
-       struct desc_ptr gdt;
+       struct desc_ptr *gdt = &__get_cpu_var(host_gdt);
        struct desc_struct *descs;
 
-       native_store_gdt(&gdt);
-       descs = (void *)gdt.address;
+       descs = (void *)gdt->address;
        descs[GDT_ENTRY_TSS].type = 9; /* available TSS */
        load_TR_desc();
 }
@@ -753,7 +752,7 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset)
 
 static unsigned long segment_base(u16 selector)
 {
-       struct desc_ptr gdt;
+       struct desc_ptr *gdt = &__get_cpu_var(host_gdt);
        struct desc_struct *d;
        unsigned long table_base;
        unsigned long v;
@@ -761,8 +760,7 @@ static unsigned long segment_base(u16 selector)
        if (!(selector & ~3))
                return 0;
 
-       native_store_gdt(&gdt);
-       table_base = gdt.address;
+       table_base = gdt->address;
 
        if (selector & 4) {           /* from ldt */
                u16 ldt_selector = kvm_read_ldt();
@@ -897,7 +895,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
        }
 
        if (vcpu->cpu != cpu) {
-               struct desc_ptr dt;
+               struct desc_ptr *gdt = &__get_cpu_var(host_gdt);
                unsigned long sysenter_esp;
 
                kvm_migrate_timers(vcpu);
@@ -913,8 +911,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
                 * processors.
                 */
                vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */
-               native_store_gdt(&dt);
-               vmcs_writel(HOST_GDTR_BASE, dt.address);   /* 22.2.4 */
+               vmcs_writel(HOST_GDTR_BASE, gdt->address);   /* 22.2.4 */
 
                rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
                vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */