mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
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: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
e071edd5ba
commit
d359192fea
1 changed files with 6 additions and 9 deletions
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
* 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 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue