summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2016-11-08 07:18:39 +0000
committeravg <avg@FreeBSD.org>2016-11-08 07:18:39 +0000
commita0976b36bd568f80075b265b8c15e96330063ca6 (patch)
tree860a79214db51e699054e8cbc7991c0de27d48fc /sys/amd64
parent39dc586d6a207e41169d213009f997003f14357b (diff)
downloadFreeBSD-src-a0976b36bd568f80075b265b8c15e96330063ca6.zip
FreeBSD-src-a0976b36bd568f80075b265b8c15e96330063ca6.tar.gz
MFC r307903,307904,308039,308050: vmm/svm: iopm_bitmap and msr_bitmap
must be contiguous in physical memory
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/vmm/amd/svm.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/amd64/vmm/amd/svm.c b/sys/amd64/vmm/amd/svm.c
index ca5141a..fa4173d 100644
--- a/sys/amd64/vmm/amd/svm.c
+++ b/sys/amd64/vmm/amd/svm.c
@@ -515,10 +515,11 @@ svm_vminit(struct vm *vm, pmap_t pmap)
{
struct svm_softc *svm_sc;
struct svm_vcpu *vcpu;
- vm_paddr_t msrpm_pa, iopm_pa, pml4_pa;
+ vm_paddr_t msrpm_pa, iopm_pa, pml4_pa;
int i;
- svm_sc = malloc(sizeof (struct svm_softc), M_SVM, M_WAITOK | M_ZERO);
+ svm_sc = contigmalloc(sizeof (*svm_sc), M_SVM, M_WAITOK | M_ZERO,
+ 0, ~(vm_paddr_t)0, PAGE_SIZE, 0);
svm_sc->vm = vm;
svm_sc->nptp = (vm_offset_t)vtophys(pmap->pm_pml4);
@@ -535,7 +536,7 @@ svm_vminit(struct vm *vm, pmap_t pmap)
svm_msr_rw_ok(svm_sc->msr_bitmap, MSR_GSBASE);
svm_msr_rw_ok(svm_sc->msr_bitmap, MSR_FSBASE);
svm_msr_rw_ok(svm_sc->msr_bitmap, MSR_KGSBASE);
-
+
svm_msr_rw_ok(svm_sc->msr_bitmap, MSR_STAR);
svm_msr_rw_ok(svm_sc->msr_bitmap, MSR_LSTAR);
svm_msr_rw_ok(svm_sc->msr_bitmap, MSR_CSTAR);
@@ -2043,7 +2044,7 @@ svm_vmcleanup(void *arg)
{
struct svm_softc *sc = arg;
- free(sc, M_SVM);
+ contigfree(sc, sizeof (*sc), M_SVM);
}
static register_t *
OpenPOWER on IntegriCloud