VirtualBox

Ignore:
Timestamp:
Apr 27, 2010 2:05:25 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
60746
Message:

IntNet,VBoxNetFlt: Cleaned up the locking protocol between IntNet and NetFlt. Eleminated the out-bound trunk lock that IntNet always took when calling NetFlt.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c

    r28800 r28830  
    3737
    3838#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
     39#error "this code is broken"
    3940
    4041#include <VBox/sup.h>
     
    107108    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    108109    Log(("vboxNetAdpSetStateWithLock: pThis=%p, state=%d.\n", pThis, enmNewState));
    109     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     110    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    110111    vboxNetAdpSetState(pThis, enmNewState);
    111     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     112    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    112113}
    113114
     
    125126    VBOXNETADPSTATE enmState;
    126127    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    127     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     128    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    128129    enmState = vboxNetAdpGetState(pThis);
    129     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     130    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    130131    Log(("vboxNetAdpGetStateWithLock: pThis=%p, state=%d.\n", pThis, enmState));
    131132    return enmState;
     
    148149    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    149150
    150     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     151    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    151152    enmActualState = vboxNetAdpGetState(pThis); /** @todo r=bird: ASMAtomicCmpXchgU32()*/
    152153    if (enmActualState == enmOldState)
     
    154155    else
    155156        fRc = false;
    156     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     157    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    157158
    158159    if (fRc)
     
    179180        RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    180181        PVBOXNETADP pThis = &pGlobals->aAdapters[i];
    181         RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     182        RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    182183        if (    vboxNetAdpGetState(pThis)
    183184            &&  !strcmp(pThis->szName, pszName))
    184185        {
    185             RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     186            RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    186187            return pThis;
    187188        }
    188         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     189        RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    189190    }
    190191    return NULL;
     
    346347    AssertPtr(pThis);
    347348    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
    348     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     349    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    349350    if (vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Active)
    350351    {
     
    353354        vboxNetAdpBusy(pThis);
    354355    }
    355     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     356    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    356357    Log(("vboxNetAdpPrepareToReceive: fCanReceive=%d.\n", fCanReceive));
    357358
     
    416417     * Do a retain/busy, invoke the OS specific code.
    417418     */
    418     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     419    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    419420    if (vboxNetAdpGetState(pThis) != kVBoxNetAdpState_Active)
    420421    {
    421         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     422        RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    422423        Log(("vboxNetAdpReceive: Dropping incoming packet for inactive interface %s.\n",
    423424             pThis->szName));
     
    426427    vboxNetAdpRetain(pThis);
    427428    vboxNetAdpBusy(pThis);
    428     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     429    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    429430
    430431    rc = vboxNetAdpPortOsXmit(pThis, pSG, fDst);
     
    504505
    505506    Log(("vboxNetAdpPortSetActive: pThis=%p, fActive=%d, state before: %d.\n", pThis, fActive, vboxNetAdpGetState(pThis)));
    506     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     507    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    507508
    508509    fPreviouslyActive = vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Active;
     
    522523    }
    523524
    524     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     525    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    525526    Log(("vboxNetAdpPortSetActive: state after: %RTbool.\n", vboxNetAdpGetState(pThis)));
    526527    return fPreviouslyActive;
     
    550551     * Disconnect and release it.
    551552     */
    552     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     553    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    553554    //Assert(vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Connected);
    554555    Assert(!pThis->cBusy);
    555556    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Transitional);
    556     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     557    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    557558
    558559    vboxNetAdpOsDisconnectIt(pThis);
    559560    pThis->pSwitchPort = NULL;
    560561
    561     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     562    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    562563    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Available);
    563     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     564    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    564565
    565566    vboxNetAdpRelease(pThis);
     
    606607            rc = vboxNetAdpOsCreate(pThis, &Mac);
    607608            *ppNew = pThis;
    608             RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     609            RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    609610            vboxNetAdpSetState(pThis, kVBoxNetAdpState_Available);
    610             RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     611            RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    611612            return rc;
    612613        }
     
    622623    RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
    623624
    624     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     625    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    625626    if (vboxNetAdpGetState(pThis) != kVBoxNetAdpState_Available || pThis->cBusy)
    626627    {
    627         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     628        RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    628629        return VERR_INTNET_FLT_IF_BUSY;
    629630    }
    630631    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Transitional);
    631     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     632    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    632633    vboxNetAdpRelease(pThis);
    633634
    634635    vboxNetAdpOsDestroy(pThis);
    635636
    636     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     637    RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp);
    637638    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Invalid);
    638     RTSpinlockRelease(pThis->hSpinlock, &Tmp);
     639    RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp);
    639640
    640641    return rc;
     
    842843    pNew->MyPort.pfnRelease             = vboxNetAdpPortRelease;
    843844    pNew->MyPort.pfnDisconnectAndRelease= vboxNetAdpPortDisconnectAndRelease;
    844     pNew->MyPort.pfnSetActive           = vboxNetAdpPortSetActive;
     845    pNew->MyPort.pfnSetState            = vboxNetAdpPortSetState;
    845846    pNew->MyPort.pfnWaitForIdle         = vboxNetAdpPortWaitForIdle;
    846     pNew->MyPort.pfnGetMacAddress       = vboxNetAdpPortGetMacAddress;
    847847    pNew->MyPort.pfnXmit                = vboxNetAdpPortXmit;
    848848    pNew->MyPort.u32VersionEnd          = INTNETTRUNKIFPORT_VERSION;
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