NdisDprAcquireSpinLock (NDIS 5.1) function

Note   NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.

NdisDprAcquireSpinLock acquires a spin lock so the caller can synchronize access to resources shared among non-ISR driver functions in a multiprocessor-safe way.

Syntax


VOID NdisDprAcquireSpinLock(
  _In_  PNDIS_SPIN_LOCK SpinLock
);

Parameters

SpinLock [in]

Pointer to an opaque spin lock, already initialized by the caller.

Return value

None

Remarks

The NIC driver must initialize a variable of type NDIS_SPIN_LOCK with NdisAllocateSpinLock before it calls any other Ndis..SpinLock function. The driver must provide resident storage for the spin lock(s) it uses.

NdisDprAcquireSpinLock is an optimized version of NdisAcquireSpinLock that a miniport driver can call only while running at IRQL = DISPATCH_LEVEL.

After acquiring a spin lock with NdisDprAcquireSpinLock, the caller must release that lock with a call to NdisDprReleaseSpinLock. A NIC driver must call NdisDprReleaseSpinLock following each call to NdisDprAcquireSpinLock. Otherwise, a deadlock occurs, hanging the driver.

A spin lock acquired with NdisDprAcquireSpinLock must be released with NdisDprReleaseSpinLock. A spin lock acquired with NdisAcquireSpinLock must be released with NdisReleaseSpinLock.

A driver should never hold a spin lock for an extended period (more than a few instructions). Holding a spin lock for longer than 25 microseconds degrades both system and driver performance.

A miniport driver cannot use a spin lock to protect resources that its other functions share with the MiniportISR and/or MiniportDisableInterrupt functions. Instead, a miniport driver must call NdisMSynchronizeWithInterrupt so that its MiniportSynchronizeISR function accesses such shared resources at the same DIRQL at which its MiniportISR and/or MiniportDisableInterrupt functions do.

For more information about acquiring and releasing NDIS spin locks, see Synchronization and Notification in Network Drivers.

Requirements

Version

See NdisDprAcquireSpinLock.

Header

Ndis.h (include Ndis.h)

IRQL

DISPATCH_LEVEL

See also

MiniportDisableInterrupt
MiniportISR
MiniportSynchronizeISR
MiniportTimer
NdisAcquireSpinLock
NdisAllocateSpinLock
NdisDprReleaseSpinLock
NdisMSynchronizeWithInterrupt

 

 

Send comments about this topic to Microsoft

Show:
© 2014 Microsoft