public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
From: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
To: 'Christoph Lameter' <clameter@sgi.com>,
	Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Zoltan Menyhart <Zoltan.Menyhart@bull.net>,
	"Boehm, Hans" <hans.boehm@hp.com>,
	"Grundler, Grant G" <grant.grundler@hp.com>,
	akpm@osdl.org, linux-kernel@vger.kernel.org,
	linux-ia64@vger.kernel.org
Subject: RE: Synchronizing Bit operations V2
Date: Fri, 31 Mar 2006 00:39:38 +0000	[thread overview]
Message-ID: <200603310038.k2V0crg26704@unix-os.sc.intel.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0603301615540.2023@schroedinger.engr.sgi.com>
In-Reply-To: <Pine.LNX.4.64.0603301615540.2023@schroedinger.engr.sgi.com>

Christoph Lameter wrote on Thursday, March 30, 2006 4:18 PM
> Note that the current semantics for bitops IA64 are broken. Both
> smp_mb__after/before_clear_bit are now set to full memory barriers
> to compensate

Why you say that?  clear_bit has built-in acq or rel semantic depends
on how you define it. I think only one of smp_mb__after/before need to
be smp_mb?



>  static __inline__ void
>  clear_bit (int nr, volatile void *addr)
>  {
> -	__u32 mask, old, new;
> -	volatile __u32 *m;
> -	CMPXCHG_BUGCHECK_DECL
> -
> -	m = (volatile __u32 *) addr + (nr >> 5);
> -	mask = ~(1 << (nr & 31));
> -	do {
> -		CMPXCHG_BUGCHECK(m);
> -		old = *m;
> -		new = old & mask;
> -	} while (cmpxchg_acq(m, old, new) != old);
> +	clear_bit_mode(nr, addr, MODE_ATOMIC);
>  }

I would make that MODE_RELEASE for clear_bit, simply to match the
observation that clear_bit is usually used in unlock path and have
potential less surprises.


> +static __inline__ void
> +set_bit_mode (int nr, volatile void *addr, int mode)
> +{
> +	__u32 bit, old, new;
> +	volatile __u32 *m;
> +	CMPXCHG_BUGCHECK_DECL
> +
> +	m = (volatile __u32 *) addr + (nr >> 5);
> +	bit = 1 << (nr & 31);
> +
> +	if (mode = MODE_NON_ATOMIC) {
> +		*m |= bit;
> +		return;
> +	}

Please kill all volatile declaration, because for non-atomic version,
you don't need to do any memory ordering, but compiler automatically
adds memory order because of volatile.  It's safe to kill them because
cmpxchg later has explicit mode in there.

Same thing goes to all other bit ops.

- Ken

  reply	other threads:[~2006-03-31  0:39 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-30 21:02 Bit operations with the ability to specify a synchronization mode Christoph Lameter
2006-03-31  0:18 ` Synchronizing Bit operations V2 Christoph Lameter
2006-03-31  0:39   ` Chen, Kenneth W [this message]
2006-03-31  0:42     ` Christoph Lameter
2006-03-31  0:45     ` Christoph Lameter
2006-03-31  0:42   ` David Mosberger-Tang
2006-03-31  0:49     ` Christoph Lameter
2006-03-31  6:10     ` Chris Wright
2006-03-31  0:44   ` Nick Piggin
2006-03-31  3:28     ` Christoph Lameter
2006-03-31  4:12       ` Nick Piggin
2006-03-31 17:43         ` Christoph Lameter
2006-04-01  2:56           ` Nick Piggin
2006-03-31  0:50   ` Chen, Kenneth W
2006-03-31  0:51     ` Christoph Lameter
2006-03-31  0:53   ` Chen, Kenneth W
2006-03-31  0:55     ` Christoph Lameter
2006-03-31  0:56   ` Luck, Tony
2006-03-31  0:58     ` Christoph Lameter
2006-04-02  7:59       ` Russell King
2006-03-31  0:59   ` Chen, Kenneth W
2006-03-31  1:09     ` Christoph Lameter
2006-03-31  1:04   ` Chen, Kenneth W
2006-03-31  1:13     ` Christoph Lameter
2006-03-31  1:13   ` Chen, Kenneth W
2006-03-31  1:29   ` Chen, Kenneth W
2006-03-31  1:37     ` Christoph Lameter
2006-03-31  1:33   ` linux
2006-03-31  1:40     ` Christoph Lameter
2006-03-31  2:35   ` Chen, Kenneth W
2006-03-31  2:37     ` Christoph Lameter
2006-03-31  2:45   ` Chen, Kenneth W
2006-03-31  2:53     ` Nick Piggin
2006-03-31  3:01     ` Christoph Lameter
2006-03-31  2:51   ` Chen, Kenneth W
2006-03-31  2:55     ` Christoph Lameter
2006-03-31  3:02   ` Chen, Kenneth W
2006-03-31  3:08     ` Christoph Lameter
2006-03-31  3:10   ` Chen, Kenneth W
2006-03-31  3:12     ` Christoph Lameter
2006-03-31  3:11   ` Chen, Kenneth W
2006-03-31  3:14   ` Chen, Kenneth W
2006-03-31  3:20     ` Christoph Lameter
2006-03-31  3:17   ` Chen, Kenneth W
2006-03-31  3:23   ` Chen, Kenneth W
2006-03-31  3:37   ` Chen, Kenneth W
2006-03-31  6:15   ` Chen, Kenneth W
2006-03-31  7:34     ` Nick Piggin
2006-03-31 13:28   ` Andi Kleen
2006-03-31 16:22     ` Hans Boehm
2006-03-31 16:37       ` Andi Kleen
2006-03-31 17:46         ` Christoph Lameter
2006-03-31 17:45     ` Christoph Lameter
2006-03-31 17:48       ` Andi Kleen
2006-03-31 17:56         ` Christoph Lameter
2006-04-02  7:54           ` Russell King
2006-03-31 18:57   ` Chen, Kenneth W
2006-03-31 19:41   ` Chen, Kenneth W
2006-03-31 21:15     ` Christoph Lameter
2006-03-31 21:24   ` Chen, Kenneth W
2006-03-31 21:28     ` Christoph Lameter
2006-04-01  2:16       ` Nick Piggin

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=200603310038.k2V0crg26704@unix-os.sc.intel.com \
    --to=kenneth.w.chen@intel.com \
    --cc=Zoltan.Menyhart@bull.net \
    --cc=akpm@osdl.org \
    --cc=clameter@sgi.com \
    --cc=grant.grundler@hp.com \
    --cc=hans.boehm@hp.com \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nickpiggin@yahoo.com.au \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox