From: James Bottomley <James.Bottomley@steeleye.com>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Andrew Morton <akpm@osdl.org>, Paul Jackson <pj@sgi.com>,
PARISC list <parisc-linux@lists.parisc-linux.org>,
Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Fix the cpumask rewrite
Date: 26 Jun 2004 11:46:43 -0500 [thread overview]
Message-ID: <1088268405.1942.25.camel@mulgrave> (raw)
In-Reply-To: <Pine.LNX.4.58.0406260924570.14449@ppc970.osdl.org>
On Sat, 2004-06-26 at 11:32, Linus Torvalds wrote:
> Why not? The thing is, the bitmap operators are supposed to work on
> volatile data, ie people are literally using them for things like
>
> while (test_bit(TASKLET_STATE_SCHED, &t->state));
>
> and the thing is supposed to work.
Well, I agree it's supposed to work, what I don't agree about is that
generic code gets to designate critical data as volatile.
> Now, I personally am not a big believer in the "volatile" keyword itself,
> since I believe that anybody who expects the compiler to generate
> different code for volatiles and non-volatiles is pretty much waiting for
> a bug to happen, but there are two cases where I think it's ok:
>
> - in function prototypes to show that the function can take volatile data
> (and not complain).
This is a real problem for us on parisc though. By designating the
function prototype as volatile, you force the function implementation
*also* to be volatile. Unfortunately, in our case, gcc seems to
generate worse code than a pigs arse when it sees volatile data lurking
anywhere in a function.
Our current set bit functions are *coded* to operate on volatile data,
we just don't use the volatile keyword to persuade gcc to generate
better code.
I realise we could hand code in assembly to get around this problem, but
our implementation actually has to use hashed spinlocks for the
volatility, so we'd rather not if we really don't have to.
The kernel has survived this far with no other bit operator data being
volatile.
> - as an arch-specific low-level implementation detail to avoid having to
> use inline assembly just to load a value. Ie a _data_structure_ should
> never be volatile, but it's ok to use a volatile pointer for a single
> access.
Definitely agree here ... the arch code is really the place we know the
compiler penalty of being volatile.
James
next prev parent reply other threads:[~2004-06-26 16:48 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-26 16:08 [PATCH] Fix the cpumask rewrite James Bottomley
2004-06-26 16:32 ` Linus Torvalds
2004-06-26 16:32 ` Linus Torvalds
2004-06-26 16:44 ` Linus Torvalds
2004-06-26 16:46 ` James Bottomley [this message]
2004-06-26 16:54 ` Linus Torvalds
2004-06-26 17:18 ` James Bottomley
2004-06-26 18:01 ` Linus Torvalds
2004-06-26 18:28 ` Vojtech Pavlik
2004-06-26 18:54 ` Linus Torvalds
2004-06-26 19:02 ` James Bottomley
2004-06-26 19:13 ` Linus Torvalds
2004-06-26 19:13 ` Vojtech Pavlik
2004-06-26 18:59 ` James Bottomley
2004-06-26 19:11 ` Linus Torvalds
2004-06-26 19:33 ` James Bottomley
2004-06-28 23:16 ` Jonathan Lundell
2004-07-01 13:11 ` Pavel Machek
2004-07-01 14:07 ` [parisc-linux] " Alan Cox
2004-07-01 16:15 ` Linus Torvalds
2004-07-01 16:52 ` Jeff Garzik
2004-07-01 17:42 ` Linus Torvalds
2004-06-26 22:18 ` Chris Wedgwood
2004-06-26 22:48 ` Linus Torvalds
2004-06-26 22:54 ` [parisc-linux] " Alan Cox
2004-06-27 0:05 ` Chris Wedgwood
2004-06-27 12:00 ` Matthias Urlichs
2004-06-27 22:41 ` Chris Wedgwood
2004-06-28 1:24 ` Matthias Urlichs
2004-06-28 5:42 ` Chris Wedgwood
2004-06-28 6:55 ` Matthias Urlichs
2004-06-28 7:02 ` Chris Wedgwood
2004-06-28 7:19 ` Matthias Urlichs
2004-06-27 14:37 ` Alan Cox
2004-07-01 13:33 ` Pavel Machek
2004-07-01 17:43 ` Chris Wedgwood
2004-06-26 23:37 ` jiffies_64 Chris Wedgwood
2004-06-27 1:55 ` more (insane) jiffies ranting Chris Wedgwood
2004-06-27 17:39 ` Linus Torvalds
2004-06-27 17:39 ` Linus Torvalds
2004-06-27 17:39 ` [parisc-linux] " Linus Torvalds
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=1088268405.1942.25.camel@mulgrave \
--to=james.bottomley@steeleye.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=parisc-linux@lists.parisc-linux.org \
--cc=pj@sgi.com \
--cc=torvalds@osdl.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.