cl_spinlock_acquire( \r
IN cl_spinlock_t* const p_spinlock )\r
{\r
+ KIRQL irql = KeGetCurrentIrql();\r
CL_ASSERT( p_spinlock );\r
\r
- KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );\r
+ if (irql == DISPATCH_LEVEL) {\r
+ KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );\r
+ p_spinlock->irql = irql;\r
+ }\r
+ else\r
+ KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );\r
}\r
\r
\r
{\r
CL_ASSERT( p_spinlock );\r
\r
- KeReleaseSpinLock( &p_spinlock->lock, p_spinlock->irql );\r
+ if (p_spinlock->irql == DISPATCH_LEVEL)\r
+ KeReleaseSpinLockFromDpcLevel( &p_spinlock->lock );\r
+ else\r
+ KeReleaseSpinLock( &p_spinlock->lock, p_spinlock->irql );\r
}\r
\r
\r