Changeset 38324 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Aug 5, 2011 2:02:53 PM (14 years ago)
- Location:
- trunk/src/VBox/VMM/VMMR3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/EM.cpp
r36825 r38324 586 586 587 587 /** 588 * Argument packet for emR3SetExecutionPolicy. 589 */ 590 struct EMR3SETEXECPOLICYARGS 591 { 592 EMEXECPOLICY enmPolicy; 593 bool fEnforce; 594 }; 595 596 597 /** 598 * @callback_method_impl{FNVMMEMTRENDEZVOUS, Rendezvous callback for EMR3SetExecutionPolicy.} 599 */ 600 static DECLCALLBACK(VBOXSTRICTRC) emR3SetExecutionPolicy(PVM pVM, PVMCPU pVCpu, void *pvUser) 601 { 602 /* 603 * Only the first CPU changes the variables. 604 */ 605 if (pVCpu->idCpu == 0) 606 { 607 struct EMR3SETEXECPOLICYARGS *pArgs = (struct EMR3SETEXECPOLICYARGS *)pvUser; 608 switch (pArgs->enmPolicy) 609 { 610 case EMEXECPOLICY_RECOMPILE_RING0: 611 pVM->fRawR0Enabled = !pArgs->fEnforce; 612 break; 613 case EMEXECPOLICY_RECOMPILE_RING3: 614 pVM->fRawR3Enabled = !pArgs->fEnforce; 615 break; 616 default: 617 AssertFailedReturn(VERR_INVALID_PARAMETER); 618 } 619 Log(("emR3SetExecutionPolicy: fRawR3Enabled=%RTbool fRawR0Enabled=%RTbool\n", 620 pVM->fRawR3Enabled, pVM->fRawR0Enabled)); 621 } 622 623 /* 624 * Force rescheduling if in RAW, HWACCM or REM. 625 */ 626 return pVCpu->em.s.enmState == EMSTATE_RAW 627 || pVCpu->em.s.enmState == EMSTATE_HWACC 628 || pVCpu->em.s.enmState == EMSTATE_REM 629 ? VINF_EM_RESCHEDULE 630 : VINF_SUCCESS; 631 } 632 633 634 /** 635 * Changes a the execution scheduling policy. 636 * 637 * This is used to enable or disable raw-mode / hardware-virtualization 638 * execution of user and supervisor code. 639 * 640 * @returns VINF_SUCCESS on success. 641 * @returns VINF_RESCHEDULE if a rescheduling might be required. 642 * @returns VERR_INVALID_PARAMETER on an invalid enmMode value. 643 * 644 * @param pVM The VM to operate on. 645 * @param enmPolicy The scheduling policy to change. 646 * @param fEnforce Whether to enforce the policy or not. 647 */ 648 VMMR3DECL(int) EMR3SetExecutionPolicy(PVM pVM, EMEXECPOLICY enmPolicy, bool fEnforce) 649 { 650 VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE); 651 AssertReturn(enmPolicy > EMEXECPOLICY_INVALID && enmPolicy < EMEXECPOLICY_END, VERR_INVALID_PARAMETER); 652 653 struct EMR3SETEXECPOLICYARGS Args = { enmPolicy, fEnforce }; 654 return VMMR3EmtRendezvous(pVM, VMMEMTRENDEZVOUS_FLAGS_TYPE_DESCENDING, emR3SetExecutionPolicy, &Args); 655 } 656 657 658 /** 588 659 * Raise a fatal error. 589 660 * … … 616 687 case EMSTATE_HWACC: return "EMSTATE_HWACC"; 617 688 case EMSTATE_REM: return "EMSTATE_REM"; 618 case EMSTATE_PARAV: return "EMSTATE_PARAV";619 689 case EMSTATE_HALTED: return "EMSTATE_HALTED"; 620 690 case EMSTATE_WAIT_SIPI: return "EMSTATE_WAIT_SIPI"; -
trunk/src/VBox/VMM/VMMR3/EMRaw.cpp
r35346 r38324 68 68 69 69 70 /*******************************************************************************71 * Defined Constants And Macros *72 *******************************************************************************/73 74 70 75 71 /******************************************************************************* … … 87 83 #define EMHANDLERC_WITH_PATM 88 84 #include "EMHandleRCTmpl.h" 89 90 /**91 * Enables or disables a set of raw-mode execution modes.92 *93 * @returns VINF_SUCCESS on success.94 * @returns VINF_RESCHEDULE if a rescheduling might be required.95 * @returns VERR_INVALID_PARAMETER on an invalid enmMode value.96 *97 * @param pVM The VM to operate on.98 * @param enmMode The execution mode change.99 * @thread The emulation thread.100 */101 VMMR3DECL(int) EMR3RawSetMode(PVM pVM, EMRAWMODE enmMode)102 {103 switch (enmMode)104 {105 case EMRAW_NONE:106 pVM->fRawR3Enabled = false;107 pVM->fRawR0Enabled = false;108 break;109 case EMRAW_RING3_ENABLE:110 pVM->fRawR3Enabled = true;111 break;112 case EMRAW_RING3_DISABLE:113 pVM->fRawR3Enabled = false;114 break;115 case EMRAW_RING0_ENABLE:116 pVM->fRawR0Enabled = true;117 break;118 case EMRAW_RING0_DISABLE:119 pVM->fRawR0Enabled = false;120 break;121 default:122 AssertMsgFailed(("Invalid enmMode=%d\n", enmMode));123 return VERR_INVALID_PARAMETER;124 }125 Log(("EMR3SetRawMode: fRawR3Enabled=%RTbool fRawR0Enabled=%RTbool\n",126 pVM->fRawR3Enabled, pVM->fRawR0Enabled));127 return pVM->aCpus[0].em.s.enmState == EMSTATE_RAW ? VINF_EM_RESCHEDULE : VINF_SUCCESS;128 }129 85 130 86
Note:
See TracChangeset
for help on using the changeset viewer.