]> xenbits.xensource.com Git - freebsd.git/commitdiff
Use get_pcpu() to fetch the current CPU's pcpu pointer.
authorjhb <jhb@FreeBSD.org>
Wed, 28 Aug 2019 23:40:57 +0000 (23:40 +0000)
committerjhb <jhb@FreeBSD.org>
Wed, 28 Aug 2019 23:40:57 +0000 (23:40 +0000)
This avoids encoding knowledge about how pcpu objects are allocated and is
also a few instructions shorter.

MFC after: 2 weeks

sys/amd64/vmm/amd/svm.c
sys/amd64/vmm/vmm_host.h

index ea9130cef4a5741dcea09732a02848f2e4691b06..7b8c4a97a4f0c076626b3362e367a9c168c703aa 100644 (file)
@@ -102,9 +102,6 @@ SYSCTL_INT(_hw_vmm_svm, OID_AUTO, vmcb_clean, CTLFLAG_RDTUN, &vmcb_clean,
 static MALLOC_DEFINE(M_SVM, "svm", "svm");
 static MALLOC_DEFINE(M_SVM_VLAPIC, "svm-vlapic", "svm-vlapic");
 
-/* Per-CPU context area. */
-extern struct pcpu __pcpu[];
-
 static uint32_t svm_feature = ~0U;     /* AMD SVM features. */
 SYSCTL_UINT(_hw_vmm_svm, OID_AUTO, features, CTLFLAG_RDTUN, &svm_feature, 0,
     "SVM features advertised by CPUID.8000000AH:EDX");
@@ -2054,7 +2051,7 @@ svm_vmrun(void *arg, int vcpu, register_t rip, pmap_t pmap,
                /* Launch Virtual Machine. */
                VCPU_CTR1(vm, vcpu, "Resume execution at %#lx", state->rip);
                svm_dr_enter_guest(gctx);
-               svm_launch(vmcb_pa, gctx, &__pcpu[curcpu]);
+               svm_launch(vmcb_pa, gctx, get_pcpu());
                svm_dr_leave_guest(gctx);
 
                CPU_CLR_ATOMIC(curcpu, &pmap->pm_active);
index 51991e13fc6b923d0fd4b8c20c2840328ff0861a..0129cfddd90c7efd4fb7425b31b8b005fc46aa5a 100644 (file)
@@ -72,14 +72,11 @@ vmm_get_host_gdtrbase(void)
        return ((uint64_t)&gdt[NGDT * curcpu]);
 }
 
-struct pcpu;
-extern struct pcpu __pcpu[];
-
 static __inline uint64_t
 vmm_get_host_gsbase(void)
 {
 
-       return ((uint64_t)&__pcpu[curcpu]);
+       return ((uint64_t)get_pcpu());
 }
 
 #endif