VirtualBox

Changeset 20829 in vbox for trunk


Ignore:
Timestamp:
Jun 23, 2009 1:00:16 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48968
Message:

Check and assume PDM locking is performed when calling the APIC interface.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevAPIC.cpp

    r20817 r20829  
    591591{
    592592    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
     593    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    593594    APICState *s = getLapic(dev); /** @todo fix interface */
    594595    Log(("cpu_set_apic_base: %016RX64\n", val));
     
    698699{
    699700    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
     701    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    700702    APICState *s = getLapic(dev); /** @todo fix interface */
    701703    LogFlow(("apicGetBase: %016llx\n", (uint64_t)s->apicbase));
     
    706708{
    707709    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
     710    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    708711    APICState *s = getLapicById(dev, idCpu);
    709712    LogFlow(("apicSetTPR: val=%#x (trp %#x -> %#x)\n", val, s->tpr, val));
     
    713716PDMBOTHCBDECL(uint8_t) apicGetTPR(PPDMDEVINS pDevIns, VMCPUID idCpu)
    714717{
     718    /* We don't perform any locking here as that would cause a lot of contention for VT-x/AMD-V. */
    715719    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
    716720    APICState *s = getLapicById(dev, idCpu);
     
    733737{
    734738    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
     739    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    735740    int rc = VINF_SUCCESS;
    736741
     
    838843{
    839844    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
     845    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    840846
    841847    if (dev->enmVersion < PDMAPICVERSION_X2APIC)
     
    928934{
    929935    APICDeviceInfo *dev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *);
     936    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    930937    LogFlow(("apicBusDeliverCallback: pDevIns=%p u8Dest=%#x u8DestMode=%#x u8DeliveryMode=%#x iVector=%#x u8Polarity=%#x u8TriggerMode=%#x\n",
    931938             pDevIns, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode));
     
    10171024    if (!dev)
    10181025        return false;
     1026
     1027    /* We don't perform any locking here as that would cause a lot of contention for VT-x/AMD-V. */
     1028
    10191029    APICState *s = getLapic(dev); /** @todo fix interface */
    10201030
     
    12611271    }
    12621272
    1263     APIC_LOCK(dev, VERR_INTERNAL_ERROR);
     1273    Assert(PDMCritSectIsOwner(dev->CTX_SUFF(pCritSect)));
    12641274
    12651275    APICState *s = getLapic(dev);  /** @todo fix interface */
     
    12681278    if (!(s->spurious_vec & APIC_SV_ENABLE)) {
    12691279        Log(("CPU%d: apic_get_interrupt: returns -1 (APIC_SV_ENABLE)\n", s->phys_id));
    1270         intno = -1;
    1271         goto done;
     1280        return -1;
    12721281    }
    12731282
     
    12761285    if (intno < 0) {
    12771286        Log(("CPU%d: apic_get_interrupt: returns -1 (irr)\n", s->phys_id));
    1278         intno = -1;
    1279         goto done;
     1287        return -1;
    12801288    }
    12811289    if (s->tpr && (uint32_t)intno <= s->tpr) {
    12821290        Log(("apic_get_interrupt: returns %d (sp)\n", s->spurious_vec & 0xff));
    1283         intno = s->spurious_vec & 0xff;
    1284         goto done;
     1291        return s->spurious_vec & 0xff;
    12851292    }
    12861293    reset_bit(s->irr, intno);
     
    12881295    apic_update_irq(dev, s);
    12891296    LogFlow(("CPU%d: apic_get_interrupt: returns %d\n", s->phys_id, intno));
    1290  done:
    1291     APIC_UNLOCK(dev);
    12921297    return intno;
    12931298}
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