[ofa-general] Re: Incorrect atomic usage in ipath driver

Tom Mitchell tom.mitchell at qlogic.com
Tue May 8 14:31:03 PDT 2007


Thank you for the feedback.
Part this code path is necessary for an early revision
of the hardware.  It may be important on ppc.  As it is now,
it is a don't care on x86_64.

The responsible engineers here have seen this and will investigate further.


On May 08 01:21, Benjamin Herrenschmidt wrote:
> Hi !
> 
> So I see this construct:
> 
> 	/* There is already a thread processing this queue. */
> 	if (test_and_set_bit(0, &dd->ipath_rcv_pending))
> 		goto bail;
> 
> 	.../...
> 
> done:
> 	clear_bit(0, &dd->ipath_rcv_pending);
> 	smp_mb__after_clear_bit();
> 
> So that's basically an attempt at doing a spinlock. The problem is your
> barrier is wrong at the end. Better would be:
> 
> 
> done:
> 	smp_mb__before_clear_bit();
> 	clear_bit(0, &dd->ipath_rcv_pending);
> 
> 
> Though it's still less optimal that doing:
> 
> 	if (!spin_trylock(...))
> 		goto bail;
> 
> 	.../...
> 
> done:
> 	spin_unlock(...)
> 
> If you really want to stick to bitops, then you may want to look at
> Nick's upcoming patches adding some bitops with appropriate lock
> semantics.
> 
> Cheers,
> Ben.
> 
> 

-- 
	T o m   M i t c h e l l
	Host Solutions Group
	QLogic Corp.  http://www.qlogic.com




More information about the general mailing list