Changeset 19434 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- May 6, 2009 1:58:35 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
r19406 r19434 308 308 VMMR0DECL(int) VMMR0CallHost(PVM pVM, VMMCALLHOST enmOperation, uint64_t uArg) 309 309 { 310 PVMCPU pVCpu = VMMGetCpu(pVM); 311 310 312 /** @todo profile this! */ 311 pV M->vmm.s.enmCallHostOperation = enmOperation;312 pV M->vmm.s.u64CallHostArg = uArg;313 pV M->vmm.s.rcCallHost = VERR_INTERNAL_ERROR;314 int rc = vmmR0CallHostLongJmp(&pV M->vmm.s.CallHostR0JmpBuf, VINF_VMM_CALL_HOST);313 pVCpu->vmm.s.enmCallHostOperation = enmOperation; 314 pVCpu->vmm.s.u64CallHostArg = uArg; 315 pVCpu->vmm.s.rcCallHost = VERR_INTERNAL_ERROR; 316 int rc = vmmR0CallHostLongJmp(&pVCpu->vmm.s.CallHostR0JmpBuf, VINF_VMM_CALL_HOST); 315 317 if (rc == VINF_SUCCESS) 316 rc = pV M->vmm.s.rcCallHost;318 rc = pVCpu->vmm.s.rcCallHost; 317 319 return rc; 318 320 } … … 323 325 * Record return code statistics 324 326 * @param pVM The VM handle. 327 * @param pVCpu The VMCPU handle. 325 328 * @param rc The status code. 326 329 */ 327 static void vmmR0RecordRC(PVM pVM, int rc)330 static void vmmR0RecordRC(PVM pVM, PVMCPU pVCpu, int rc) 328 331 { 329 332 /* … … 438 441 break; 439 442 case VINF_VMM_CALL_HOST: 440 switch (pV M->vmm.s.enmCallHostOperation)443 switch (pVCpu->vmm.s.enmCallHostOperation) 441 444 { 442 445 case VMMCALLHOST_PDM_LOCK: … … 590 593 #ifdef VBOX_WITH_STATISTICS 591 594 STAM_COUNTER_INC(&pVM->vmm.s.StatRunRC); 592 vmmR0RecordRC(pVM, rc);595 vmmR0RecordRC(pVM, pVCpu, rc); 593 596 #endif 594 597 } … … 623 626 if (RT_SUCCESS(rc)) 624 627 { 625 rc = vmmR0CallHostSetJmp(&pV M->vmm.s.CallHostR0JmpBuf, HWACCMR0RunGuestCode, pVM, pVCpu); /* this may resume code. */628 rc = vmmR0CallHostSetJmp(&pVCpu->vmm.s.CallHostR0JmpBuf, HWACCMR0RunGuestCode, pVM, pVCpu); /* this may resume code. */ 626 629 int rc2 = HWACCMR0Leave(pVM, pVCpu); 627 630 AssertRC(rc2); … … 639 642 640 643 #ifdef VBOX_WITH_STATISTICS 641 vmmR0RecordRC(pVM, rc);644 vmmR0RecordRC(pVM, pVCpu, rc); 642 645 #endif 643 646 /* No special action required for external interrupts, just return. */ … … 1084 1087 case VMMR0_DO_VMMR0_TERM: 1085 1088 { 1086 if (!pVM->vmm.s.CallHostR0JmpBuf.pvSavedStack) 1089 PVMCPU pVCpu = &pVM->aCpus[idCpu]; 1090 1091 if (!pVCpu->vmm.s.CallHostR0JmpBuf.pvSavedStack) 1087 1092 break; 1088 1093 … … 1095 1100 Args.u64Arg = u64Arg; 1096 1101 Args.pSession = pSession; 1097 return vmmR0CallHostSetJmpEx(&pV M->vmm.s.CallHostR0JmpBuf, vmmR0EntryExWrapper, &Args);1102 return vmmR0CallHostSetJmpEx(&pVCpu->vmm.s.CallHostR0JmpBuf, vmmR0EntryExWrapper, &Args); 1098 1103 } 1099 1104 … … 1141 1146 } 1142 1147 1148 PVMCPU pVCpu = VMMGetCpu(pVM); 1149 1143 1150 /* 1144 1151 * Check that the jump buffer is armed. 1145 1152 */ 1146 1153 #ifdef RT_ARCH_X86 1147 if ( !pV M->vmm.s.CallHostR0JmpBuf.eip1148 || pV M->vmm.s.CallHostR0JmpBuf.fInRing3Call)1154 if ( !pVCpu->vmm.s.CallHostR0JmpBuf.eip 1155 || pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call) 1149 1156 #else 1150 if ( !pV M->vmm.s.CallHostR0JmpBuf.rip1151 || pV M->vmm.s.CallHostR0JmpBuf.fInRing3Call)1157 if ( !pVCpu->vmm.s.CallHostR0JmpBuf.rip 1158 || pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call) 1152 1159 #endif 1153 1160 { … … 1200 1207 if (pVM) 1201 1208 { 1209 PVMCPU pVCpu = VMMGetCpu(pVM); 1210 1202 1211 #ifdef RT_ARCH_X86 1203 if ( pV M->vmm.s.CallHostR0JmpBuf.eip1204 && !pV M->vmm.s.CallHostR0JmpBuf.fInRing3Call)1212 if ( pVCpu->vmm.s.CallHostR0JmpBuf.eip 1213 && !pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call) 1205 1214 #else 1206 if ( pV M->vmm.s.CallHostR0JmpBuf.rip1207 && !pV M->vmm.s.CallHostR0JmpBuf.fInRing3Call)1215 if ( pVCpu->vmm.s.CallHostR0JmpBuf.rip 1216 && !pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call) 1208 1217 #endif 1209 1218 {
Note:
See TracChangeset
for help on using the changeset viewer.