Discussion:
[ofw] cl_spinlock_osd.h
Smith, Stan
2013-04-09 23:24:35 UTC
Permalink
Remove code which is duplicated in the implementation of MS code KeAcquireSpinLock(), as indicated by our Microsoft OFA members.

Signed-off-by: ***@intel.com

--- inc/kernel/complib/cl_spinlock_osd.h Wed Mar 06 10:12:19 2013
+++ inc/kernel/complib/cl_spinlock_osd.h Tue Feb 26 12:08:56 2013
@@ -91,15 +91,8 @@
cl_spinlock_acquire(
IN cl_spinlock_t* const p_spinlock )
{
- KIRQL irql = KeGetCurrentIrql();
CL_ASSERT( p_spinlock );
-
- if (irql == DISPATCH_LEVEL) {
- KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );
- p_spinlock->irql = irql;
- }
- else
- KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
+ KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

Basically move from

CL_INLINE void
cl_spinlock_acquire(
IN cl_spinlock_t* const p_spinlock )
{
KIRQL irql = KeGetCurrentIrql();
CL_ASSERT( p_spinlock );

if (irql == DISPATCH_LEVEL) {
KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );
p_spinlock->irql = irql;
}
else
KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

To

CL_INLINE void
cl_spinlock_acquire(
IN cl_spinlock_t* const p_spinlock )
{
CL_ASSERT( p_spinlock );
KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}
Fab Tillier
2013-04-10 17:30:41 UTC
Permalink
Is there similar logic for the release case?

Anyway, this looks good to me.  It would be great to move away from complib altogether (at least in the kernel drivers).

Cheers,
-Fab


From: ofw-***@lists.openfabrics.org [mailto:ofw-***@lists.openfabrics.org] On Behalf Of Smith, Stan
Sent: Tuesday, April 9, 2013 4:25 PM
To: ***@lists.openfabrics.org
Subject: [ofw] cl_spinlock_osd.h

Remove code which is duplicated in the implementation of MS code KeAcquireSpinLock(), as indicated by our Microsoft OFA members.

Signed-off-by: ***@intel.com

--- inc/kernel/complib/cl_spinlock_osd.h             Wed Mar 06 10:12:19 2013
+++ inc/kernel/complib/cl_spinlock_osd.h          Tue Feb 26 12:08:56 2013
@@ -91,15 +91,8 @@
cl_spinlock_acquire(
                IN           cl_spinlock_t* const       p_spinlock )
{
-              KIRQL irql = KeGetCurrentIrql();
               CL_ASSERT( p_spinlock );
-
-              if (irql == DISPATCH_LEVEL) {
-                              KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );
-                              p_spinlock->irql = irql;
-              }
-              else
-                              KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
+             KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

Basically move from

CL_INLINE void
cl_spinlock_acquire(
                IN           cl_spinlock_t* const       p_spinlock )
{
                KIRQL irql = KeGetCurrentIrql();
                CL_ASSERT( p_spinlock );

                if (irql == DISPATCH_LEVEL) {
                                KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );
                                p_spinlock->irql = irql;
                }
                else
                                KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

To

CL_INLINE void
cl_spinlock_acquire(
                IN           cl_spinlock_t* const       p_spinlock )
{
                CL_ASSERT( p_spinlock );
                KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}
Smith, Stan
2013-04-12 18:59:14 UTC
Permalink
Fab writes: Is there similar logic for the release case?

Yes - Similar logic can be applied to the release side - MPI/DAPL/IPOIB testing all passed.


--- C:/Users/scsmith/AppData/Local/Temp/cl_spinlock_osd.h-revBASE.svn000.tmp.h Wed May 16 14:38:16 2012

+++ C:/Users/scsmith/Documents/openIB-windows/ofw/gen1/branches/WOF3-2/inc/kernel/complib/cl_spinlock_osd.h Thu Apr 11 08:43:59 2013

@@ -91,15 +91,8 @@

cl_spinlock_acquire(

IN cl_spinlock_t* const p_spinlock )

{

- KIRQL irql = KeGetCurrentIrql();

CL_ASSERT( p_spinlock );

-

- if (irql == DISPATCH_LEVEL) {

- KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );

- p_spinlock->irql = irql;

- }

- else

- KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );

+ KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );

}


CL_INLINE void cl_spinlock_release(



#ifdef NTDDI_WIN8

@@ -114,10 +107,7 @@

{

CL_ASSERT( p_spinlock );

- if (p_spinlock->irql == DISPATCH_LEVEL)

- KeReleaseSpinLockFromDpcLevel( &p_spinlock->lock );

- else

- KeReleaseSpinLock( &p_spinlock->lock, p_spinlock->irql );

+ KeReleaseSpinLock( &p_spinlock->lock, p_spinlock->irql );

}


From: Fab Tillier [mailto:***@microsoft.com]
Sent: Wednesday, April 10, 2013 10:29 AM
To: Smith, Stan
Subject: RE: cl_spinlock_osd.h

Is there similar logic for the release case?

CL_INLINE void cl_spinlock_release(
IN cl_spinlock_t* const p_spinlock )
{
CL_ASSERT( p_spinlock );

if (p_spinlock->irql == DISPATCH_LEVEL)
KeReleaseSpinLockFromDpcLevel( &p_spinlock->lock );
else
KeReleaseSpinLock( &p_spinlock->lock, p_spinlock->irql );
}

?

Anyway, this looks good to me. It would be great to move away from complib altogether (at least in the kernel drivers).

Cheers,
-Fab

From: ofw-***@lists.openfabrics.org<mailto:ofw-***@lists.openfabrics.org> [mailto:ofw-***@lists.openfabrics.org] On Behalf Of Smith, Stan
Sent: Tuesday, April 9, 2013 4:25 PM
To: ***@lists.openfabrics.org<mailto:***@lists.openfabrics.org>
Subject: [ofw] cl_spinlock_osd.h

Remove code which is duplicated in the implementation of MS code KeAcquireSpinLock(), as indicated by our Microsoft OFA members.

Signed-off-by: ***@intel.com<mailto:***@intel.com>

--- inc/kernel/complib/cl_spinlock_osd.h Wed Mar 06 10:12:19 2013
+++ inc/kernel/complib/cl_spinlock_osd.h Tue Feb 26 12:08:56 2013
@@ -91,15 +91,8 @@
cl_spinlock_acquire(
IN cl_spinlock_t* const p_spinlock )
{
- KIRQL irql = KeGetCurrentIrql();
CL_ASSERT( p_spinlock );
-
- if (irql == DISPATCH_LEVEL) {
- KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );
- p_spinlock->irql = irql;
- }
- else
- KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
+ KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

Basically move from

CL_INLINE void
cl_spinlock_acquire(
IN cl_spinlock_t* const p_spinlock )
{
KIRQL irql = KeGetCurrentIrql();
CL_ASSERT( p_spinlock );

if (irql == DISPATCH_LEVEL) {
KeAcquireSpinLockAtDpcLevel( &p_spinlock->lock );
p_spinlock->irql = irql;
}
else
KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

To

CL_INLINE void
cl_spinlock_acquire(
IN cl_spinlock_t* const p_spinlock )
{
CL_ASSERT( p_spinlock );
KeAcquireSpinLock( &p_spinlock->lock, &p_spinlock->irql );
}

Loading...