[PATCH] ARM: locks: remove opencoded #16 for ticket shift

Nicolas Pitre nicolas.pitre at linaro.org
Thu Jul 18 13:53:06 EDT 2013


On Thu, 18 Jul 2013, Will Deacon wrote:

> On Wed, Jul 17, 2013 at 02:56:59PM +0100, Nicolas Pitre wrote:
> > On Mon, 15 Jul 2013, Will Deacon wrote:
> > 
> > > The ticket width of our spinlocks is defined by TICKET_SHIFT, so remove
> > > the opencoded #16 from the trylock implementation.
> > > 
> > > Signed-off-by: Will Deacon <will.deacon at arm.com>
> > 
> > This is pointless.
> 
> I disagree (see below).
> 
> > >  		"	ldrex	%0, [%3]\n"
> > >  		"	mov	%2, #0\n"
> > > -		"	subs	%1, %0, %0, ror #16\n"
> > 
> > Any value other than 16 would break that code.  You'd rather ensure it 
> > never gets defined to anything else.
> 
> There are two aspects to the ticket lock:
> 
>   1. The size of each ticket
>   2. The location of the next ticket within the 32-bit lock word
> 
> TICKET_SHIFT actually defines (2) and could be 0 or 16, hence why I was
> making this small cosmetic change.

Doesn't matter where the location of the next ticket is.  Whether it is 
0 or 16, for the above code to work, it *must* always perform a ror #16.  
Hence tying the ror constant with TICKET_SHIFT is wrong.


Nicolas



More information about the linux-arm-kernel mailing list