From: Daniel Jacobowitz <dan@debian.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: Re: Fix some (maybe) missing syncs in bitops.h
Date: Mon, 24 Jan 2005 16:21:25 -0500 [thread overview]
Message-ID: <20050124212125.GA5071@nevyn.them.org> (raw)
In-Reply-To: <20050124210535.GA2797@linux-mips.org>
On Mon, Jan 24, 2005 at 09:05:35PM +0000, Ralf Baechle wrote:
> On Thu, Jan 20, 2005 at 08:04:03PM -0500, Daniel Jacobowitz wrote:
>
> > If I'm reading the broadcom documentation right, the semantics of set_bit
> > and test_and_set_bit require a sync at the end on this architecture.
>
> Linux semantics of the bit functions are less than obvious. The functions
> set_bit, change_bit and clear_bit may be atomic but they don't have memory
> barrier semantics, that is memory accesses before the function call may be
> reordered to be executed after the function has been completed or vice
> versa. The test_and_{set,clear,change}_bit functions however have memory
> barrier semantics. The intended use is something like:
>
> if (!test_and_set_bit(bitnr, bitmap)) {
> /* we got the bit */
>
> ... do something ...
>
> smp_mb__before_clear_bit();
> clear_bit(bitnr, bitmap);
> smp_mb__after_clear_bit();
> } else
> printk("Bit was already set by somebody else\n");
I know that clear_bit has these semantics. But are you sure about
set_bit/change_bit? The comments in clear_bit in every bitops.h
explicitly say it doesn't have a memory barrier, but those on set_bit
don't. At least some platforms use acquire semantics.
I don't see where there might be a barrier on the signal_wake_up path
after the flag is set, but since the patch didn't fix my problems,
you're probably right that there is one somewhere :-)
--
Daniel Jacobowitz
prev parent reply other threads:[~2005-01-24 21:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-21 1:04 Fix some (maybe) missing syncs in bitops.h Daniel Jacobowitz
2005-01-24 21:05 ` Ralf Baechle
2005-01-24 21:21 ` Daniel Jacobowitz [this message]
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=20050124212125.GA5071@nevyn.them.org \
--to=dan@debian.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.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.