Lines Matching refs:cpudata
671 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_event_waitexit_enable() local
672 struct vmcb *vmcb = cpudata->vmcb; in svm_event_waitexit_enable()
676 cpudata->nmi_window_exit = true; in svm_event_waitexit_enable()
681 cpudata->int_window_exit = true; in svm_event_waitexit_enable()
690 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_event_waitexit_disable() local
691 struct vmcb *vmcb = cpudata->vmcb; in svm_event_waitexit_disable()
695 cpudata->nmi_window_exit = false; in svm_event_waitexit_disable()
700 cpudata->int_window_exit = false; in svm_event_waitexit_disable()
742 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_inject() local
743 struct vmcb *vmcb = cpudata->vmcb; in svm_vcpu_inject()
785 cpudata->evt_pending = true; in svm_vcpu_inject()
848 svm_inkernel_exec_cpuid(struct svm_cpudata *cpudata, uint64_t eax, uint64_t ecx) in svm_inkernel_exec_cpuid() argument
853 cpudata->vmcb->state.rax = descs[0]; in svm_inkernel_exec_cpuid()
854 cpudata->gprs[NVMM_X64_GPR_RBX] = descs[1]; in svm_inkernel_exec_cpuid()
855 cpudata->gprs[NVMM_X64_GPR_RCX] = descs[2]; in svm_inkernel_exec_cpuid()
856 cpudata->gprs[NVMM_X64_GPR_RDX] = descs[3]; in svm_inkernel_exec_cpuid()
862 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_inkernel_handle_cpuid() local
868 svm_inkernel_exec_cpuid(cpudata, eax, ecx); in svm_inkernel_handle_cpuid()
873 svm_inkernel_exec_cpuid(cpudata, eax, ecx); in svm_inkernel_handle_cpuid()
878 svm_inkernel_exec_cpuid(cpudata, eax, ecx); in svm_inkernel_handle_cpuid()
884 cpudata->vmcb->state.rax = svm_cpuid_max_basic; in svm_inkernel_handle_cpuid()
887 cpudata->vmcb->state.rax &= nvmm_cpuid_00000001.eax; in svm_inkernel_handle_cpuid()
889 cpudata->gprs[NVMM_X64_GPR_RBX] &= ~CPUID_LOCAL_APIC_ID; in svm_inkernel_handle_cpuid()
890 cpudata->gprs[NVMM_X64_GPR_RBX] |= __SHIFTIN(vcpu->cpuid, in svm_inkernel_handle_cpuid()
893 cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_00000001.ecx; in svm_inkernel_handle_cpuid()
894 cpudata->gprs[NVMM_X64_GPR_RCX] |= CPUID2_RAZ; in svm_inkernel_handle_cpuid()
896 cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_00000001.edx; in svm_inkernel_handle_cpuid()
899 cr4 = cpudata->vmcb->state.cr4; in svm_inkernel_handle_cpuid()
901 cpudata->gprs[NVMM_X64_GPR_RCX] &= ~CPUID2_OSXSAVE; in svm_inkernel_handle_cpuid()
909 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
910 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
911 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
912 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
917 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
918 cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_00000007.ebx; in svm_inkernel_handle_cpuid()
919 cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_00000007.ecx; in svm_inkernel_handle_cpuid()
920 cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_00000007.edx; in svm_inkernel_handle_cpuid()
923 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
924 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
925 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
926 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
935 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
936 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
937 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
938 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
946 cpudata->vmcb->state.rax = svm_xcr0_mask & 0xFFFFFFFF; in svm_inkernel_handle_cpuid()
947 if (cpudata->gxcr0 & XCR0_SSE) { in svm_inkernel_handle_cpuid()
948 cpudata->gprs[NVMM_X64_GPR_RBX] = sizeof(struct fxsave); in svm_inkernel_handle_cpuid()
950 cpudata->gprs[NVMM_X64_GPR_RBX] = sizeof(struct save87); in svm_inkernel_handle_cpuid()
952 cpudata->gprs[NVMM_X64_GPR_RBX] += 64; /* XSAVE header */ in svm_inkernel_handle_cpuid()
953 cpudata->gprs[NVMM_X64_GPR_RCX] = sizeof(struct fxsave) + 64; in svm_inkernel_handle_cpuid()
954 cpudata->gprs[NVMM_X64_GPR_RDX] = svm_xcr0_mask >> 32; in svm_inkernel_handle_cpuid()
957 cpudata->vmcb->state.rax &= in svm_inkernel_handle_cpuid()
960 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
961 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
962 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
965 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
966 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
967 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
968 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
974 cpudata->vmcb->state.rax = SVM_CPUID_MAX_HYPERVISOR; in svm_inkernel_handle_cpuid()
975 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
976 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
977 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
978 memcpy(&cpudata->gprs[NVMM_X64_GPR_RBX], "___ ", 4); in svm_inkernel_handle_cpuid()
979 memcpy(&cpudata->gprs[NVMM_X64_GPR_RCX], "NVMM", 4); in svm_inkernel_handle_cpuid()
980 memcpy(&cpudata->gprs[NVMM_X64_GPR_RDX], " ___", 4); in svm_inkernel_handle_cpuid()
984 cpudata->vmcb->state.rax = svm_cpuid_max_extended; in svm_inkernel_handle_cpuid()
987 cpudata->vmcb->state.rax &= nvmm_cpuid_80000001.eax; in svm_inkernel_handle_cpuid()
988 cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000001.ebx; in svm_inkernel_handle_cpuid()
989 cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000001.ecx; in svm_inkernel_handle_cpuid()
990 cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000001.edx; in svm_inkernel_handle_cpuid()
999 cpudata->vmcb->state.rax &= nvmm_cpuid_80000007.eax; in svm_inkernel_handle_cpuid()
1000 cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000007.ebx; in svm_inkernel_handle_cpuid()
1001 cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000007.ecx; in svm_inkernel_handle_cpuid()
1002 cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000007.edx; in svm_inkernel_handle_cpuid()
1005 cpudata->vmcb->state.rax &= nvmm_cpuid_80000008.eax; in svm_inkernel_handle_cpuid()
1006 cpudata->gprs[NVMM_X64_GPR_RBX] &= nvmm_cpuid_80000008.ebx; in svm_inkernel_handle_cpuid()
1007 cpudata->gprs[NVMM_X64_GPR_RCX] &= nvmm_cpuid_80000008.ecx; in svm_inkernel_handle_cpuid()
1008 cpudata->gprs[NVMM_X64_GPR_RDX] &= nvmm_cpuid_80000008.edx; in svm_inkernel_handle_cpuid()
1026 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
1027 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
1028 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
1029 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
1036 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
1037 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
1038 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
1039 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
1045 cpudata->vmcb->state.rax = 0; in svm_inkernel_handle_cpuid()
1046 cpudata->gprs[NVMM_X64_GPR_RBX] = 0; in svm_inkernel_handle_cpuid()
1047 cpudata->gprs[NVMM_X64_GPR_RCX] = 0; in svm_inkernel_handle_cpuid()
1048 cpudata->gprs[NVMM_X64_GPR_RDX] = 0; in svm_inkernel_handle_cpuid()
1067 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_cpuid() local
1072 eax = cpudata->vmcb->state.rax; in svm_exit_cpuid()
1073 ecx = cpudata->gprs[NVMM_X64_GPR_RCX]; in svm_exit_cpuid()
1074 svm_inkernel_exec_cpuid(cpudata, eax, ecx); in svm_exit_cpuid()
1078 if (!cpudata->cpuidpresent[i]) { in svm_exit_cpuid()
1081 cpuid = &cpudata->cpuid[i]; in svm_exit_cpuid()
1087 svm_exit_insn(cpudata->vmcb, exit, NVMM_VCPU_EXIT_CPUID); in svm_exit_cpuid()
1093 cpudata->vmcb->state.rax &= ~cpuid->u.mask.del.eax; in svm_exit_cpuid()
1094 cpudata->gprs[NVMM_X64_GPR_RBX] &= ~cpuid->u.mask.del.ebx; in svm_exit_cpuid()
1095 cpudata->gprs[NVMM_X64_GPR_RCX] &= ~cpuid->u.mask.del.ecx; in svm_exit_cpuid()
1096 cpudata->gprs[NVMM_X64_GPR_RDX] &= ~cpuid->u.mask.del.edx; in svm_exit_cpuid()
1099 cpudata->vmcb->state.rax |= cpuid->u.mask.set.eax; in svm_exit_cpuid()
1100 cpudata->gprs[NVMM_X64_GPR_RBX] |= cpuid->u.mask.set.ebx; in svm_exit_cpuid()
1101 cpudata->gprs[NVMM_X64_GPR_RCX] |= cpuid->u.mask.set.ecx; in svm_exit_cpuid()
1102 cpudata->gprs[NVMM_X64_GPR_RDX] |= cpuid->u.mask.set.edx; in svm_exit_cpuid()
1107 svm_inkernel_advance(cpudata->vmcb); in svm_exit_cpuid()
1115 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_hlt() local
1116 struct vmcb *vmcb = cpudata->vmcb; in svm_exit_hlt()
1118 if (cpudata->int_window_exit && (vmcb->state.rflags & PSL_I)) { in svm_exit_hlt()
1122 svm_inkernel_advance(cpudata->vmcb); in svm_exit_hlt()
1142 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_io() local
1143 uint64_t info = cpudata->vmcb->ctrl.exitinfo1; in svm_exit_io()
1144 uint64_t nextpc = cpudata->vmcb->ctrl.exitinfo2; in svm_exit_io()
1194 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_inkernel_handle_msr() local
1195 struct vmcb *vmcb = cpudata->vmcb; in svm_inkernel_handle_msr()
1203 cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32); in svm_inkernel_handle_msr()
1209 cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32); in svm_inkernel_handle_msr()
1217 cpudata->gprs[NVMM_X64_GPR_RDX] = (val >> 32); in svm_inkernel_handle_msr()
1227 cpudata->gtlb_want_flush = true; in svm_inkernel_handle_msr()
1234 cpudata->gtsc = exit->u.wrmsr.val; in svm_inkernel_handle_msr()
1235 cpudata->gtsc_want_update = true; in svm_inkernel_handle_msr()
1248 svm_inkernel_advance(cpudata->vmcb); in svm_inkernel_handle_msr()
1260 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_rdmsr() local
1263 exit->u.rdmsr.msr = (cpudata->gprs[NVMM_X64_GPR_RCX] & 0xFFFFFFFF); in svm_exit_rdmsr()
1264 exit->u.rdmsr.npc = cpudata->vmcb->ctrl.nrip; in svm_exit_rdmsr()
1278 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_wrmsr() local
1281 rdx = cpudata->gprs[NVMM_X64_GPR_RDX]; in svm_exit_wrmsr()
1282 rax = cpudata->vmcb->state.rax; in svm_exit_wrmsr()
1285 exit->u.wrmsr.msr = (cpudata->gprs[NVMM_X64_GPR_RCX] & 0xFFFFFFFF); in svm_exit_wrmsr()
1287 exit->u.wrmsr.npc = cpudata->vmcb->ctrl.nrip; in svm_exit_wrmsr()
1301 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_msr() local
1302 uint64_t info = cpudata->vmcb->ctrl.exitinfo1; in svm_exit_msr()
1315 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_npf() local
1316 gpaddr_t gpa = cpudata->vmcb->ctrl.exitinfo2; in svm_exit_npf()
1319 if (cpudata->vmcb->ctrl.exitinfo1 & PGEX_W) in svm_exit_npf()
1321 else if (cpudata->vmcb->ctrl.exitinfo1 & PGEX_I) in svm_exit_npf()
1326 exit->u.mem.inst_len = cpudata->vmcb->ctrl.inst_len; in svm_exit_npf()
1327 memcpy(exit->u.mem.inst_bytes, cpudata->vmcb->ctrl.inst_bytes, in svm_exit_npf()
1339 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_exit_xsetbv() local
1340 struct vmcb *vmcb = cpudata->vmcb; in svm_exit_xsetbv()
1345 val = (cpudata->gprs[NVMM_X64_GPR_RDX] << 32) | in svm_exit_xsetbv()
1348 if (__predict_false(cpudata->gprs[NVMM_X64_GPR_RCX] != 0)) { in svm_exit_xsetbv()
1358 cpudata->gxcr0 = val; in svm_exit_xsetbv()
1360 svm_inkernel_advance(cpudata->vmcb); in svm_exit_xsetbv()
1379 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_guest_fpu_enter() local
1383 fpu_area_restore(&cpudata->gfpu, svm_xcr0_mask, false); in svm_vcpu_guest_fpu_enter()
1386 cpudata->hxcr0 = rdxcr(0); in svm_vcpu_guest_fpu_enter()
1387 wrxcr(0, cpudata->gxcr0); in svm_vcpu_guest_fpu_enter()
1394 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_guest_fpu_leave() local
1397 cpudata->gxcr0 = rdxcr(0); in svm_vcpu_guest_fpu_leave()
1398 wrxcr(0, cpudata->hxcr0); in svm_vcpu_guest_fpu_leave()
1402 fpu_area_save(&cpudata->gfpu, svm_xcr0_mask, false); in svm_vcpu_guest_fpu_leave()
1409 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_guest_dbregs_enter() local
1415 ldr0(cpudata->drs[NVMM_X64_DR_DR0]); in svm_vcpu_guest_dbregs_enter()
1416 ldr1(cpudata->drs[NVMM_X64_DR_DR1]); in svm_vcpu_guest_dbregs_enter()
1417 ldr2(cpudata->drs[NVMM_X64_DR_DR2]); in svm_vcpu_guest_dbregs_enter()
1418 ldr3(cpudata->drs[NVMM_X64_DR_DR3]); in svm_vcpu_guest_dbregs_enter()
1424 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_guest_dbregs_leave() local
1426 cpudata->drs[NVMM_X64_DR_DR0] = rdr0(); in svm_vcpu_guest_dbregs_leave()
1427 cpudata->drs[NVMM_X64_DR_DR1] = rdr1(); in svm_vcpu_guest_dbregs_leave()
1428 cpudata->drs[NVMM_X64_DR_DR2] = rdr2(); in svm_vcpu_guest_dbregs_leave()
1429 cpudata->drs[NVMM_X64_DR_DR3] = rdr3(); in svm_vcpu_guest_dbregs_leave()
1437 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_guest_misc_enter() local
1439 cpudata->fsbase = rdmsr(MSR_FSBASE); in svm_vcpu_guest_misc_enter()
1440 cpudata->kernelgsbase = rdmsr(MSR_KERNELGSBASE); in svm_vcpu_guest_misc_enter()
1446 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_guest_misc_leave() local
1448 wrmsr(MSR_STAR, cpudata->star); in svm_vcpu_guest_misc_leave()
1449 wrmsr(MSR_LSTAR, cpudata->lstar); in svm_vcpu_guest_misc_leave()
1450 wrmsr(MSR_CSTAR, cpudata->cstar); in svm_vcpu_guest_misc_leave()
1451 wrmsr(MSR_SFMASK, cpudata->sfmask); in svm_vcpu_guest_misc_leave()
1452 wrmsr(MSR_FSBASE, cpudata->fsbase); in svm_vcpu_guest_misc_leave()
1453 wrmsr(MSR_KERNELGSBASE, cpudata->kernelgsbase); in svm_vcpu_guest_misc_leave()
1461 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_gtlb_catchup() local
1463 if (vcpu->hcpu_last != hcpu || cpudata->shared_asid) { in svm_gtlb_catchup()
1464 cpudata->gtlb_want_flush = true; in svm_gtlb_catchup()
1480 svm_htlb_flush(struct svm_machdata *machdata, struct svm_cpudata *cpudata) in svm_htlb_flush() argument
1482 struct vmcb *vmcb = cpudata->vmcb; in svm_htlb_flush()
1486 if (__predict_true(machgen == cpudata->vcpu_htlb_gen)) { in svm_htlb_flush()
1495 svm_htlb_flush_ack(struct svm_cpudata *cpudata, uint64_t machgen) in svm_htlb_flush_ack() argument
1497 struct vmcb *vmcb = cpudata->vmcb; in svm_htlb_flush_ack()
1500 cpudata->vcpu_htlb_gen = machgen; in svm_htlb_flush_ack()
1505 svm_exit_evt(struct svm_cpudata *cpudata, struct vmcb *vmcb) in svm_exit_evt() argument
1507 cpudata->evt_pending = false; in svm_exit_evt()
1511 cpudata->evt_pending = true; in svm_exit_evt()
1521 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_run() local
1522 struct vmcb *vmcb = cpudata->vmcb; in svm_vcpu_run()
1541 cpudata->gtsc_want_update = true; in svm_vcpu_run()
1548 if (cpudata->gtlb_want_flush) { in svm_vcpu_run()
1554 if (__predict_false(cpudata->gtsc_want_update)) { in svm_vcpu_run()
1555 vmcb->ctrl.tsc_offset = cpudata->gtsc - rdtsc(); in svm_vcpu_run()
1561 machgen = svm_htlb_flush(machdata, cpudata); in svm_vcpu_run()
1562 svm_vmrun(cpudata->vmcb_pa, cpudata->gprs); in svm_vcpu_run()
1563 svm_htlb_flush_ack(cpudata, machgen); in svm_vcpu_run()
1570 cpudata->gtlb_want_flush = false; in svm_vcpu_run()
1571 cpudata->gtsc_want_update = false; in svm_vcpu_run()
1574 svm_exit_evt(cpudata, vmcb); in svm_vcpu_run()
1651 cpudata->gtsc = rdtsc() + vmcb->ctrl.tsc_offset; in svm_vcpu_run()
1662 exit->exitstate.int_window_exiting = cpudata->int_window_exit; in svm_vcpu_run()
1663 exit->exitstate.nmi_window_exiting = cpudata->nmi_window_exit; in svm_vcpu_run()
1664 exit->exitstate.evt_pending = cpudata->evt_pending; in svm_vcpu_run()
1832 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_setstate() local
1833 struct vmcb *vmcb = cpudata->vmcb; in svm_vcpu_setstate()
1840 cpudata->gtlb_want_flush = true; in svm_vcpu_setstate()
1868 CTASSERT(sizeof(cpudata->gprs) == sizeof(state->gprs)); in svm_vcpu_setstate()
1870 memcpy(cpudata->gprs, state->gprs, sizeof(state->gprs)); in svm_vcpu_setstate()
1891 cpudata->gxcr0 = state->crs[NVMM_X64_CR_XCR0]; in svm_vcpu_setstate()
1892 cpudata->gxcr0 &= svm_xcr0_mask; in svm_vcpu_setstate()
1893 cpudata->gxcr0 |= XCR0_X87; in svm_vcpu_setstate()
1897 CTASSERT(sizeof(cpudata->drs) == sizeof(state->drs)); in svm_vcpu_setstate()
1899 memcpy(cpudata->drs, state->drs, sizeof(state->drs)); in svm_vcpu_setstate()
1924 cpudata->gtsc = state->msrs[NVMM_X64_MSR_TSC]; in svm_vcpu_setstate()
1925 cpudata->gtsc_want_update = true; in svm_vcpu_setstate()
1948 CTASSERT(sizeof(cpudata->gfpu.xsh_fxsave) == sizeof(state->fpu)); in svm_vcpu_setstate()
1950 memcpy(cpudata->gfpu.xsh_fxsave, &state->fpu, in svm_vcpu_setstate()
1953 fpustate = (struct fxsave *)cpudata->gfpu.xsh_fxsave; in svm_vcpu_setstate()
1959 cpudata->gfpu.xsh_xstate_bv = svm_xcr0_mask; in svm_vcpu_setstate()
1974 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_getstate() local
1975 struct vmcb *vmcb = cpudata->vmcb; in svm_vcpu_getstate()
2005 CTASSERT(sizeof(cpudata->gprs) == sizeof(state->gprs)); in svm_vcpu_getstate()
2007 memcpy(state->gprs, cpudata->gprs, sizeof(state->gprs)); in svm_vcpu_getstate()
2022 state->crs[NVMM_X64_CR_XCR0] = cpudata->gxcr0; in svm_vcpu_getstate()
2025 CTASSERT(sizeof(cpudata->drs) == sizeof(state->drs)); in svm_vcpu_getstate()
2027 memcpy(state->drs, cpudata->drs, sizeof(state->drs)); in svm_vcpu_getstate()
2048 state->msrs[NVMM_X64_MSR_TSC] = cpudata->gtsc; in svm_vcpu_getstate()
2057 state->intr.int_window_exiting = cpudata->int_window_exit; in svm_vcpu_getstate()
2058 state->intr.nmi_window_exiting = cpudata->nmi_window_exit; in svm_vcpu_getstate()
2059 state->intr.evt_pending = cpudata->evt_pending; in svm_vcpu_getstate()
2062 CTASSERT(sizeof(cpudata->gfpu.xsh_fxsave) == sizeof(state->fpu)); in svm_vcpu_getstate()
2064 memcpy(&state->fpu, cpudata->gfpu.xsh_fxsave, in svm_vcpu_getstate()
2092 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_asid_alloc() local
2093 struct vmcb *vmcb = cpudata->vmcb; in svm_asid_alloc()
2116 cpudata->shared_asid = true; in svm_asid_alloc()
2124 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_asid_free() local
2125 struct vmcb *vmcb = cpudata->vmcb; in svm_asid_free()
2128 if (cpudata->shared_asid) { in svm_asid_free()
2143 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_init() local
2144 struct vmcb *vmcb = cpudata->vmcb; in svm_vcpu_init()
2226 memset(cpudata->iobm, 0xFF, IOBM_SIZE); in svm_vcpu_init()
2227 vmcb->ctrl.iopm_base_pa = cpudata->iobm_pa; in svm_vcpu_init()
2230 memset(cpudata->msrbm, 0xFF, MSRBM_SIZE); in svm_vcpu_init()
2231 svm_vcpu_msr_allow(cpudata->msrbm, MSR_STAR, true, true); in svm_vcpu_init()
2232 svm_vcpu_msr_allow(cpudata->msrbm, MSR_LSTAR, true, true); in svm_vcpu_init()
2233 svm_vcpu_msr_allow(cpudata->msrbm, MSR_CSTAR, true, true); in svm_vcpu_init()
2234 svm_vcpu_msr_allow(cpudata->msrbm, MSR_SFMASK, true, true); in svm_vcpu_init()
2235 svm_vcpu_msr_allow(cpudata->msrbm, MSR_KERNELGSBASE, true, true); in svm_vcpu_init()
2236 svm_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_CS, true, true); in svm_vcpu_init()
2237 svm_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_ESP, true, true); in svm_vcpu_init()
2238 svm_vcpu_msr_allow(cpudata->msrbm, MSR_SYSENTER_EIP, true, true); in svm_vcpu_init()
2239 svm_vcpu_msr_allow(cpudata->msrbm, MSR_FSBASE, true, true); in svm_vcpu_init()
2240 svm_vcpu_msr_allow(cpudata->msrbm, MSR_GSBASE, true, true); in svm_vcpu_init()
2241 svm_vcpu_msr_allow(cpudata->msrbm, MSR_CR_PAT, true, true); in svm_vcpu_init()
2242 svm_vcpu_msr_allow(cpudata->msrbm, MSR_TSC, true, false); in svm_vcpu_init()
2243 vmcb->ctrl.msrpm_base_pa = cpudata->msrbm_pa; in svm_vcpu_init()
2256 cpudata->gfpu.xsh_xstate_bv = svm_xcr0_mask; in svm_vcpu_init()
2257 cpudata->gfpu.xsh_xcomp_bv = 0; in svm_vcpu_init()
2260 cpudata->star = rdmsr(MSR_STAR); in svm_vcpu_init()
2261 cpudata->lstar = rdmsr(MSR_LSTAR); in svm_vcpu_init()
2262 cpudata->cstar = rdmsr(MSR_CSTAR); in svm_vcpu_init()
2263 cpudata->sfmask = rdmsr(MSR_SFMASK); in svm_vcpu_init()
2276 struct svm_cpudata *cpudata; in svm_vcpu_create() local
2280 cpudata = (struct svm_cpudata *)uvm_km_alloc(kernel_map, in svm_vcpu_create()
2281 roundup(sizeof(*cpudata), PAGE_SIZE), 0, in svm_vcpu_create()
2283 vcpu->cpudata = cpudata; in svm_vcpu_create()
2286 error = svm_memalloc(&cpudata->vmcb_pa, (vaddr_t *)&cpudata->vmcb, in svm_vcpu_create()
2292 error = svm_memalloc(&cpudata->iobm_pa, (vaddr_t *)&cpudata->iobm, in svm_vcpu_create()
2298 error = svm_memalloc(&cpudata->msrbm_pa, (vaddr_t *)&cpudata->msrbm, in svm_vcpu_create()
2309 if (cpudata->vmcb_pa) { in svm_vcpu_create()
2310 svm_memfree(cpudata->vmcb_pa, (vaddr_t)cpudata->vmcb, in svm_vcpu_create()
2313 if (cpudata->iobm_pa) { in svm_vcpu_create()
2314 svm_memfree(cpudata->iobm_pa, (vaddr_t)cpudata->iobm, in svm_vcpu_create()
2317 if (cpudata->msrbm_pa) { in svm_vcpu_create()
2318 svm_memfree(cpudata->msrbm_pa, (vaddr_t)cpudata->msrbm, in svm_vcpu_create()
2321 uvm_km_free(kernel_map, (vaddr_t)cpudata, in svm_vcpu_create()
2322 roundup(sizeof(*cpudata), PAGE_SIZE), UVM_KMF_WIRED); in svm_vcpu_create()
2329 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_destroy() local
2333 svm_memfree(cpudata->vmcb_pa, (vaddr_t)cpudata->vmcb, VMCB_NPAGES); in svm_vcpu_destroy()
2334 svm_memfree(cpudata->iobm_pa, (vaddr_t)cpudata->iobm, IOBM_NPAGES); in svm_vcpu_destroy()
2335 svm_memfree(cpudata->msrbm_pa, (vaddr_t)cpudata->msrbm, MSRBM_NPAGES); in svm_vcpu_destroy()
2337 uvm_km_free(kernel_map, (vaddr_t)cpudata, in svm_vcpu_destroy()
2338 roundup(sizeof(*cpudata), PAGE_SIZE), UVM_KMF_WIRED); in svm_vcpu_destroy()
2344 svm_vcpu_configure_cpuid(struct svm_cpudata *cpudata, void *data) in svm_vcpu_configure_cpuid() argument
2363 if (!cpudata->cpuidpresent[i]) { in svm_vcpu_configure_cpuid()
2366 if (cpudata->cpuid[i].leaf == cpuid->leaf) { in svm_vcpu_configure_cpuid()
2367 cpudata->cpuidpresent[i] = false; in svm_vcpu_configure_cpuid()
2375 if (!cpudata->cpuidpresent[i]) { in svm_vcpu_configure_cpuid()
2378 if (cpudata->cpuid[i].leaf == cpuid->leaf) { in svm_vcpu_configure_cpuid()
2379 memcpy(&cpudata->cpuid[i], cpuid, in svm_vcpu_configure_cpuid()
2387 if (!cpudata->cpuidpresent[i]) { in svm_vcpu_configure_cpuid()
2388 cpudata->cpuidpresent[i] = true; in svm_vcpu_configure_cpuid()
2389 memcpy(&cpudata->cpuid[i], cpuid, in svm_vcpu_configure_cpuid()
2401 struct svm_cpudata *cpudata = vcpu->cpudata; in svm_vcpu_configure() local
2405 return svm_vcpu_configure_cpuid(cpudata, data); in svm_vcpu_configure()