VirtualBox

Changeset 41318 in vbox


Ignore:
Timestamp:
May 15, 2012 3:42:12 PM (12 years ago)
Author:
vboxsync
Message:

VMX: Minor cleanup to align with SVM, comments.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r41314 r41318  
    13301330    Assert(pCtx);
    13311331
    1332     u32TrapMask = HWACCM_VMX_TRAP_MASK;
    1333 #ifndef DEBUG
    1334     if (pVM->hwaccm.s.fNestedPaging)
    1335         u32TrapMask &= ~RT_BIT(X86_XCPT_PF);   /* no longer need to intercept #PF. */
    1336 #endif
     1332    /* Set up a mask for intercepting traps. */
     1333    /** @todo Do we really need to always intercept #DB? */
     1334    u32TrapMask  =   RT_BIT(X86_XCPT_DB)
     1335                   | RT_BIT(X86_XCPT_NM)
     1336#ifdef VBOX_ALWAYS_TRAP_PF
     1337                   | RT_BIT(X86_XCPT_PF)
     1338#endif
     1339#ifdef VBOX_STRICT
     1340                   | RT_BIT(X86_XCPT_BP)
     1341                   | RT_BIT(X86_XCPT_DB)
     1342                   | RT_BIT(X86_XCPT_DE)
     1343                   | RT_BIT(X86_XCPT_NM)
     1344                   | RT_BIT(X86_XCPT_PF)
     1345                   | RT_BIT(X86_XCPT_UD)
     1346                   | RT_BIT(X86_XCPT_NP)
     1347                   | RT_BIT(X86_XCPT_SS)
     1348                   | RT_BIT(X86_XCPT_GP)
     1349                   | RT_BIT(X86_XCPT_MF)
     1350#endif
     1351                   ;
     1352
     1353    /** @todo NP state won't change so maybe we should build the initial trap mask up front? */
     1354    /* Without nested paging, #PF must be intercepted to implement shadow paging. */
     1355    if (!pVM->hwaccm.s.fNestedPaging)
     1356        u32TrapMask |= RT_BIT(X86_XCPT_PF);
    13371357
    13381358    /* Also catch floating point exceptions if we need to report them to the guest in a different way. */
     
    13471367
    13481368    /* Intercept all exceptions in real mode as none of them can be injected directly (#GP otherwise). */
     1369    /** @todo Despite the claim to intercept everything, with NP we do not intercept #PF. Should we? */
    13491370    if (    CPUMIsGuestInRealModeEx(pCtx)
    13501371        &&  pVM->hwaccm.s.vmx.pRealModeTSS)
    1351         u32TrapMask |= HWACCM_VMX_TRAP_MASK_REALMODE;
     1372        u32TrapMask |=   RT_BIT(X86_XCPT_DE)
     1373                       | RT_BIT(X86_XCPT_DB)
     1374                       | RT_BIT(X86_XCPT_NMI)
     1375                       | RT_BIT(X86_XCPT_BP)
     1376                       | RT_BIT(X86_XCPT_OF)
     1377                       | RT_BIT(X86_XCPT_BR)
     1378                       | RT_BIT(X86_XCPT_UD)
     1379                       | RT_BIT(X86_XCPT_DF)
     1380                       | RT_BIT(X86_XCPT_CO_SEG_OVERRUN)
     1381                       | RT_BIT(X86_XCPT_TS)
     1382                       | RT_BIT(X86_XCPT_NP)
     1383                       | RT_BIT(X86_XCPT_SS)
     1384                       | RT_BIT(X86_XCPT_GP)
     1385                       | RT_BIT(X86_XCPT_MF)
     1386                       | RT_BIT(X86_XCPT_AC)
     1387                       | RT_BIT(X86_XCPT_MC)
     1388                       | RT_BIT(X86_XCPT_XF)
     1389                       ;
    13521390
    13531391    int rc = VMXWriteVMCS(VMX_VMCS_CTRL_EXCEPTION_BITMAP, u32TrapMask);
     
    30543092            case X86_XCPT_PF: /* Page fault */
    30553093            {
    3056 #ifdef DEBUG
     3094#ifdef VBOX_ALWAYS_TRAP_PF
    30573095                if (pVM->hwaccm.s.fNestedPaging)
    30583096                {   /* A genuine pagefault.
  • trunk/src/VBox/VMM/include/HWACCMInternal.h

    r41312 r41318  
    111111
    112112/** @} */
    113 
    114 /** @name Intercepted traps
    115  *  Traps that need to be intercepted so we can correctly dispatch them to the guest if required.
    116  *  Currently #NM and #PF only
    117  */
    118 #ifdef VBOX_STRICT
    119 #define HWACCM_VMX_TRAP_MASK                RT_BIT(X86_XCPT_BP) | RT_BIT(X86_XCPT_DB) | RT_BIT(X86_XCPT_DE) | RT_BIT(X86_XCPT_NM) | RT_BIT(X86_XCPT_PF) | RT_BIT(X86_XCPT_UD) | RT_BIT(X86_XCPT_NP) | RT_BIT(X86_XCPT_SS) | RT_BIT(X86_XCPT_GP) | RT_BIT(X86_XCPT_MF)
    120 #define HWACCM_SVM_TRAP_MASK                HWACCM_VMX_TRAP_MASK
    121 #else
    122 #define HWACCM_VMX_TRAP_MASK                RT_BIT(X86_XCPT_DB) | RT_BIT(X86_XCPT_NM) | RT_BIT(X86_XCPT_PF)
    123 #define HWACCM_SVM_TRAP_MASK                RT_BIT(X86_XCPT_NM) | RT_BIT(X86_XCPT_PF)
    124 #endif
    125 /* All exceptions have to be intercept in emulated real-mode (minus NM & PF as they are always intercepted. */
    126 #define HWACCM_VMX_TRAP_MASK_REALMODE       RT_BIT(X86_XCPT_DE) | RT_BIT(X86_XCPT_DB) | RT_BIT(X86_XCPT_NMI) | RT_BIT(X86_XCPT_BP) | RT_BIT(X86_XCPT_OF) | RT_BIT(X86_XCPT_BR) | RT_BIT(X86_XCPT_UD) | RT_BIT(X86_XCPT_DF) | RT_BIT(X86_XCPT_CO_SEG_OVERRUN) | RT_BIT(X86_XCPT_TS) | RT_BIT(X86_XCPT_NP) | RT_BIT(X86_XCPT_SS) | RT_BIT(X86_XCPT_GP) | RT_BIT(X86_XCPT_MF) | RT_BIT(X86_XCPT_AC) | RT_BIT(X86_XCPT_MC) | RT_BIT(X86_XCPT_XF)
    127 /** @} */
    128 
    129113
    130114/** Maximum number of page flushes we are willing to remember before considering a full TLB flush. */
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