KVM: x86: use kvm_get_gdt() and kvm_read_ldt()
authorAkinobu Mita <akinobu.mita@gmail.com>
Sat, 18 Jul 2009 15:00:01 +0000 (00:00 +0900)
committerAvi Kivity <avi@redhat.com>
Thu, 10 Sep 2009 05:33:15 +0000 (08:33 +0300)
Use kvm_get_gdt() and kvm_read_ldt() to reduce inline assembly code.

Cc: Avi Kivity <avi@redhat.com>
Cc: kvm@vger.kernel.org
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/svm.c
arch/x86/kvm/x86.c

index 8728e51..92fc0da 100644 (file)
@@ -290,7 +290,7 @@ static void svm_hardware_enable(void *garbage)
 
        struct svm_cpu_data *svm_data;
        uint64_t efer;
-       struct desc_ptr gdt_descr;
+       struct descriptor_table gdt_descr;
        struct desc_struct *gdt;
        int me = raw_smp_processor_id();
 
@@ -310,8 +310,8 @@ static void svm_hardware_enable(void *garbage)
        svm_data->max_asid = cpuid_ebx(SVM_CPUID_FUNC) - 1;
        svm_data->next_asid = svm_data->max_asid + 1;
 
-       asm volatile ("sgdt %0" : "=m"(gdt_descr));
-       gdt = (struct desc_struct *)gdt_descr.address;
+       kvm_get_gdt(&gdt_descr);
+       gdt = (struct desc_struct *)gdt_descr.base;
        svm_data->tss_desc = (struct kvm_ldttss_desc *)(gdt + GDT_ENTRY_TSS);
 
        rdmsrl(MSR_EFER, efer);
index 6277a31..c7ec0c9 100644 (file)
@@ -132,13 +132,12 @@ unsigned long segment_base(u16 selector)
        if (selector == 0)
                return 0;
 
-       asm("sgdt %0" : "=m"(gdt));
+       kvm_get_gdt(&gdt);
        table_base = gdt.base;
 
        if (selector & 4) {           /* from ldt */
-               u16 ldt_selector;
+               u16 ldt_selector = kvm_read_ldt();
 
-               asm("sldt %0" : "=g"(ldt_selector));
                table_base = segment_base(ldt_selector);
        }
        d = (struct desc_struct *)(table_base + (selector & ~7));