VirtualBox

Changeset 38324 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Aug 5, 2011 2:02:53 PM (14 years ago)
Author:
vboxsync
Message:

FE/Qt,FE/BFE,MachineDebugger,EM: Added execution scheduling options to the Qt GUI and reworked the main/VMM interface.

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r36825 r38324  
    586586
    587587/**
     588 * Argument packet for emR3SetExecutionPolicy.
     589 */
     590struct EMR3SETEXECPOLICYARGS
     591{
     592    EMEXECPOLICY    enmPolicy;
     593    bool            fEnforce;
     594};
     595
     596
     597/**
     598 * @callback_method_impl{FNVMMEMTRENDEZVOUS, Rendezvous callback for EMR3SetExecutionPolicy.}
     599 */
     600static 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 */
     648VMMR3DECL(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/**
    588659 * Raise a fatal error.
    589660 *
     
    616687        case EMSTATE_HWACC:             return "EMSTATE_HWACC";
    617688        case EMSTATE_REM:               return "EMSTATE_REM";
    618         case EMSTATE_PARAV:             return "EMSTATE_PARAV";
    619689        case EMSTATE_HALTED:            return "EMSTATE_HALTED";
    620690        case EMSTATE_WAIT_SIPI:         return "EMSTATE_WAIT_SIPI";
  • trunk/src/VBox/VMM/VMMR3/EMRaw.cpp

    r35346 r38324  
    6868
    6969
    70 /*******************************************************************************
    71 *   Defined Constants And Macros                                               *
    72 *******************************************************************************/
    73 
    7470
    7571/*******************************************************************************
     
    8783#define EMHANDLERC_WITH_PATM
    8884#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 }
    12985
    13086
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette