Changeset 107893 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jan 22, 2025 3:31:45 PM (2 weeks ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/Makefile.kmk
r107876 r107893 1121 1121 1122 1122 # 1123 # For vmmGetSvnRev.1123 # For VMMGetSvnRev. 1124 1124 # 1125 1125 VMMAll/VMMAll.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) -
trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp
r107194 r107893 344 344 * Internal Functions * 345 345 *********************************************************************************************************************************/ 346 static void gvmmR0InitPerVMData(PGVM pGVM, int16_t hSelf, VM CPUID cCpus, PSUPDRVSESSION pSession);346 static void gvmmR0InitPerVMData(PGVM pGVM, int16_t hSelf, VMTARGET enmTarget, VMCPUID cCpus, PSUPDRVSESSION pSession); 347 347 static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvGVMM, void *pvHandle); 348 348 static int gvmmR0ByGVM(PGVM pGVM, PGVMM *ppGVMM, bool fTakeUsedLock); … … 800 800 return VERR_INVALID_POINTER; 801 801 802 /* Check that VBoxVMM and VMMR0 are likely to have the same idea about the structures. */ 803 if (pReq->cbVM != sizeof(VM)) 804 { 805 LogRel(("GVMMR0CreateVMReq: cbVM=%#x, expcted %#x\n", pReq->cbVM, sizeof(VM))); 806 return VINF_GVM_MISMATCH_VM_SIZE; 807 } 808 if (pReq->cbVCpu != sizeof(VMCPU)) 809 { 810 LogRel(("GVMMR0CreateVMReq: cbVCpu=%#x, expcted %#x\n", pReq->cbVCpu, sizeof(VMCPU))); 811 return VINF_GVM_MISMATCH_VMCPU_SIZE; 812 } 813 if (pReq->uStructVersion != 1) 814 { 815 LogRel(("GVMMR0CreateVMReq: uStructVersion=%#x, expcted %#x\n", pReq->uStructVersion, 1)); 816 return VINF_GVM_MISMATCH_VM_STRUCT_VER; 817 } 818 if (pReq->uSvnRevision != VMMGetSvnRev()) 819 { 820 LogRel(("GVMMR0CreateVMReq: uSvnRevision=%u, expcted %u\n", pReq->uSvnRevision, VMMGetSvnRev())); 821 return VINF_GVM_MISMATCH_VMCPU_SIZE; 822 } 823 802 824 /* 803 825 * Execute it. … … 806 828 pReq->pVMR0 = NULL; 807 829 pReq->pVMR3 = NIL_RTR3PTR; 808 int rc = GVMMR0CreateVM(pSession, pReq-> cCpus, &pGVM);830 int rc = GVMMR0CreateVM(pSession, pReq->enmTarget, pReq->cCpus, &pGVM); 809 831 if (RT_SUCCESS(rc)) 810 832 { … … 828 850 * @thread EMT. 829 851 */ 830 GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCpus, PGVM *ppGVM)852 GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, VMTARGET enmTarget, uint32_t cCpus, PGVM *ppGVM) 831 853 { 832 854 LogFlow(("GVMMR0CreateVM: pSession=%p\n", pSession)); … … 839 861 if ( cCpus == 0 840 862 || cCpus > VMM_MAX_CPU_COUNT) 863 return VERR_INVALID_PARAMETER; 864 if ( enmTarget != VMTARGET_X86 865 && enmTarget != VMTARGET_ARMV8) 841 866 return VERR_INVALID_PARAMETER; 842 867 … … 915 940 */ 916 941 RT_BZERO(pGVM, cPages << HOST_PAGE_SHIFT); 917 gvmmR0InitPerVMData(pGVM, iHandle, cCpus, pSession);942 gvmmR0InitPerVMData(pGVM, iHandle, enmTarget, cCpus, pSession); 918 943 pGVM->gvmm.s.VMMemObj = hVMMemObj; 919 944 #ifndef VBOX_WITH_MINIMAL_R0 … … 1116 1141 * @param pGVM Pointer to the global VM structure. 1117 1142 * @param hSelf The handle. 1143 * @param enmTarget The target platform architecture of the VM. 1118 1144 * @param cCpus The CPU count. 1119 1145 * @param pSession The session this VM is associated with. 1120 1146 */ 1121 static void gvmmR0InitPerVMData(PGVM pGVM, int16_t hSelf, VM CPUID cCpus, PSUPDRVSESSION pSession)1147 static void gvmmR0InitPerVMData(PGVM pGVM, int16_t hSelf, VMTARGET enmTarget, VMCPUID cCpus, PSUPDRVSESSION pSession) 1122 1148 { 1123 1149 AssertCompile(RT_SIZEOFMEMB(GVM,gvmm.s) <= RT_SIZEOFMEMB(GVM,gvmm.padding)); … … 1130 1156 pGVM->hSelf = hSelf; 1131 1157 pGVM->cCpus = cCpus; 1158 pGVM->enmTarget = enmTarget; 1132 1159 pGVM->pSession = pSession; 1133 1160 pGVM->pSelf = pGVM; … … 1143 1170 pGVM->cbSelf = sizeof(VM); 1144 1171 pGVM->cbVCpu = sizeof(VMCPU); 1172 pGVM->enmTargetUnsafe = enmTarget; 1145 1173 1146 1174 /* GVMM: */ … … 1172 1200 pGVM->aCpus[i].idCpu = i; 1173 1201 pGVM->aCpus[i].idCpuUnsafe = i; 1202 pGVM->aCpus[i].enmTarget = enmTarget; 1203 pGVM->aCpus[i].enmTargetUnsafe = enmTarget; 1174 1204 pGVM->aCpus[i].gvmm.s.HaltEventMulti = NIL_RTSEMEVENTMULTI; 1175 1205 pGVM->aCpus[i].gvmm.s.VMCpuMapObj = NIL_RTR0MEMOBJ; -
trunk/src/VBox/VMM/VMMR3/GVMMR3.cpp
r106061 r107893 46 46 * @returns VBox status code. 47 47 * @param pUVM The user mode VM handle. 48 * @param enmTarget The target platform architecture of the VM. 48 49 * @param cCpus The number of CPUs to create the VM for. 49 50 * @param pSession The support driver session handle. … … 52 53 * for use in VMMR0 calls. 53 54 */ 54 VMMR3_INT_DECL(int) GVMMR3CreateVM(PUVM pUVM, uint32_t cCpus, PSUPDRVSESSION pSession, PVM *ppVM, PRTR0PTR ppVMR0) 55 VMMR3_INT_DECL(int) GVMMR3CreateVM(PUVM pUVM, VMTARGET enmTarget, uint32_t cCpus, PSUPDRVSESSION pSession, 56 PVM *ppVM, PRTR0PTR ppVMR0) 55 57 { 56 58 AssertReturn(cCpus >= VMM_MIN_CPU_COUNT && cCpus <= VMM_MAX_CPU_COUNT, VERR_INVALID_PARAMETER); 59 AssertReturn(enmTarget == VMTARGET_X86 || enmTarget == VMTARGET_ARMV8, VERR_INVALID_PARAMETER); 57 60 AssertCompile((sizeof(VM) & HOST_PAGE_OFFSET_MASK) == 0); 58 61 AssertCompile((sizeof(VMCPU) & HOST_PAGE_OFFSET_MASK) == 0); … … 65 68 CreateVMReq.Hdr.cbReq = sizeof(CreateVMReq); 66 69 CreateVMReq.pSession = pSession; 70 CreateVMReq.enmTarget = enmTarget; 71 CreateVMReq.cCpus = cCpus; 72 CreateVMReq.cbVM = sizeof(VM); 73 CreateVMReq.cbVCpu = sizeof(VMCPU); 74 CreateVMReq.uStructVersion = 1; 75 CreateVMReq.uSvnRevision = VMMGetSvnRev(); 67 76 CreateVMReq.pVMR0 = NIL_RTR0PTR; 68 77 CreateVMReq.pVMR3 = NULL; 69 CreateVMReq.cCpus = cCpus;70 78 rc = SUPR3CallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_GVMM_CREATE_VM, 0, &CreateVMReq.Hdr); 71 79 if (RT_SUCCESS(rc)) … … 73 81 *ppVM = CreateVMReq.pVMR3; 74 82 *ppVMR0 = CreateVMReq.pVMR0; 83 Assert(CreateVMReq.pVMR3->enmTarget == enmTarget); 75 84 } 76 85 } … … 101 110 pVM->cbVCpu = sizeof(VMCPU); 102 111 pVM->uStructVersion = 1; 112 pVM->enmTarget = enmTarget; 103 113 104 114 /* CPUs: */ -
trunk/src/VBox/VMM/VMMR3/VM.cpp
r107661 r107893 598 598 */ 599 599 RTR0PTR pVMR0; 600 int rc = GVMMR3CreateVM(pUVM, cCpus, pUVM->vm.s.pSession, &pUVM->pVM, &pVMR0);600 int rc = GVMMR3CreateVM(pUVM, VMTARGET_DEFAULT, cCpus, pUVM->vm.s.pSession, &pUVM->pVM, &pVMR0); 601 601 if (RT_SUCCESS(rc)) 602 602 { … … 607 607 AssertRelease(pVM->cCpus == cCpus); 608 608 AssertRelease(pVM->uCpuExecutionCap == 100); 609 AssertRelease(pVM->enmTarget == VMTARGET_DEFAULT); 609 610 AssertCompileMemberAlignment(VM, cpum, 64); 610 611 AssertCompileMemberAlignment(VM, tm, 64);
Note:
See TracChangeset
for help on using the changeset viewer.