From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Chris Snook <csnook@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
torvalds@linux-foundation.org, netdev@vger.kernel.org,
akpm@linux-foundation.org, ak@suse.de, heiko.carstens@de.ibm.com,
davem@davemloft.net, schwidefsky@de.ibm.com,
wensong@linux-vs.org, horms@verge.net.au, wjiang@resilience.com,
cfriesen@nortel.com, zlynx@acm.org, rpjday@mindspring.com,
jesper.juhl@gmail.com
Subject: Re: [PATCH 1/24] make atomic_read() behave consistently on alpha
Date: Thu, 9 Aug 2007 07:32:55 -0700 [thread overview]
Message-ID: <20070809143255.GA8424@linux.vnet.ibm.com> (raw)
In-Reply-To: <20070809132442.GA13042@shell.boston.redhat.com>
On Thu, Aug 09, 2007 at 09:24:42AM -0400, Chris Snook wrote:
> From: Chris Snook <csnook@redhat.com>
>
> Purify volatile use for atomic[64]_t on alpha.
Why not the same access-once semantics for atomic_set() as
for atomic_read()? As this patch stands, it might introduce
architecture-specific compiler-induced bugs due to the fact that
atomic_set() used to imply volatile behavior but no longer does.
See below for one approach to fixing this.
> Signed-off-by: Chris Snook <csnook@redhat.com>
>
> --- linux-2.6.23-rc2-orig/include/asm-alpha/atomic.h 2007-07-08 19:32:17.000000000 -0400
> +++ linux-2.6.23-rc2/include/asm-alpha/atomic.h 2007-08-09 09:19:00.000000000 -0400
> @@ -14,18 +14,22 @@
>
>
> /*
> - * Counter is volatile to make sure gcc doesn't try to be clever
> - * and move things around on us. We need to use _exactly_ the address
> - * the user gave us, not some alias that contains the same information.
> + * Make sure gcc doesn't try to be clever and move things around
> + * on us. We need to use _exactly_ the address the user gave us,
> + * not some alias that contains the same information.
> */
> -typedef struct { volatile int counter; } atomic_t;
> -typedef struct { volatile long counter; } atomic64_t;
> +typedef struct { int counter; } atomic_t;
> +typedef struct { long counter; } atomic64_t;
>
> #define ATOMIC_INIT(i) ( (atomic_t) { (i) } )
> #define ATOMIC64_INIT(i) ( (atomic64_t) { (i) } )
>
> -#define atomic_read(v) ((v)->counter + 0)
> -#define atomic64_read(v) ((v)->counter + 0)
> +/*
> + * Casting to volatile here minimizes the need for barriers,
> + * without having to declare the type itself as volatile.
> + */
> +#define atomic_read(v) (*(volatile int *)&(v)->counter + 0)
> +#define atomic64_read(v) (*(volatile long *)&(v)->counter + 0)
>
> #define atomic_set(v,i) ((v)->counter = (i))
> #define atomic64_set(v,i) ((v)->counter = (i))
How about:
#define atomic_set(v,i) ((*(volatile int *)&(v)->counter) = (i))
#define atomic64_set(v,i) ((*(volatile long *)&(v)->counter) = (i))
Thanx, Paul
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2007-08-09 14:32 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-09 13:24 [PATCH 1/24] make atomic_read() behave consistently on alpha Chris Snook
2007-08-09 14:32 ` Paul E. McKenney [this message]
2007-08-09 14:53 ` Chris Snook
2007-08-09 15:04 ` Paul E. McKenney
2007-08-09 15:24 ` Chris Snook
2007-08-09 15:50 ` Segher Boessenkool
2007-08-09 16:20 ` Chris Snook
2007-08-09 18:38 ` Segher Boessenkool
2007-08-09 19:05 ` Chris Snook
2007-08-09 19:19 ` Segher Boessenkool
2007-08-09 19:25 ` Geert Uytterhoeven
2007-08-09 19:47 ` Chris Snook
2007-08-09 23:02 ` Segher Boessenkool
2007-08-09 16:10 ` Paul E. McKenney
2007-08-09 16:36 ` Chris Snook
2007-08-09 16:58 ` Paul E. McKenney
2007-08-09 17:14 ` Chris Snook
2007-08-09 17:41 ` Paul E. McKenney
2007-08-09 18:13 ` Chris Snook
2007-08-09 18:45 ` Paul E. McKenney
2007-08-09 19:24 ` Chris Snook
2007-08-10 1:28 ` Paul E. McKenney
2007-08-10 19:49 ` Chris Snook
2007-08-10 20:26 ` Paul E. McKenney
2007-08-09 19:17 ` Segher Boessenkool
2007-08-09 18:51 ` Segher Boessenkool
2007-08-09 19:30 ` Chris Snook
2007-08-10 8:21 ` Herbert Xu
2007-08-10 9:08 ` Andi Kleen
2007-08-10 15:02 ` Paul E. McKenney
2007-08-10 20:07 ` Segher Boessenkool
2007-08-11 0:00 ` Herbert Xu
2007-08-11 0:38 ` Segher Boessenkool
2007-08-11 0:43 ` Herbert Xu
2007-08-11 0:50 ` Segher Boessenkool
2007-08-11 4:38 ` Valdis.Kletnieks
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070809143255.GA8424@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=cfriesen@nortel.com \
--cc=csnook@redhat.com \
--cc=davem@davemloft.net \
--cc=heiko.carstens@de.ibm.com \
--cc=horms@verge.net.au \
--cc=jesper.juhl@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rpjday@mindspring.com \
--cc=schwidefsky@de.ibm.com \
--cc=torvalds@linux-foundation.org \
--cc=wensong@linux-vs.org \
--cc=wjiang@resilience.com \
--cc=zlynx@acm.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.