VirtualBox

Changeset 93785 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 16, 2022 10:18:50 AM (3 years ago)
Author:
vboxsync
Message:

VMM/NEMR3Native-darwin: Check whether probes are enabled to decide which runloop to use, bugref:9044

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin.cpp

    r93750 r93785  
    33283328
    33293329/**
     3330 * Checks if any expensive dtrace probes are enabled and we should go to the
     3331 * debug loop.
     3332 *
     3333 * @returns true if we should use debug loop, false if not.
     3334 */
     3335static bool nemR3DarwinAnyExpensiveProbesEnabled(void)
     3336{
     3337    /** @todo Check performance penalty when checking these over and over */
     3338    return (  VBOXVMM_R0_HMVMX_VMEXIT_ENABLED() /* expensive too due to context */
     3339            | VBOXVMM_XCPT_DE_ENABLED()
     3340            | VBOXVMM_XCPT_DB_ENABLED()
     3341            | VBOXVMM_XCPT_BP_ENABLED()
     3342            | VBOXVMM_XCPT_OF_ENABLED()
     3343            | VBOXVMM_XCPT_BR_ENABLED()
     3344            | VBOXVMM_XCPT_UD_ENABLED()
     3345            | VBOXVMM_XCPT_NM_ENABLED()
     3346            | VBOXVMM_XCPT_DF_ENABLED()
     3347            | VBOXVMM_XCPT_TS_ENABLED()
     3348            | VBOXVMM_XCPT_NP_ENABLED()
     3349            | VBOXVMM_XCPT_SS_ENABLED()
     3350            | VBOXVMM_XCPT_GP_ENABLED()
     3351            | VBOXVMM_XCPT_PF_ENABLED()
     3352            | VBOXVMM_XCPT_MF_ENABLED()
     3353            | VBOXVMM_XCPT_AC_ENABLED()
     3354            | VBOXVMM_XCPT_XF_ENABLED()
     3355            | VBOXVMM_XCPT_VE_ENABLED()
     3356            | VBOXVMM_XCPT_SX_ENABLED()
     3357            | VBOXVMM_INT_SOFTWARE_ENABLED()
     3358            /* not available in R3 | VBOXVMM_INT_HARDWARE_ENABLED()*/
     3359           ) != 0
     3360        || (  VBOXVMM_INSTR_HALT_ENABLED()
     3361            | VBOXVMM_INSTR_MWAIT_ENABLED()
     3362            | VBOXVMM_INSTR_MONITOR_ENABLED()
     3363            | VBOXVMM_INSTR_CPUID_ENABLED()
     3364            | VBOXVMM_INSTR_INVD_ENABLED()
     3365            | VBOXVMM_INSTR_WBINVD_ENABLED()
     3366            | VBOXVMM_INSTR_INVLPG_ENABLED()
     3367            | VBOXVMM_INSTR_RDTSC_ENABLED()
     3368            | VBOXVMM_INSTR_RDTSCP_ENABLED()
     3369            | VBOXVMM_INSTR_RDPMC_ENABLED()
     3370            | VBOXVMM_INSTR_RDMSR_ENABLED()
     3371            | VBOXVMM_INSTR_WRMSR_ENABLED()
     3372            | VBOXVMM_INSTR_CRX_READ_ENABLED()
     3373            | VBOXVMM_INSTR_CRX_WRITE_ENABLED()
     3374            | VBOXVMM_INSTR_DRX_READ_ENABLED()
     3375            | VBOXVMM_INSTR_DRX_WRITE_ENABLED()
     3376            | VBOXVMM_INSTR_PAUSE_ENABLED()
     3377            | VBOXVMM_INSTR_XSETBV_ENABLED()
     3378            | VBOXVMM_INSTR_SIDT_ENABLED()
     3379            | VBOXVMM_INSTR_LIDT_ENABLED()
     3380            | VBOXVMM_INSTR_SGDT_ENABLED()
     3381            | VBOXVMM_INSTR_LGDT_ENABLED()
     3382            | VBOXVMM_INSTR_SLDT_ENABLED()
     3383            | VBOXVMM_INSTR_LLDT_ENABLED()
     3384            | VBOXVMM_INSTR_STR_ENABLED()
     3385            | VBOXVMM_INSTR_LTR_ENABLED()
     3386            | VBOXVMM_INSTR_GETSEC_ENABLED()
     3387            | VBOXVMM_INSTR_RSM_ENABLED()
     3388            | VBOXVMM_INSTR_RDRAND_ENABLED()
     3389            | VBOXVMM_INSTR_RDSEED_ENABLED()
     3390            | VBOXVMM_INSTR_XSAVES_ENABLED()
     3391            | VBOXVMM_INSTR_XRSTORS_ENABLED()
     3392            | VBOXVMM_INSTR_VMM_CALL_ENABLED()
     3393            | VBOXVMM_INSTR_VMX_VMCLEAR_ENABLED()
     3394            | VBOXVMM_INSTR_VMX_VMLAUNCH_ENABLED()
     3395            | VBOXVMM_INSTR_VMX_VMPTRLD_ENABLED()
     3396            | VBOXVMM_INSTR_VMX_VMPTRST_ENABLED()
     3397            | VBOXVMM_INSTR_VMX_VMREAD_ENABLED()
     3398            | VBOXVMM_INSTR_VMX_VMRESUME_ENABLED()
     3399            | VBOXVMM_INSTR_VMX_VMWRITE_ENABLED()
     3400            | VBOXVMM_INSTR_VMX_VMXOFF_ENABLED()
     3401            | VBOXVMM_INSTR_VMX_VMXON_ENABLED()
     3402            | VBOXVMM_INSTR_VMX_VMFUNC_ENABLED()
     3403            | VBOXVMM_INSTR_VMX_INVEPT_ENABLED()
     3404            | VBOXVMM_INSTR_VMX_INVVPID_ENABLED()
     3405            | VBOXVMM_INSTR_VMX_INVPCID_ENABLED()
     3406           ) != 0
     3407        || (  VBOXVMM_EXIT_TASK_SWITCH_ENABLED()
     3408            | VBOXVMM_EXIT_HALT_ENABLED()
     3409            | VBOXVMM_EXIT_MWAIT_ENABLED()
     3410            | VBOXVMM_EXIT_MONITOR_ENABLED()
     3411            | VBOXVMM_EXIT_CPUID_ENABLED()
     3412            | VBOXVMM_EXIT_INVD_ENABLED()
     3413            | VBOXVMM_EXIT_WBINVD_ENABLED()
     3414            | VBOXVMM_EXIT_INVLPG_ENABLED()
     3415            | VBOXVMM_EXIT_RDTSC_ENABLED()
     3416            | VBOXVMM_EXIT_RDTSCP_ENABLED()
     3417            | VBOXVMM_EXIT_RDPMC_ENABLED()
     3418            | VBOXVMM_EXIT_RDMSR_ENABLED()
     3419            | VBOXVMM_EXIT_WRMSR_ENABLED()
     3420            | VBOXVMM_EXIT_CRX_READ_ENABLED()
     3421            | VBOXVMM_EXIT_CRX_WRITE_ENABLED()
     3422            | VBOXVMM_EXIT_DRX_READ_ENABLED()
     3423            | VBOXVMM_EXIT_DRX_WRITE_ENABLED()
     3424            | VBOXVMM_EXIT_PAUSE_ENABLED()
     3425            | VBOXVMM_EXIT_XSETBV_ENABLED()
     3426            | VBOXVMM_EXIT_SIDT_ENABLED()
     3427            | VBOXVMM_EXIT_LIDT_ENABLED()
     3428            | VBOXVMM_EXIT_SGDT_ENABLED()
     3429            | VBOXVMM_EXIT_LGDT_ENABLED()
     3430            | VBOXVMM_EXIT_SLDT_ENABLED()
     3431            | VBOXVMM_EXIT_LLDT_ENABLED()
     3432            | VBOXVMM_EXIT_STR_ENABLED()
     3433            | VBOXVMM_EXIT_LTR_ENABLED()
     3434            | VBOXVMM_EXIT_GETSEC_ENABLED()
     3435            | VBOXVMM_EXIT_RSM_ENABLED()
     3436            | VBOXVMM_EXIT_RDRAND_ENABLED()
     3437            | VBOXVMM_EXIT_RDSEED_ENABLED()
     3438            | VBOXVMM_EXIT_XSAVES_ENABLED()
     3439            | VBOXVMM_EXIT_XRSTORS_ENABLED()
     3440            | VBOXVMM_EXIT_VMM_CALL_ENABLED()
     3441            | VBOXVMM_EXIT_VMX_VMCLEAR_ENABLED()
     3442            | VBOXVMM_EXIT_VMX_VMLAUNCH_ENABLED()
     3443            | VBOXVMM_EXIT_VMX_VMPTRLD_ENABLED()
     3444            | VBOXVMM_EXIT_VMX_VMPTRST_ENABLED()
     3445            | VBOXVMM_EXIT_VMX_VMREAD_ENABLED()
     3446            | VBOXVMM_EXIT_VMX_VMRESUME_ENABLED()
     3447            | VBOXVMM_EXIT_VMX_VMWRITE_ENABLED()
     3448            | VBOXVMM_EXIT_VMX_VMXOFF_ENABLED()
     3449            | VBOXVMM_EXIT_VMX_VMXON_ENABLED()
     3450            | VBOXVMM_EXIT_VMX_VMFUNC_ENABLED()
     3451            | VBOXVMM_EXIT_VMX_INVEPT_ENABLED()
     3452            | VBOXVMM_EXIT_VMX_INVVPID_ENABLED()
     3453            | VBOXVMM_EXIT_VMX_INVPCID_ENABLED()
     3454            | VBOXVMM_EXIT_VMX_EPT_VIOLATION_ENABLED()
     3455            | VBOXVMM_EXIT_VMX_EPT_MISCONFIG_ENABLED()
     3456            | VBOXVMM_EXIT_VMX_VAPIC_ACCESS_ENABLED()
     3457            | VBOXVMM_EXIT_VMX_VAPIC_WRITE_ENABLED()
     3458           ) != 0;
     3459}
     3460
     3461
     3462/**
    33303463 * The debug runloop.
    33313464 *
     
    34853618    VBOXSTRICTRC rcStrict;
    34863619    if (   !pVCpu->nem.s.fUseDebugLoop
    3487         /** @todo dtrace && (!VBOXVMM_ANY_PROBES_ENABLED() || !hmR0VmxAnyExpensiveProbesEnabled()) */
     3620        && !nemR3DarwinAnyExpensiveProbesEnabled()
    34883621        && !DBGFIsStepping(pVCpu)
    34893622        && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledInt3Breakpoints)
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