sys/dev/nvmm/nvmm_internal.h
68
void *cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1007
if ((cpudata->xcr0_mask & __BIT(ecx)) == 0) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1008
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1009
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1010
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1011
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1015
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1016
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1017
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1018
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1027
cpudata->vmcb->state.rax = SVM_CPUID_MAX_HYPERVISOR;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1028
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1029
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1030
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1031
memcpy(&cpudata->gprs[NVMM_X64_GPR_RBX], "___ ", 4);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1032
memcpy(&cpudata->gprs[NVMM_X64_GPR_RCX], "NVMM", 4);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1033
memcpy(&cpudata->gprs[NVMM_X64_GPR_RDX], " ___", 4);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1040
cpudata->vmcb->state.rax = svm_cpuid_max_extended;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1043
cpudata->vmcb->state.rax &= nvmm_cpuid_80000001.eax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1044
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000001.ebx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1045
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000001.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1046
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000001.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1055
cpudata->vmcb->state.rax &= nvmm_cpuid_80000007.eax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1056
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000007.ebx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1057
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000007.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1058
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000007.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1061
cpudata->vmcb->state.rax &= nvmm_cpuid_80000008.eax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1062
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000008.ebx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1063
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000008.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1064
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000008.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1082
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1083
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1084
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1085
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1092
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1093
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1094
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1095
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1101
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1102
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1103
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1104
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1123
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1128
eax = cpudata->vmcb->state.rax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1129
ecx = cpudata->gprs[NVMM_X64_GPR_RCX];
sys/dev/nvmm/x86/nvmm_x86_svm.c
1130
svm_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1134
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1137
cpuid = &cpudata->cpuid[i];
sys/dev/nvmm/x86/nvmm_x86_svm.c
1143
svm_exit_insn(cpudata->vmcb, exit, NVMM_VCPU_EXIT_CPUID);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1149
cpudata->vmcb->state.rax &= ~cpuid->u.mask.del.eax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1150
cpudata->gprs[NVMM_X64_GPR_RBX] &= ~cpuid->u.mask.del.ebx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1151
cpudata->gprs[NVMM_X64_GPR_RCX] &= ~cpuid->u.mask.del.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1152
cpudata->gprs[NVMM_X64_GPR_RDX] &= ~cpuid->u.mask.del.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1155
cpudata->vmcb->state.rax |= cpuid->u.mask.set.eax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1156
cpudata->gprs[NVMM_X64_GPR_RBX] |= cpuid->u.mask.set.ebx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1157
cpudata->gprs[NVMM_X64_GPR_RCX] |= cpuid->u.mask.set.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1158
cpudata->gprs[NVMM_X64_GPR_RDX] |= cpuid->u.mask.set.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1163
svm_inkernel_advance(cpudata->vmcb);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1171
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1172
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1174
if (cpudata->int_window_exit && (vmcb->state.rflags & PSL_I)) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1178
svm_inkernel_advance(cpudata->vmcb);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1198
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1199
uint64_t info = cpudata->vmcb->ctrl.exitinfo1;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1200
uint64_t nextpc = cpudata->vmcb->ctrl.exitinfo2;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1250
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1251
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1259
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1265
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1273
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1283
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1290
cpudata->gtsc = exit->u.wrmsr.val;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1291
cpudata->gtsc_want_update = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1304
svm_inkernel_advance(cpudata->vmcb);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1316
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1319
exit->u.rdmsr.msr = (cpudata->gprs[NVMM_X64_GPR_RCX] & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1320
exit->u.rdmsr.npc = cpudata->vmcb->ctrl.nrip;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1334
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1337
rdx = cpudata->gprs[NVMM_X64_GPR_RDX];
sys/dev/nvmm/x86/nvmm_x86_svm.c
1338
rax = cpudata->vmcb->state.rax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1341
exit->u.wrmsr.msr = (cpudata->gprs[NVMM_X64_GPR_RCX] & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1343
exit->u.wrmsr.npc = cpudata->vmcb->ctrl.nrip;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1357
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1358
uint64_t info = cpudata->vmcb->ctrl.exitinfo1;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1371
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1372
gpaddr_t gpa = cpudata->vmcb->ctrl.exitinfo2;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1375
if (cpudata->vmcb->ctrl.exitinfo1 & PGEX_W)
sys/dev/nvmm/x86/nvmm_x86_svm.c
1377
else if (cpudata->vmcb->ctrl.exitinfo1 & PGEX_I)
sys/dev/nvmm/x86/nvmm_x86_svm.c
1382
exit->u.mem.inst_len = cpudata->vmcb->ctrl.inst_len;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1383
memcpy(exit->u.mem.inst_bytes, cpudata->vmcb->ctrl.inst_bytes,
sys/dev/nvmm/x86/nvmm_x86_svm.c
1395
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1396
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1401
val = (cpudata->gprs[NVMM_X64_GPR_RDX] << 32) |
sys/dev/nvmm/x86/nvmm_x86_svm.c
1404
if (__predict_false(cpudata->gprs[NVMM_X64_GPR_RCX] != 0)) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1408
} else if (__predict_false(cpudata->xcr0_mask == 0)) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1411
cpudata->xcr0_mask))) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1415
KASSERTMSG(nvmm_x86_xcr0_valid(val, cpudata->xcr0_mask),
sys/dev/nvmm/x86/nvmm_x86_svm.c
1417
val, cpudata->xcr0_mask, cpudata->gxcr0);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1418
cpudata->gxcr0 = val;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1420
svm_inkernel_advance(cpudata->vmcb);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1439
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1450
KASSERTMSG((cpudata->gxcr0 & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_svm.c
1452
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1453
KASSERTMSG((cpudata->gfpu.xsh_xstate_bv & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_svm.c
1455
cpudata->gfpu.xsh_xstate_bv, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1473
if (cpudata->xcr0_mask == 0) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1475
fpu_area_restore(&cpudata->gfpu, XCR0_X87|XCR0_SSE, false);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1496
cpudata->hxcr0 = rdxcr(0);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1497
wrxcr(0, cpudata->xcr0_mask &
sys/dev/nvmm/x86/nvmm_x86_svm.c
1498
(cpudata->gfpu.xsh_xstate_bv | cpudata->gxcr0));
sys/dev/nvmm/x86/nvmm_x86_svm.c
1505
fpu_area_restore(&cpudata->gfpu, cpudata->xcr0_mask, false);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1512
if (__predict_false(cpudata->gxcr0 != (cpudata->xcr0_mask &
sys/dev/nvmm/x86/nvmm_x86_svm.c
1513
(cpudata->gfpu.xsh_xstate_bv | cpudata->gxcr0))))
sys/dev/nvmm/x86/nvmm_x86_svm.c
1514
wrxcr(0, cpudata->xcr0_mask & cpudata->gxcr0);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1520
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1529
if (cpudata->xcr0_mask == 0) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1531
fpu_area_save(&cpudata->gfpu, XCR0_X87|XCR0_SSE, false);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1543
cpudata->gxcr0 = rdxcr(0);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1544
wrxcr(0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1551
KASSERTMSG((cpudata->gxcr0 & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_svm.c
1553
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1554
cpudata->gxcr0 &= cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1561
fpu_area_save(&cpudata->gfpu, cpudata->xcr0_mask, false);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1568
if (cpudata->xcr0_mask != cpudata->hxcr0)
sys/dev/nvmm/x86/nvmm_x86_svm.c
1569
wrxcr(0, cpudata->hxcr0);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1586
KASSERTMSG((cpudata->gxcr0 & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_svm.c
1588
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1589
KASSERTMSG((cpudata->gfpu.xsh_xstate_bv & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_svm.c
1591
cpudata->gfpu.xsh_xstate_bv, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1597
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1603
ldr0(cpudata->drs[NVMM_X64_DR_DR0]);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1604
ldr1(cpudata->drs[NVMM_X64_DR_DR1]);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1605
ldr2(cpudata->drs[NVMM_X64_DR_DR2]);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1606
ldr3(cpudata->drs[NVMM_X64_DR_DR3]);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1612
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1614
cpudata->drs[NVMM_X64_DR_DR0] = rdr0();
sys/dev/nvmm/x86/nvmm_x86_svm.c
1615
cpudata->drs[NVMM_X64_DR_DR1] = rdr1();
sys/dev/nvmm/x86/nvmm_x86_svm.c
1616
cpudata->drs[NVMM_X64_DR_DR2] = rdr2();
sys/dev/nvmm/x86/nvmm_x86_svm.c
1617
cpudata->drs[NVMM_X64_DR_DR3] = rdr3();
sys/dev/nvmm/x86/nvmm_x86_svm.c
1625
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1627
cpudata->fsbase = rdmsr(MSR_FSBASE);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1628
cpudata->kernelgsbase = rdmsr(MSR_KERNELGSBASE);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1634
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1636
wrmsr(MSR_STAR, cpudata->star);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1637
wrmsr(MSR_LSTAR, cpudata->lstar);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1638
wrmsr(MSR_CSTAR, cpudata->cstar);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1639
wrmsr(MSR_SFMASK, cpudata->sfmask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1640
wrmsr(MSR_FSBASE, cpudata->fsbase);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1641
wrmsr(MSR_KERNELGSBASE, cpudata->kernelgsbase);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1649
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1651
if (vcpu->hcpu_last != hcpu || cpudata->shared_asid) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1652
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1668
svm_htlb_flush(struct svm_machdata *machdata, struct svm_cpudata *cpudata)
sys/dev/nvmm/x86/nvmm_x86_svm.c
1670
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1674
if (__predict_true(machgen == cpudata->vcpu_htlb_gen)) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1683
svm_htlb_flush_ack(struct svm_cpudata *cpudata, uint64_t machgen)
sys/dev/nvmm/x86/nvmm_x86_svm.c
1685
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1688
cpudata->vcpu_htlb_gen = machgen;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1693
svm_exit_evt(struct svm_cpudata *cpudata, struct vmcb *vmcb)
sys/dev/nvmm/x86/nvmm_x86_svm.c
1695
cpudata->evt_pending = false;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1699
cpudata->evt_pending = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1709
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1710
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1729
cpudata->gtsc_want_update = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1736
if (cpudata->gtlb_want_flush) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1742
if (__predict_false(cpudata->gtsc_want_update)) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
1743
vmcb->ctrl.tsc_offset = cpudata->gtsc - rdtsc();
sys/dev/nvmm/x86/nvmm_x86_svm.c
1749
machgen = svm_htlb_flush(machdata, cpudata);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1750
svm_vmrun(cpudata->vmcb_pa, cpudata->gprs);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1751
svm_htlb_flush_ack(cpudata, machgen);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1758
cpudata->gtlb_want_flush = false;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1759
cpudata->gtsc_want_update = false;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1762
svm_exit_evt(cpudata, vmcb);
sys/dev/nvmm/x86/nvmm_x86_svm.c
1839
cpudata->gtsc = rdtsc() + vmcb->ctrl.tsc_offset;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1850
exit->exitstate.int_window_exiting = cpudata->int_window_exit;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1851
exit->exitstate.nmi_window_exiting = cpudata->nmi_window_exit;
sys/dev/nvmm/x86/nvmm_x86_svm.c
1852
exit->exitstate.evt_pending = cpudata->evt_pending;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2021
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2022
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2029
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2057
CTASSERT(sizeof(cpudata->gprs) == sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2059
memcpy(cpudata->gprs, state->gprs, sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2078
if (cpudata->xcr0_mask != 0) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2081
cpudata->gxcr0 = nvmm_x86_munge_xcr0(xcr0,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2082
cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2086
CTASSERT(sizeof(cpudata->drs) == sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2088
memcpy(cpudata->drs, state->drs, sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2113
cpudata->gtsc = state->msrs[NVMM_X64_MSR_TSC];
sys/dev/nvmm/x86/nvmm_x86_svm.c
2114
cpudata->gtsc_want_update = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2137
CTASSERT(sizeof(cpudata->gfpu.xsh_fxsave) == sizeof(state->fpu));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2139
memcpy(cpudata->gfpu.xsh_fxsave, &state->fpu,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2142
fpustate = (struct fxsave *)cpudata->gfpu.xsh_fxsave;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2146
if (cpudata->xcr0_mask != 0) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2148
cpudata->gfpu.xsh_xstate_bv = cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2167
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2168
const struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2198
CTASSERT(sizeof(cpudata->gprs) == sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2200
memcpy(state->gprs, cpudata->gprs, sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2215
state->crs[NVMM_X64_CR_XCR0] = cpudata->gxcr0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2218
CTASSERT(sizeof(cpudata->drs) == sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2220
memcpy(state->drs, cpudata->drs, sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2241
state->msrs[NVMM_X64_MSR_TSC] = cpudata->gtsc;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2250
state->intr.int_window_exiting = cpudata->int_window_exit;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2251
state->intr.nmi_window_exiting = cpudata->nmi_window_exit;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2252
state->intr.evt_pending = cpudata->evt_pending;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2255
CTASSERT(sizeof(cpudata->gfpu.xsh_fxsave) == sizeof(state->fpu));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2257
memcpy(&state->fpu, cpudata->gfpu.xsh_fxsave,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2289
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2290
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2313
cpudata->shared_asid = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2321
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2322
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2325
if (cpudata->shared_asid) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2340
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2341
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2423
memset(cpudata->iobm, 0xFF, IOBM_SIZE);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2424
vmcb->ctrl.iopm_base_pa = cpudata->iobm_pa;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2427
memset(cpudata->msrbm, 0xFF, MSRBM_SIZE);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2428
svm_vcpu_msr_allow(cpudata->msrbm, MSR_STAR, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2429
svm_vcpu_msr_allow(cpudata->msrbm, MSR_LSTAR, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2430
svm_vcpu_msr_allow(cpudata->msrbm, MSR_CSTAR, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2431
svm_vcpu_msr_allow(cpudata->msrbm, MSR_SFMASK, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2432
svm_vcpu_msr_allow(cpudata->msrbm, MSR_KERNELGSBASE, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2433
svm_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_CS, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2434
svm_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_ESP, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2435
svm_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_EIP, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2436
svm_vcpu_msr_allow(cpudata->msrbm, MSR_FSBASE, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2437
svm_vcpu_msr_allow(cpudata->msrbm, MSR_GSBASE, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2438
svm_vcpu_msr_allow(cpudata->msrbm, MSR_CR_PAT, true, true);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2439
svm_vcpu_msr_allow(cpudata->msrbm, MSR_TSC, true, false);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2440
vmcb->ctrl.msrpm_base_pa = cpudata->msrbm_pa;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2453
cpudata->xcr0_mask = svm_xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2454
KASSERTMSG(nvmm_x86_xcr0_valid(cpudata->xcr0_mask, svm_xcr0_mask),
sys/dev/nvmm/x86/nvmm_x86_svm.c
2456
cpudata->xcr0_mask, svm_xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2457
cpudata->gfpu.xsh_xstate_bv = cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2458
cpudata->gfpu.xsh_xcomp_bv = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2461
cpudata->star = rdmsr(MSR_STAR);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2462
cpudata->lstar = rdmsr(MSR_LSTAR);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2463
cpudata->cstar = rdmsr(MSR_CSTAR);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2464
cpudata->sfmask = rdmsr(MSR_SFMASK);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2478
struct svm_cpudata *cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2492
cpudata_size = MAX(sizeof(*cpudata),
sys/dev/nvmm/x86/nvmm_x86_svm.c
2496
cpudata = (struct svm_cpudata *)uvm_km_alloc(kernel_map,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2499
vcpu->cpudata = cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2502
error = svm_memalloc(&cpudata->vmcb_pa, (vaddr_t *)&cpudata->vmcb,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2508
error = svm_memalloc(&cpudata->iobm_pa, (vaddr_t *)&cpudata->iobm,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2514
error = svm_memalloc(&cpudata->msrbm_pa, (vaddr_t *)&cpudata->msrbm,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2525
if (cpudata->vmcb_pa) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2526
svm_memfree(cpudata->vmcb_pa, (vaddr_t)cpudata->vmcb,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2529
if (cpudata->iobm_pa) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2530
svm_memfree(cpudata->iobm_pa, (vaddr_t)cpudata->iobm,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2533
if (cpudata->msrbm_pa) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2534
svm_memfree(cpudata->msrbm_pa, (vaddr_t)cpudata->msrbm,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2537
uvm_km_free(kernel_map, (vaddr_t)cpudata,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2538
roundup(sizeof(*cpudata), PAGE_SIZE), UVM_KMF_WIRED);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2545
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2549
svm_memfree(cpudata->vmcb_pa, (vaddr_t)cpudata->vmcb, VMCB_NPAGES);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2550
svm_memfree(cpudata->iobm_pa, (vaddr_t)cpudata->iobm, IOBM_NPAGES);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2551
svm_memfree(cpudata->msrbm_pa, (vaddr_t)cpudata->msrbm, MSRBM_NPAGES);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2553
uvm_km_free(kernel_map, (vaddr_t)cpudata,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2554
roundup(sizeof(*cpudata), PAGE_SIZE), UVM_KMF_WIRED);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2560
svm_vcpu_configure_cpuid(struct svm_cpudata *cpudata, void *data)
sys/dev/nvmm/x86/nvmm_x86_svm.c
2579
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2582
if (cpudata->cpuid[i].leaf == cpuid->leaf) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2583
cpudata->cpuidpresent[i] = false;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2591
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2594
if (cpudata->cpuid[i].leaf == cpuid->leaf) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2595
memcpy(&cpudata->cpuid[i], cpuid,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2603
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
2604
cpudata->cpuidpresent[i] = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2605
memcpy(&cpudata->cpuid[i], cpuid,
sys/dev/nvmm/x86/nvmm_x86_svm.c
2615
svm_vcpu_configure_xcr0_mask(struct svm_cpudata *cpudata, void *data)
sys/dev/nvmm/x86/nvmm_x86_svm.c
2646
memset(&cpudata->gfpu, 0, nvmm_x86_xsave_size(svm_xcr0_mask));
sys/dev/nvmm/x86/nvmm_x86_svm.c
2653
cpudata->xcr0_mask = *xcr0_maskp;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2654
cpudata->gxcr0 &= cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2655
KASSERTMSG((cpudata->xcr0_mask == 0 ||
sys/dev/nvmm/x86/nvmm_x86_svm.c
2656
nvmm_x86_xcr0_valid(cpudata->gxcr0, cpudata->xcr0_mask)),
sys/dev/nvmm/x86/nvmm_x86_svm.c
2658
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2665
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
2669
return svm_vcpu_configure_cpuid(cpudata, data);
sys/dev/nvmm/x86/nvmm_x86_svm.c
2671
return svm_vcpu_configure_xcr0_mask(cpudata, data);
sys/dev/nvmm/x86/nvmm_x86_svm.c
681
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
682
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
686
cpudata->nmi_window_exit = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
691
cpudata->int_window_exit = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
700
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
701
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
705
cpudata->nmi_window_exit = false;
sys/dev/nvmm/x86/nvmm_x86_svm.c
710
cpudata->int_window_exit = false;
sys/dev/nvmm/x86/nvmm_x86_svm.c
753
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
754
struct vmcb *vmcb = cpudata->vmcb;
sys/dev/nvmm/x86/nvmm_x86_svm.c
796
cpudata->evt_pending = true;
sys/dev/nvmm/x86/nvmm_x86_svm.c
859
svm_inkernel_exec_cpuid(struct svm_cpudata *cpudata, uint64_t eax, uint64_t ecx)
sys/dev/nvmm/x86/nvmm_x86_svm.c
864
cpudata->vmcb->state.rax = descs[0];
sys/dev/nvmm/x86/nvmm_x86_svm.c
865
cpudata->gprs[NVMM_X64_GPR_RBX] = descs[1];
sys/dev/nvmm/x86/nvmm_x86_svm.c
866
cpudata->gprs[NVMM_X64_GPR_RCX] = descs[2];
sys/dev/nvmm/x86/nvmm_x86_svm.c
867
cpudata->gprs[NVMM_X64_GPR_RDX] = descs[3];
sys/dev/nvmm/x86/nvmm_x86_svm.c
873
struct svm_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_svm.c
896
svm_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_svm.c
901
svm_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_svm.c
906
svm_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_svm.c
916
cpudata->vmcb->state.rax = svm_cpuid_max_basic;
sys/dev/nvmm/x86/nvmm_x86_svm.c
919
cpudata->vmcb->state.rax &= nvmm_cpuid_00000001.eax;
sys/dev/nvmm/x86/nvmm_x86_svm.c
921
cpudata->gprs[NVMM_X64_GPR_RBX] &= ~CPUID_LOCAL_APIC_ID;
sys/dev/nvmm/x86/nvmm_x86_svm.c
922
cpudata->gprs[NVMM_X64_GPR_RBX] |= __SHIFTIN(vcpu->cpuid,
sys/dev/nvmm/x86/nvmm_x86_svm.c
925
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_00000001.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
926
cpudata->gprs[NVMM_X64_GPR_RCX] |= CPUID2_RAZ;
sys/dev/nvmm/x86/nvmm_x86_svm.c
928
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_00000001.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
931
cr4 = cpudata->vmcb->state.cr4;
sys/dev/nvmm/x86/nvmm_x86_svm.c
933
cpudata->gprs[NVMM_X64_GPR_RCX] &= ~CPUID2_OSXSAVE;
sys/dev/nvmm/x86/nvmm_x86_svm.c
941
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
942
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
943
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
944
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
949
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
950
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_00000007.ebx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
951
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_00000007.ecx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
952
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_00000007.edx;
sys/dev/nvmm/x86/nvmm_x86_svm.c
955
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
956
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
957
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
958
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
967
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
968
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
969
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
970
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
973
if (cpudata->xcr0_mask == 0) {
sys/dev/nvmm/x86/nvmm_x86_svm.c
974
cpudata->vmcb->state.rax = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
975
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
976
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
977
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
982
cpudata->vmcb->state.rax =
sys/dev/nvmm/x86/nvmm_x86_svm.c
983
cpudata->xcr0_mask & 0xFFFFFFFF;
sys/dev/nvmm/x86/nvmm_x86_svm.c
984
cpudata->gprs[NVMM_X64_GPR_RBX] =
sys/dev/nvmm/x86/nvmm_x86_svm.c
985
nvmm_x86_xsave_size(cpudata->gxcr0);
sys/dev/nvmm/x86/nvmm_x86_svm.c
986
cpudata->gprs[NVMM_X64_GPR_RCX] =
sys/dev/nvmm/x86/nvmm_x86_svm.c
987
nvmm_x86_xsave_size(cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_svm.c
988
cpudata->gprs[NVMM_X64_GPR_RDX] =
sys/dev/nvmm/x86/nvmm_x86_svm.c
989
cpudata->xcr0_mask >> 32;
sys/dev/nvmm/x86/nvmm_x86_svm.c
992
cpudata->vmcb->state.rax &=
sys/dev/nvmm/x86/nvmm_x86_svm.c
995
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
996
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_svm.c
997
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1001
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1004
KASSERT(vmx_vmptrst() == cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1005
KASSERT(cpudata->vmcs_refcnt == 1);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1006
cpudata->vmcs_refcnt--;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1008
vmx_vmclear(&cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1017
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1025
cpudata->nmi_window_exit = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1028
cpudata->int_window_exit = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1037
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1044
cpudata->nmi_window_exit = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1047
cpudata->int_window_exit = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1090
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1136
cpudata->evt_pending = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1256
vmx_inkernel_exec_cpuid(struct vmx_cpudata *cpudata, uint64_t eax, uint64_t ecx)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1261
cpudata->gprs[NVMM_X64_GPR_RAX] = descs[0];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1262
cpudata->gprs[NVMM_X64_GPR_RBX] = descs[1];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1263
cpudata->gprs[NVMM_X64_GPR_RCX] = descs[2];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1264
cpudata->gprs[NVMM_X64_GPR_RDX] = descs[3];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1271
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1294
vmx_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1299
vmx_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1304
vmx_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1314
cpudata->gprs[NVMM_X64_GPR_RAX] = vmx_cpuid_max_basic;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1317
cpudata->gprs[NVMM_X64_GPR_RAX] &= nvmm_cpuid_00000001.eax;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1319
cpudata->gprs[NVMM_X64_GPR_RBX] &= ~CPUID_LOCAL_APIC_ID;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1320
cpudata->gprs[NVMM_X64_GPR_RBX] |= __SHIFTIN(vcpu->cpuid,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1323
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_00000001.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1324
cpudata->gprs[NVMM_X64_GPR_RCX] |= CPUID2_RAZ;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1326
cpudata->gprs[NVMM_X64_GPR_RCX] |= CPUID2_PCID;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1329
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_00000001.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1334
cpudata->gprs[NVMM_X64_GPR_RCX] &= ~CPUID2_OSXSAVE;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1340
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1341
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1342
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1343
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1349
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1350
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1351
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1352
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1357
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1358
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_00000007.ebx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1359
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_00000007.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1360
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_00000007.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1362
cpudata->gprs[NVMM_X64_GPR_RBX] |= CPUID_SEF_INVPCID;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1366
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1367
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1368
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1369
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1375
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1376
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1377
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1378
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1381
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1382
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1383
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1384
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1389
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1390
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1391
cpudata->gprs[NVMM_X64_GPR_RCX] =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1394
cpudata->gprs[NVMM_X64_GPR_RDX] = vcpu->cpuid;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1398
cpudata->gprs[NVMM_X64_GPR_RAX] = ilog2(ncpus);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1399
cpudata->gprs[NVMM_X64_GPR_RBX] = ncpus;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1400
cpudata->gprs[NVMM_X64_GPR_RCX] =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1403
cpudata->gprs[NVMM_X64_GPR_RDX] = vcpu->cpuid;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1406
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1407
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1408
cpudata->gprs[NVMM_X64_GPR_RCX] = 0; /* LVLTYPE_INVAL */
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1409
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1414
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1415
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1416
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1417
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1420
if (cpudata->xcr0_mask == 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1421
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1422
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1423
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1424
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1429
cpudata->gprs[NVMM_X64_GPR_RAX] =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1430
cpudata->xcr0_mask & 0xFFFFFFFF;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1431
cpudata->gprs[NVMM_X64_GPR_RBX] =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1432
nvmm_x86_xsave_size(cpudata->gxcr0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1433
cpudata->gprs[NVMM_X64_GPR_RCX] =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1434
nvmm_x86_xsave_size(cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1435
cpudata->gprs[NVMM_X64_GPR_RDX] =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1436
cpudata->xcr0_mask >> 32;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1439
cpudata->gprs[NVMM_X64_GPR_RAX] &=
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1442
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1443
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1444
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1454
if ((cpudata->xcr0_mask & __BIT(ecx)) == 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1455
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1456
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1457
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1458
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1462
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1463
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1464
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1465
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1472
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1473
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1474
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1475
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1481
cpudata->gprs[NVMM_X64_GPR_RAX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1482
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1483
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1484
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1494
cpudata->gprs[NVMM_X64_GPR_RAX] = VMX_CPUID_MAX_HYPERVISOR;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1495
cpudata->gprs[NVMM_X64_GPR_RBX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1496
cpudata->gprs[NVMM_X64_GPR_RCX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1497
cpudata->gprs[NVMM_X64_GPR_RDX] = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1498
memcpy(&cpudata->gprs[NVMM_X64_GPR_RBX], "___ ", 4);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1499
memcpy(&cpudata->gprs[NVMM_X64_GPR_RCX], "NVMM", 4);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1500
memcpy(&cpudata->gprs[NVMM_X64_GPR_RDX], " ___", 4);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1507
cpudata->gprs[NVMM_X64_GPR_RAX] = vmx_cpuid_max_extended;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1510
cpudata->gprs[NVMM_X64_GPR_RAX] &= nvmm_cpuid_80000001.eax;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1511
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000001.ebx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1512
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000001.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1513
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000001.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1522
cpudata->gprs[NVMM_X64_GPR_RAX] &= nvmm_cpuid_80000007.eax;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1523
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000007.ebx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1524
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000007.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1525
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000007.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1528
cpudata->gprs[NVMM_X64_GPR_RAX] &= nvmm_cpuid_80000008.eax;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1529
cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000008.ebx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1530
cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000008.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1531
cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000008.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1554
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1559
eax = cpudata->gprs[NVMM_X64_GPR_RAX];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1560
ecx = cpudata->gprs[NVMM_X64_GPR_RCX];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1561
vmx_inkernel_exec_cpuid(cpudata, eax, ecx);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1565
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1568
cpuid = &cpudata->cpuid[i];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1580
cpudata->gprs[NVMM_X64_GPR_RAX] &= ~cpuid->u.mask.del.eax;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1581
cpudata->gprs[NVMM_X64_GPR_RBX] &= ~cpuid->u.mask.del.ebx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1582
cpudata->gprs[NVMM_X64_GPR_RCX] &= ~cpuid->u.mask.del.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1583
cpudata->gprs[NVMM_X64_GPR_RDX] &= ~cpuid->u.mask.del.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1586
cpudata->gprs[NVMM_X64_GPR_RAX] |= cpuid->u.mask.set.eax;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1587
cpudata->gprs[NVMM_X64_GPR_RBX] |= cpuid->u.mask.set.ebx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1588
cpudata->gprs[NVMM_X64_GPR_RCX] |= cpuid->u.mask.set.ecx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1589
cpudata->gprs[NVMM_X64_GPR_RDX] |= cpuid->u.mask.set.edx;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1602
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1605
if (cpudata->int_window_exit) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1644
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1659
fakecr0 = cpudata->gprs[gpr];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1700
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1713
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1727
gpr = cpudata->gprs[gpr];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1740
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1752
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1770
cpudata->gcr8 = vmx_vmread(VMCS_GUEST_RSP);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1772
cpudata->gcr8 = cpudata->gprs[gpr];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1774
if (cpudata->tpr.exit_changed) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1779
vmx_vmwrite(VMCS_GUEST_RSP, cpudata->gcr8);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1781
cpudata->gprs[gpr] = cpudata->gcr8;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1894
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1901
cpudata->gprs[NVMM_X64_GPR_RAX] = (val & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1902
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1906
val = cpudata->gmsr_misc_enable;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1907
cpudata->gprs[NVMM_X64_GPR_RAX] = (val & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1908
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1925
cpudata->gprs[NVMM_X64_GPR_RAX] = (val & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1926
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1933
cpudata->gprs[NVMM_X64_GPR_RAX] = (val & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1934
cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1939
cpudata->gtsc = exit->u.wrmsr.val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1940
cpudata->gtsc_want_update = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1977
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1981
exit->u.rdmsr.msr = (cpudata->gprs[NVMM_X64_GPR_RCX] & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
1999
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2002
rdx = cpudata->gprs[NVMM_X64_GPR_RDX];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2003
rax = cpudata->gprs[NVMM_X64_GPR_RAX];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2006
exit->u.wrmsr.msr = (cpudata->gprs[NVMM_X64_GPR_RCX] & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2025
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2030
val = (cpudata->gprs[NVMM_X64_GPR_RDX] << 32) |
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2031
(cpudata->gprs[NVMM_X64_GPR_RAX] & 0xFFFFFFFF);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2033
if (__predict_false(cpudata->gprs[NVMM_X64_GPR_RCX] != 0)) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2035
} else if (__predict_false(cpudata->xcr0_mask == 0)) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2038
cpudata->xcr0_mask))) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2042
KASSERTMSG(nvmm_x86_xcr0_valid(val, cpudata->xcr0_mask),
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2044
val, cpudata->xcr0_mask, cpudata->gxcr0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2045
cpudata->gxcr0 = val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2088
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2099
KASSERTMSG((cpudata->gxcr0 & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2101
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2102
KASSERTMSG((cpudata->gfpu.xsh_xstate_bv & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2104
cpudata->gfpu.xsh_xstate_bv, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2122
if (cpudata->xcr0_mask == 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2124
fpu_area_restore(&cpudata->gfpu, XCR0_X87|XCR0_SSE, false);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2145
cpudata->hxcr0 = rdxcr(0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2146
wrxcr(0, cpudata->xcr0_mask &
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2147
(cpudata->gfpu.xsh_xstate_bv | cpudata->gxcr0));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2154
fpu_area_restore(&cpudata->gfpu, cpudata->xcr0_mask, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2161
if (__predict_false(cpudata->gxcr0 != (cpudata->xcr0_mask &
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2162
(cpudata->gfpu.xsh_xstate_bv | cpudata->gxcr0))))
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2163
wrxcr(0, cpudata->xcr0_mask & cpudata->gxcr0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2169
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2178
if (cpudata->xcr0_mask == 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2180
fpu_area_save(&cpudata->gfpu, XCR0_X87|XCR0_SSE, false);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2192
cpudata->gxcr0 = rdxcr(0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2193
wrxcr(0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2200
KASSERTMSG((cpudata->gxcr0 & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2202
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2203
cpudata->gxcr0 &= cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2210
fpu_area_save(&cpudata->gfpu, cpudata->xcr0_mask, false);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2217
if (cpudata->xcr0_mask != cpudata->hxcr0)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2218
wrxcr(0, cpudata->hxcr0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2235
KASSERTMSG((cpudata->gxcr0 & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2237
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2238
KASSERTMSG((cpudata->gfpu.xsh_xstate_bv & ~cpudata->xcr0_mask) == 0,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2240
cpudata->gfpu.xsh_xstate_bv, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2246
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2252
ldr0(cpudata->drs[NVMM_X64_DR_DR0]);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2253
ldr1(cpudata->drs[NVMM_X64_DR_DR1]);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2254
ldr2(cpudata->drs[NVMM_X64_DR_DR2]);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2255
ldr3(cpudata->drs[NVMM_X64_DR_DR3]);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2256
ldr6(cpudata->drs[NVMM_X64_DR_DR6]);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2262
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2264
cpudata->drs[NVMM_X64_DR_DR0] = rdr0();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2265
cpudata->drs[NVMM_X64_DR_DR1] = rdr1();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2266
cpudata->drs[NVMM_X64_DR_DR2] = rdr2();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2267
cpudata->drs[NVMM_X64_DR_DR3] = rdr3();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2268
cpudata->drs[NVMM_X64_DR_DR6] = rdr6();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2276
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2284
cpudata->kernelgsbase = rdmsr(MSR_KERNELGSBASE);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2290
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2292
wrmsr(MSR_STAR, cpudata->star);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2293
wrmsr(MSR_LSTAR, cpudata->lstar);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2294
wrmsr(MSR_CSTAR, cpudata->cstar);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2295
wrmsr(MSR_SFMASK, cpudata->sfmask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2296
wrmsr(MSR_KERNELGSBASE, cpudata->kernelgsbase);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2312
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2315
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2322
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2325
if (__predict_true(!kcpuset_isset(cpudata->htlb_want_flush, hcpu))) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2332
kcpuset_clear(cpudata->htlb_want_flush, hcpu);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2336
vmx_htlb_flush(struct vmx_machdata *machdata, struct vmx_cpudata *cpudata)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2342
if (__predict_true(machgen == cpudata->vcpu_htlb_gen)) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2346
kcpuset_copy(cpudata->htlb_want_flush, kcpuset_running);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2356
vmx_htlb_flush_ack(struct vmx_cpudata *cpudata, uint64_t machgen)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2358
cpudata->vcpu_htlb_gen = machgen;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2359
kcpuset_clear(cpudata->htlb_want_flush, cpu_number());
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2363
vmx_exit_evt(struct vmx_cpudata *cpudata)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2367
cpudata->evt_pending = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2386
cpudata->evt_pending = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2395
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2416
launched = cpudata->vmcs_launched;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2426
cpudata->gtsc_want_update = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2434
if (cpudata->gtlb_want_flush) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2435
vpid_desc.vpid = cpudata->asid;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2438
cpudata->gtlb_want_flush = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2441
if (__predict_false(cpudata->gtsc_want_update)) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2442
vmx_vmwrite(VMCS_TSC_OFFSET, cpudata->gtsc - rdtsc());
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2443
cpudata->gtsc_want_update = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2448
machgen = vmx_htlb_flush(machdata, cpudata);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2449
lcr2(cpudata->gcr2);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2451
ret = vmx_vmresume(cpudata->gprs);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2453
ret = vmx_vmlaunch(cpudata->gprs);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2455
cpudata->gcr2 = rcr2();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2456
vmx_htlb_flush_ack(cpudata, machgen);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2470
vmx_exit_evt(cpudata);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2553
cpudata->vmcs_launched = launched;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2555
cpudata->gtsc = vmx_vmread(VMCS_TSC_OFFSET) + rdtsc();
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2561
exit->exitstate.cr8 = cpudata->gcr8;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2565
exit->exitstate.int_window_exiting = cpudata->int_window_exit;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2566
exit->exitstate.nmi_window_exiting = cpudata->nmi_window_exit;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2567
exit->exitstate.evt_pending = cpudata->evt_pending;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2753
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2763
cpudata->gtlb_want_flush = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2779
CTASSERT(sizeof(cpudata->gprs) == sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2781
memcpy(cpudata->gprs, state->gprs, sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2801
cpudata->gcr2 = state->crs[NVMM_X64_CR_CR2];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2810
cpudata->gcr8 = state->crs[NVMM_X64_CR_CR8];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2812
if (cpudata->xcr0_mask != 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2815
cpudata->gxcr0 = nvmm_x86_munge_xcr0(xcr0,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2816
cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2820
CTASSERT(sizeof(cpudata->drs) == sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2822
memcpy(cpudata->drs, state->drs, sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2824
cpudata->drs[NVMM_X64_DR_DR6] &= 0xFFFFFFFF;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2825
vmx_vmwrite(VMCS_GUEST_DR7, cpudata->drs[NVMM_X64_DR_DR7]);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2829
cpudata->gmsr[VMX_MSRLIST_STAR].val =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2831
cpudata->gmsr[VMX_MSRLIST_LSTAR].val =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2833
cpudata->gmsr[VMX_MSRLIST_CSTAR].val =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2835
cpudata->gmsr[VMX_MSRLIST_SFMASK].val =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2837
cpudata->gmsr[VMX_MSRLIST_KERNELGSBASE].val =
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2851
cpudata->gtsc = state->msrs[NVMM_X64_MSR_TSC];
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2852
cpudata->gtsc_want_update = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2885
CTASSERT(sizeof(cpudata->gfpu.xsh_fxsave) == sizeof(state->fpu));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2887
memcpy(cpudata->gfpu.xsh_fxsave, &state->fpu,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2890
fpustate = (struct fxsave *)cpudata->gfpu.xsh_fxsave;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2894
if (cpudata->xcr0_mask != 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2896
cpudata->gfpu.xsh_xstate_bv = cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2915
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2935
CTASSERT(sizeof(cpudata->gprs) == sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2937
memcpy(state->gprs, cpudata->gprs, sizeof(state->gprs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2948
state->crs[NVMM_X64_CR_CR2] = cpudata->gcr2;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2951
state->crs[NVMM_X64_CR_CR8] = cpudata->gcr8;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2952
state->crs[NVMM_X64_CR_XCR0] = cpudata->gxcr0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2958
CTASSERT(sizeof(cpudata->drs) == sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2960
memcpy(state->drs, cpudata->drs, sizeof(state->drs));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2967
cpudata->gmsr[VMX_MSRLIST_STAR].val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2969
cpudata->gmsr[VMX_MSRLIST_LSTAR].val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2971
cpudata->gmsr[VMX_MSRLIST_CSTAR].val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2973
cpudata->gmsr[VMX_MSRLIST_SFMASK].val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2975
cpudata->gmsr[VMX_MSRLIST_KERNELGSBASE].val;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2986
state->msrs[NVMM_X64_MSR_TSC] = cpudata->gtsc;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2993
state->intr.int_window_exiting = cpudata->int_window_exit;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2994
state->intr.nmi_window_exiting = cpudata->nmi_window_exit;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2995
state->intr.evt_pending = cpudata->evt_pending;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
2998
CTASSERT(sizeof(cpudata->gfpu.xsh_fxsave) == sizeof(state->fpu));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3000
memcpy(&state->fpu, cpudata->gfpu.xsh_fxsave,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3034
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3047
cpudata->asid = i;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3079
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3080
struct vmcs *vmcs = cpudata->vmcs;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3081
struct msr_entry *gmsr = cpudata->gmsr;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3104
memset(cpudata->msrbm, 0xFF, MSRBM_SIZE);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3105
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_EFER, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3106
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_STAR, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3107
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_LSTAR, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3108
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_CSTAR, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3109
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_SFMASK, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3110
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_KERNELGSBASE, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3111
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_CS, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3112
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_ESP, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3113
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_EIP, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3114
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_FSBASE, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3115
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_GSBASE, true, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3116
vmx_vcpu_msr_allow(cpudata->msrbm, MSR_TSC, true, false);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3117
vmx_vmwrite(VMCS_MSR_BITMAP, (uint64_t)cpudata->msrbm_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3135
vmx_vmwrite(VMCS_ENTRY_MSR_LOAD_ADDRESS, cpudata->gmsr_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3136
vmx_vmwrite(VMCS_EXIT_MSR_STORE_ADDRESS, cpudata->gmsr_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3174
cpudata->gmsr_misc_enable = rdmsr(MSR_MISC_ENABLE);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3175
cpudata->gmsr_misc_enable &=
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3177
cpudata->gmsr_misc_enable |=
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3181
cpudata->xcr0_mask = vmx_xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3182
KASSERTMSG(nvmm_x86_xcr0_valid(cpudata->xcr0_mask, vmx_xcr0_mask),
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3184
cpudata->xcr0_mask, vmx_xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3185
cpudata->gfpu.xsh_xstate_bv = cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3186
cpudata->gfpu.xsh_xcomp_bv = 0;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3189
cpudata->star = rdmsr(MSR_STAR);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3190
cpudata->lstar = rdmsr(MSR_LSTAR);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3191
cpudata->cstar = rdmsr(MSR_CSTAR);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3192
cpudata->sfmask = rdmsr(MSR_SFMASK);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3208
struct vmx_cpudata *cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3222
cpudata_size = MAX(sizeof(*cpudata),
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3226
cpudata = (struct vmx_cpudata *)uvm_km_alloc(kernel_map,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3229
vcpu->cpudata = cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3232
error = vmx_memalloc(&cpudata->vmcs_pa, (vaddr_t *)&cpudata->vmcs,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3238
error = vmx_memalloc(&cpudata->msrbm_pa, (vaddr_t *)&cpudata->msrbm,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3244
error = vmx_memalloc(&cpudata->gmsr_pa, (vaddr_t *)&cpudata->gmsr, 1);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3248
kcpuset_create(&cpudata->htlb_want_flush, true);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3256
if (cpudata->vmcs_pa) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3257
vmx_memfree(cpudata->vmcs_pa, (vaddr_t)cpudata->vmcs,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3260
if (cpudata->msrbm_pa) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3261
vmx_memfree(cpudata->msrbm_pa, (vaddr_t)cpudata->msrbm,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3264
if (cpudata->gmsr_pa) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3265
vmx_memfree(cpudata->gmsr_pa, (vaddr_t)cpudata->gmsr, 1);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3268
kmem_free(cpudata, sizeof(*cpudata));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3275
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3281
kcpuset_destroy(cpudata->htlb_want_flush);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3283
vmx_memfree(cpudata->vmcs_pa, (vaddr_t)cpudata->vmcs, VMCS_NPAGES);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3284
vmx_memfree(cpudata->msrbm_pa, (vaddr_t)cpudata->msrbm, MSRBM_NPAGES);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3285
vmx_memfree(cpudata->gmsr_pa, (vaddr_t)cpudata->gmsr, 1);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3286
uvm_km_free(kernel_map, (vaddr_t)cpudata,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3287
roundup(sizeof(*cpudata), PAGE_SIZE), UVM_KMF_WIRED);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3293
vmx_vcpu_configure_cpuid(struct vmx_cpudata *cpudata, void *data)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3312
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3315
if (cpudata->cpuid[i].leaf == cpuid->leaf) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3316
cpudata->cpuidpresent[i] = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3324
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3327
if (cpudata->cpuid[i].leaf == cpuid->leaf) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3328
memcpy(&cpudata->cpuid[i], cpuid,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3336
if (!cpudata->cpuidpresent[i]) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3337
cpudata->cpuidpresent[i] = true;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3338
memcpy(&cpudata->cpuid[i], cpuid,
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3348
vmx_vcpu_configure_tpr(struct vmx_cpudata *cpudata, void *data)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3352
memcpy(&cpudata->tpr, tpr, sizeof(*tpr));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3357
vmx_vcpu_configure_xcr0_mask(struct vmx_cpudata *cpudata, void *data)
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3388
memset(&cpudata->gfpu, 0, nvmm_x86_xsave_size(vmx_xcr0_mask));
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3395
cpudata->xcr0_mask = *xcr0_maskp;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3396
cpudata->gxcr0 &= cpudata->xcr0_mask;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3397
KASSERTMSG((cpudata->xcr0_mask == 0 ||
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3398
nvmm_x86_xcr0_valid(cpudata->gxcr0, cpudata->xcr0_mask)),
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3400
cpudata->gxcr0, cpudata->xcr0_mask);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3407
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3411
return vmx_vcpu_configure_cpuid(cpudata, data);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3413
return vmx_vcpu_configure_tpr(cpudata, data);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3415
return vmx_vcpu_configure_xcr0_mask(cpudata, data);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3424
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3427
KASSERT(cpudata->vmcs_refcnt == 0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3429
vmcs_ci = cpudata->vmcs_ci;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3430
cpudata->vmcs_ci = (void *)0x00FFFFFFFFFFFFFF; /* clobber */
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3437
vmx_vmclear_remote(vmcs_ci, cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3440
vmx_vmclear(&cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3448
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3450
KASSERT(cpudata->vmcs_refcnt == 0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
3453
cpudata->vmcs_ci = NULL;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
950
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
953
cpudata->vmcs_refcnt++;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
954
if (cpudata->vmcs_refcnt > 1) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
956
KASSERT(vmx_vmptrst() == cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
960
vmcs_ci = cpudata->vmcs_ci;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
961
cpudata->vmcs_ci = (void *)0x00FFFFFFFFFFFFFF; /* clobber */
sys/dev/nvmm/x86/nvmm_x86_vmx.c
967
vmx_vmclear(&cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
968
cpudata->vmcs_launched = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
971
vmx_vmclear_remote(vmcs_ci, cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
972
cpudata->vmcs_launched = false;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
977
vmx_vmptrld(&cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
983
struct vmx_cpudata *cpudata = vcpu->cpudata;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
986
KASSERT(vmx_vmptrst() == cpudata->vmcs_pa);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
987
KASSERT(cpudata->vmcs_refcnt > 0);
sys/dev/nvmm/x86/nvmm_x86_vmx.c
988
cpudata->vmcs_refcnt--;
sys/dev/nvmm/x86/nvmm_x86_vmx.c
990
if (cpudata->vmcs_refcnt > 0) {
sys/dev/nvmm/x86/nvmm_x86_vmx.c
994
cpudata->vmcs_ci = curcpu();