VirtualBox

Changeset 99999 in vbox


Ignore:
Timestamp:
May 30, 2023 5:50:03 AM (20 months ago)
Author:
vboxsync
Message:

VMM/EM: WFI/WFE ignore the IRQ and FIQ mask flag and always return when an external interrupt is triggered (just like mwait on x86), disable the mwait path for ARM entirely as it isn't used there, bugref:10389

File:
1 edited

Legend:

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

    r99995 r99999  
    25462546                    if (TRPMHasTrap(pVCpu))
    25472547                        rc = VINF_EM_RESCHEDULE;
     2548#if !defined(VBOX_VMM_TARGET_ARMV8)
    25482549                    /* MWAIT has a special extension where it's woken up when
    25492550                       an interrupt is pending even when IF=0. */
     
    25512552                             ==                            (EMMWAIT_FLAG_ACTIVE | EMMWAIT_FLAG_BREAKIRQIF0))
    25522553                    {
    2553                         rc = VMR3WaitHalted(pVM, pVCpu, false /*fIgnoreInterrupts*/);
     2554                        rc = VMR3WaitHalted(pVM, pVCpu, 0 /*fFlags*/);
    25542555                        if (rc == VINF_SUCCESS)
    25552556                        {
    2556 #if defined(VBOX_VMM_TARGET_ARMV8)
    2557                             if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_IRQ | VMCPU_FF_INTERRUPT_FIQ
    2558                                                          | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT))
    2559                             {
    2560                                 Log(("EMR3ExecuteVM: Triggering reschedule on pending IRQ after MWAIT\n"));
    2561                                 rc = VINF_EM_RESCHEDULE;
    2562                             }
    2563 #else
    25642557                            if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_UPDATE_APIC))
    25652558                                APICUpdatePendingInterrupts(pVCpu);
     
    25722565                                rc = VINF_EM_RESCHEDULE;
    25732566                            }
    2574 #endif
     2567
    25752568                        }
    25762569                    }
     2570#endif
    25772571                    else
    25782572                    {
    25792573#if defined(VBOX_VMM_TARGET_ARMV8)
    2580                         uint32_t fWaitHalted =   (CPUMGetGuestIrqMasked(pVCpu) ? VMWAITHALTED_F_IGNORE_IRQS : 0)
    2581                                                | (CPUMGetGuestFiqMasked(pVCpu) ? VMWAITHALTED_F_IGNORE_FIQS : 0);
     2574                        const uint32_t fWaitHalted = 0; /* WFI/WFE always return when an interrupt happens. */
    25822575#else
    2583                         uint32_t fWaitHalted = (CPUMGetGuestEFlags(pVCpu) & X86_EFL_IF) ? 0 : VMWAITHALTED_F_IGNORE_IRQS;
     2576                        const uint32_t fWaitHalted = (CPUMGetGuestEFlags(pVCpu) & X86_EFL_IF) ? 0 : VMWAITHALTED_F_IGNORE_IRQS;
    25842577#endif
    25852578                        rc = VMR3WaitHalted(pVM, pVCpu, fWaitHalted);
     
    25872580                           check VMCPU_FF_UPDATE_APIC here. */
    25882581                        if (   rc == VINF_SUCCESS
    2589                             && VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT))
     2582#if defined(VBOX_VMM_TARGET_ARMV8)
     2583                            && VMCPU_FF_IS_ANY_SET(pVCpu,   VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_VTIMER_ACTIVATED
     2584                                                          | VMCPU_FF_INTERRUPT_FIQ | VMCPU_FF_INTERRUPT_IRQ)
     2585#else
     2586                            && VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT)
     2587#endif
     2588                            )
    25902589                        {
    25912590                            Log(("EMR3ExecuteVM: Triggering reschedule on pending NMI/SMI/UNHALT after HLT\n"));
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