VirtualBox

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


Ignore:
Timestamp:
Jun 13, 2016 4:04:42 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
108043
Message:

VMM: I/O APIC lockless implementation.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PDMAll.cpp

    r60804 r61685  
    194194    {
    195195        Assert(pVM->pdm.s.IoApic.CTX_SUFF(pfnSetIrq));
     196#ifdef VBOX_WITH_NEW_IOAPIC
     197        pVM->pdm.s.IoApic.CTX_SUFF(pfnSetIrq)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), u8Irq, u8Level, uTagSrc);
     198#else
    196199        pdmLock(pVM);
    197200        pVM->pdm.s.IoApic.CTX_SUFF(pfnSetIrq)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), u8Irq, u8Level, uTagSrc);
    198201        pdmUnlock(pVM);
     202#endif
    199203        return VINF_SUCCESS;
    200204    }
     
    216220    {
    217221        Assert(pVM->pdm.s.IoApic.CTX_SUFF(pfnSendMsi));
     222#ifdef VBOX_WITH_NEW_IOAPIC
     223        pVM->pdm.s.IoApic.CTX_SUFF(pfnSendMsi)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), GCAddr, uValue, uTagSrc);
     224#else
    218225        pdmLock(pVM);
    219226        pVM->pdm.s.IoApic.CTX_SUFF(pfnSendMsi)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), GCAddr, uValue, uTagSrc);
    220227        pdmUnlock(pVM);
     228#endif
    221229        return VINF_SUCCESS;
    222230    }
  • trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r61356 r61685  
    618618    {
    619619        Assert(pVM->pdm.s.IoApic.CTX_SUFF(pfnSetEoi));
    620         pdmLock(pVM);
    621620        pVM->pdm.s.IoApic.CTX_SUFF(pfnSetEoi)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), u8Vector);
    622         pdmUnlock(pVM);
    623621    }
    624622#endif
     
    743741{
    744742    PDMDEV_ASSERT_DEVINS(pDevIns);
     743#ifdef VBOX_WITH_NEW_IOAPIC
     744    AssertFailed();
     745#endif
    745746    return pdmLockEx(pDevIns->Internal.s.pVMR0, rc);
    746747}
     
    751752{
    752753    PDMDEV_ASSERT_DEVINS(pDevIns);
     754#ifdef VBOX_WITH_NEW_IOAPIC
     755    AssertFailed();
     756#endif
    753757    pdmUnlock(pDevIns->Internal.s.pVMR0);
    754758}
     
    798802    if (pVM->pdm.s.IoApic.pDevInsR0)
    799803    {
     804#ifdef VBOX_WITH_NEW_IOAPIC
     805        pVM->pdm.s.IoApic.pfnSetIrqR0(pVM->pdm.s.IoApic.pDevInsR0, iIrq, iLevel, uTagSrc);
     806#else
    800807        pdmLock(pVM);
    801808        pVM->pdm.s.IoApic.pfnSetIrqR0(pVM->pdm.s.IoApic.pDevInsR0, iIrq, iLevel, uTagSrc);
    802809        pdmUnlock(pVM);
     810#endif
    803811    }
    804812    else if (pVM->pdm.s.IoApic.pDevInsR3)
     
    830838    if (pVM->pdm.s.IoApic.pDevInsR0)
    831839    {
     840#ifdef VBOX_WITH_NEW_IOAPIC
     841        pVM->pdm.s.IoApic.pfnSendMsiR0(pVM->pdm.s.IoApic.pDevInsR0, GCPhys, uValue, uTagSrc);
     842#else
    832843        pdmLock(pVM);
    833844        pVM->pdm.s.IoApic.pfnSendMsiR0(pVM->pdm.s.IoApic.pDevInsR0, GCPhys, uValue, uTagSrc);
    834845        pdmUnlock(pVM);
     846#endif
    835847    }
    836848    else
    837     {
    838849        AssertFatalMsgFailed(("Lazy bastards!"));
    839     }
    840850}
    841851
  • trunk/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp

    r61364 r61685  
    281281    {
    282282        Assert(pVM->pdm.s.IoApic.CTX_SUFF(pfnSetEoi));
    283         pdmLock(pVM);
    284283        pVM->pdm.s.IoApic.CTX_SUFF(pfnSetEoi)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), u8Vector);
    285         pdmUnlock(pVM);
    286     }
    287 #endif
    288 }
    289 
     284    }
     285#endif
     286}
    290287
    291288
     
    495492    PDMDEV_ASSERT_DEVINS(pDevIns);
    496493    LogFlow(("pdmR3IoApicHlp_Lock: caller='%s'/%d: rc=%Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     494#ifdef VBOX_WITH_NEW_IOAPIC
     495    AssertFailed();
     496#endif
    497497    return pdmLockEx(pDevIns->Internal.s.pVMR3, rc);
    498498}
     
    504504    PDMDEV_ASSERT_DEVINS(pDevIns);
    505505    LogFlow(("pdmR3IoApicHlp_Unlock: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));
     506#ifdef VBOX_WITH_NEW_IOAPIC
     507    AssertFailed();
     508#endif
    506509    pdmUnlock(pDevIns->Internal.s.pVMR3);
    507510}
  • trunk/src/VBox/VMM/VMMRC/PDMRCDevice.cpp

    r61356 r61685  
    573573    {
    574574        Assert(pVM->pdm.s.IoApic.CTX_SUFF(pfnSetEoi));
    575         pdmLock(pVM);
    576575        pVM->pdm.s.IoApic.CTX_SUFF(pfnSetEoi)(pVM->pdm.s.IoApic.CTX_SUFF(pDevIns), u8Vector);
    577         pdmUnlock(pVM);
    578576    }
    579577#endif
     
    698696{
    699697    PDMDEV_ASSERT_DEVINS(pDevIns);
     698#ifdef VBOX_WITH_NEW_IOAPIC
     699    AssertFailed();
     700#endif
    700701    return pdmLockEx(pDevIns->Internal.s.pVMRC, rc);
    701702}
     
    706707{
    707708    PDMDEV_ASSERT_DEVINS(pDevIns);
     709#ifdef VBOX_WITH_NEW_IOAPIC
     710    AssertFailed();
     711#endif
    708712    pdmUnlock(pDevIns->Internal.s.pVMRC);
    709713}
     
    753757    if (pVM->pdm.s.IoApic.pDevInsRC)
    754758    {
     759#ifdef VBOX_WITH_NEW_IOAPIC
     760        pVM->pdm.s.IoApic.pfnSetIrqRC(pVM->pdm.s.IoApic.pDevInsRC, iIrq, iLevel, uTagSrc);
     761#else
    755762        pdmLock(pVM);
    756763        pVM->pdm.s.IoApic.pfnSetIrqRC(pVM->pdm.s.IoApic.pDevInsRC, iIrq, iLevel, uTagSrc);
    757764        pdmUnlock(pVM);
     765#endif
    758766    }
    759767    else if (pVM->pdm.s.IoApic.pDevInsR3)
     
    786794    if (pVM->pdm.s.IoApic.pDevInsRC)
    787795    {
     796#ifdef VBOX_WITH_NEW_IOAPIC
     797        pVM->pdm.s.IoApic.pfnSendMsiRC(pVM->pdm.s.IoApic.pDevInsRC, GCPhys, uValue, uTagSrc);
     798#else
    788799        pdmLock(pVM);
    789800        pVM->pdm.s.IoApic.pfnSendMsiRC(pVM->pdm.s.IoApic.pDevInsRC, GCPhys, uValue, uTagSrc);
    790801        pdmUnlock(pVM);
     802#endif
    791803    }
    792804    else
    793     {
    794805        AssertFatalMsgFailed(("Lazy bastarts!"));
    795     }
    796806}
    797807
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