VirtualBox

Changeset 32458 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Sep 13, 2010 4:30:10 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
65829
Message:

VMM: Return to ring-3 when DMA work is pending.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp

    r31636 r32458  
    186186     */
    187187    if (    rc == VINF_SUCCESS
    188         &&  (   VM_FF_ISPENDING(pVM, VM_FF_TM_VIRTUAL_SYNC | VM_FF_REQUEST | VM_FF_PGM_NO_MEMORY)
     188        &&  (   VM_FF_ISPENDING(pVM, VM_FF_TM_VIRTUAL_SYNC | VM_FF_REQUEST | VM_FF_PGM_NO_MEMORY | VM_FF_PDM_DMA)
    189189             || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_TIMER | VMCPU_FF_TO_R3 | VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC | VMCPU_FF_REQUEST | VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL)
    190190            )
     
    205205        /* The Virtual Sync clock has stopped. */
    206206        else if (VM_FF_ISPENDING(pVM, VM_FF_TM_VIRTUAL_SYNC))
     207            rc = VINF_EM_RAW_TO_R3;
     208        /* DMA work pending? */
     209        else if (VM_FF_ISPENDING(pVM, VM_FF_PDM_DMA))
    207210            rc = VINF_EM_RAW_TO_R3;
    208211        /* Pending interrupt: dispatch it. */
     
    243246#endif
    244247        }
     248        /** @todo move up before SyncCR3 */
    245249        /* Pending request packets might contain actions that need immediate attention, such as pending hardware interrupts. */
    246250        else if (   VM_FF_ISPENDING(pVM, VM_FF_REQUEST)
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp

    r31786 r32458  
    10301030
    10311031    /* Check for pending actions that force us to go back to ring 3. */
    1032     if (    VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK | VM_FF_REQUEST | VM_FF_PGM_POOL_FLUSH_PENDING)
     1032    if (    VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK | VM_FF_REQUEST | VM_FF_PGM_POOL_FLUSH_PENDING | VM_FF_PDM_DMA)
    10331033        ||  VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK | VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_REQUEST))
    10341034    {
     
    10721072        {
    10731073            rc = VINF_PGM_POOL_FLUSH_PENDING;
     1074            goto end;
     1075        }
     1076
     1077        /* Check if DMA work is pending (2nd+ run). */
     1078        if (VM_FF_ISPENDING(pVM, VM_FF_PDM_DMA) && cResume > 1)
     1079        {
     1080            rc = VINF_EM_RAW_TO_R3;
    10741081            goto end;
    10751082        }
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r32419 r32458  
    24352435
    24362436    /* Check for pending actions that force us to go back to ring 3. */
    2437     if (    VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK | VM_FF_REQUEST | VM_FF_PGM_POOL_FLUSH_PENDING)
     2437    if (    VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK | VM_FF_REQUEST | VM_FF_PGM_POOL_FLUSH_PENDING | VM_FF_PDM_DMA)
    24382438        ||  VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK | VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_REQUEST))
    24392439    {
     
    24772477        {
    24782478            rc = VINF_PGM_POOL_FLUSH_PENDING;
     2479            goto end;
     2480        }
     2481
     2482        /* Check if DMA work is pending (2nd+ run). */
     2483        if (VM_FF_ISPENDING(pVM, VM_FF_PDM_DMA) && cResume > 1)
     2484        {
     2485            rc = VINF_EM_RAW_TO_R3;
    24792486            goto end;
    24802487        }
Note: See TracChangeset for help on using the changeset viewer.

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