[PATCH] atomic_dec_if_positive sign extension fix

Paul Mackerras paulus at samba.org
Mon Jan 15 10:09:42 EST 2007


Robert Jennings writes:

> Please apply for 2.6.20.  If an atomic counter is explicitly set to a
> negative value the atomic_dec_if_positive function will decrement and
> store the next smallest value in the atomic counter contrary to it's
> intended operation.  

[snip]

>  	__asm__ __volatile__(
>  	LWSYNC_ON_SMP
>  "1:	lwarx	%0,0,%1		# atomic_dec_if_positive\n\
> +	extsw	%0,%0\n\
>  	addic.	%0,%0,-1\n\
>  	blt-	2f\n"
>  	PPC405_ERR77(0,%1)

NAK: Good fix for 64-bit, but it will break 32-bit.  I think a better
fix would be to use a cmpwi after the lwarx, and use addi rather than
addic..

Paul.



More information about the Linuxppc-dev mailing list