Re: [PATCH 7/10] local_t : powerpc

Paul Mackerras <[email protected]>
Newsgroups gmane.linux.systemtap,gmane.linux.kernel,gmane.linux.ports.ppc64.devel,gmane.linux.kernel.tracing
Message-ID <[email protected]>
Mathieu Desnoyers writes:

> +static __inline__ int local_dec_if_positive(local_t *l)
> +{
> +	int t;
> +
> +	__asm__ __volatile__(
> +"1:	lwarx	%0,0,%1		# local_dec_if_positive\n\
> +	addic.	%0,%0,-1\n\
> +	blt-	2f\n"
> +	PPC405_ERR77(0,%1)
> +"	stwcx.	%0,0,%1\n\
> +	bne-	1b"

This has the same bugs that we fixed recently in atomic_dec_if_positive;
first, on 64-bit machines, the lwarx will zero-extend the word loaded
from memory, and so the result of the addic will be negative only if
the word was originally 0.  Secondly, even on 32-bit machines,
0x80000000 will be considered positive since decrementing it gives
0x7fffffff, which is positive.

> +/* Use these for per-cpu local_t variables: on some archs they are
> + * much more efficient than these naive implementations.  Note they take
> + * a variable, not an address.
> + *
> + * This could be done better if we moved the per cpu data directly
> + * after GS.
> + */

What's "GS"?  Does this comment really apply on powerpc?

Paul.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.