Commit d359192f authored by Avi Kivity's avatar Avi Kivity

KVM: VMX: Use host_gdt variable wherever we need the host gdt

Now that we have the host gdt conveniently stored in a variable, make use
of it instead of querying the cpu.
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent e071edd5
...@@ -706,11 +706,10 @@ static void reload_tss(void) ...@@ -706,11 +706,10 @@ static void reload_tss(void)
/* /*
* VT restores TR but not its size. Useless. * 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; struct desc_struct *descs;
native_store_gdt(&gdt); descs = (void *)gdt->address;
descs = (void *)gdt.address;
descs[GDT_ENTRY_TSS].type = 9; /* available TSS */ descs[GDT_ENTRY_TSS].type = 9; /* available TSS */
load_TR_desc(); load_TR_desc();
} }
...@@ -753,7 +752,7 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset) ...@@ -753,7 +752,7 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset)
static unsigned long segment_base(u16 selector) static unsigned long segment_base(u16 selector)
{ {
struct desc_ptr gdt; struct desc_ptr *gdt = &__get_cpu_var(host_gdt);
struct desc_struct *d; struct desc_struct *d;
unsigned long table_base; unsigned long table_base;
unsigned long v; unsigned long v;
...@@ -761,8 +760,7 @@ static unsigned long segment_base(u16 selector) ...@@ -761,8 +760,7 @@ static unsigned long segment_base(u16 selector)
if (!(selector & ~3)) if (!(selector & ~3))
return 0; return 0;
native_store_gdt(&gdt); table_base = gdt->address;
table_base = gdt.address;
if (selector & 4) { /* from ldt */ if (selector & 4) { /* from ldt */
u16 ldt_selector = kvm_read_ldt(); u16 ldt_selector = kvm_read_ldt();
...@@ -897,7 +895,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) ...@@ -897,7 +895,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
} }
if (vcpu->cpu != cpu) { if (vcpu->cpu != cpu) {
struct desc_ptr dt; struct desc_ptr *gdt = &__get_cpu_var(host_gdt);
unsigned long sysenter_esp; unsigned long sysenter_esp;
kvm_migrate_timers(vcpu); kvm_migrate_timers(vcpu);
...@@ -913,8 +911,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) ...@@ -913,8 +911,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
* processors. * processors.
*/ */
vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */ vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */
native_store_gdt(&dt); vmcs_writel(HOST_GDTR_BASE, gdt->address); /* 22.2.4 */
vmcs_writel(HOST_GDTR_BASE, dt.address); /* 22.2.4 */
rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp); rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */ vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment