From: Peter Hurley <peter@hurleysoftware.com>
To: Jakub Jelinek <jakub@redhat.com>,
Mikael Pettersson <mikpelinux@gmail.com>
Cc: linux-arch@vger.kernel.org, Tony Luck <tony.luck@intel.com>,
linux-ia64@vger.kernel.org, Oleg Nesterov <oleg@redhat.com>,
linux-kernel@vger.kernel.org, Paul Mackerras <paulus@samba.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
linuxppc-dev@lists.ozlabs.org, Miroslav Franc <mfranc@redhat.com>,
Richard Henderson <rth@twiddle.net>
Subject: Re: bit fields && data tearing
Date: Thu, 04 Sep 2014 08:24:12 -0400 [thread overview]
Message-ID: <540859EC.5000407@hurleysoftware.com> (raw)
In-Reply-To: <20140904090952.GW17454@tucnak.redhat.com>
On 09/04/2014 05:09 AM, Jakub Jelinek wrote:
> On Thu, Sep 04, 2014 at 10:57:40AM +0200, Mikael Pettersson wrote:
>> Benjamin Herrenschmidt writes:
>> > On Wed, 2014-09-03 at 18:51 -0400, Peter Hurley wrote:
>> >
>> > > Apologies for hijacking this thread but I need to extend this discussion
>> > > somewhat regarding what a compiler might do with adjacent fields in a structure.
>> > >
>> > > The tty subsystem defines a large aggregate structure, struct tty_struct.
>> > > Importantly, several different locks apply to different fields within that
>> > > structure; ie., a specific spinlock will be claimed before updating or accessing
>> > > certain fields while a different spinlock will be claimed before updating or
>> > > accessing certain _adjacent_ fields.
>> > >
>> > > What is necessary and sufficient to prevent accidental false-sharing?
>> > > The patch below was flagged as insufficient on ia64, and possibly ARM.
>> >
>> > We expect native aligned scalar types to be accessed atomically (the
>> > read/modify/write of a larger quantity that gcc does on some bitfield
>> > cases has been flagged as a gcc bug, but shouldn't happen on normal
>> > scalar types).
>> >
>> > I am not 100% certain of "bool" here, I assume it's treated as a normal
>> > scalar and thus atomic but if unsure, you can always use int.
>>
>> Please use an aligned int or long. Some machines cannot do atomic
>> accesses on sub-int/long quantities, so 'bool' may cause unexpected
>> rmw cycles on adjacent fields.
>
> Yeah, at least pre-EV56 Alpha performs rmw cycles on char/short accesses
> and thus those are not atomic.
Ok, thanks.
And I just confirmed with the Alpha cross-compiler that the fields are
not 'padded out' if volatile either.
Do any arches consider this an 'optimization'? I ask because this kind of
accidental adjacency sharing may be common. Even RCU has a char field,
rcu_read_unlock_special, in the middle of the task_struct; luckily the
adjacent field is a list_head.
Besides updating the documentation, it may make sense to do something
arch-specific. Just bumping out storage on arches that don't need it
seems wasteful, as does generating bus locks on arches that don't need it.
Unfortunately, the code churn looks unavoidable.
Regards,
Peter Hurley
next prev parent reply other threads:[~2014-09-04 12:24 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-12 18:13 bit fields && data tearing Oleg Nesterov
2014-07-12 20:51 ` Oleg Nesterov
2014-07-12 23:34 ` Benjamin Herrenschmidt
2014-07-13 12:29 ` Oleg Nesterov
2014-07-13 13:15 ` Peter Hurley
2014-07-13 22:25 ` Benjamin Herrenschmidt
2014-07-15 13:54 ` Peter Hurley
2014-07-15 15:02 ` Richard Henderson
2014-09-03 22:51 ` Peter Hurley
2014-09-03 23:11 ` Benjamin Herrenschmidt
2014-09-04 8:43 ` David Laight
2014-09-04 9:52 ` Benjamin Herrenschmidt
2014-09-04 22:14 ` H. Peter Anvin
2014-09-05 0:59 ` Peter Hurley
2014-09-05 2:08 ` H. Peter Anvin
2014-09-05 8:16 ` Michael Cree
2014-09-05 18:09 ` Paul E. McKenney
2014-09-05 18:31 ` Paul E. McKenney
2014-09-05 19:52 ` Peter Zijlstra
2014-09-05 20:01 ` Peter Hurley
2014-09-05 20:12 ` Peter Zijlstra
2014-09-05 20:15 ` H. Peter Anvin
2014-09-05 20:19 ` Paul E. McKenney
2014-09-05 18:50 ` Peter Hurley
2014-09-05 19:05 ` Paul E. McKenney
2014-09-05 19:24 ` Peter Hurley
2014-09-05 20:09 ` Paul E. McKenney
2014-09-05 19:38 ` Marc Gauthier
2014-09-05 20:14 ` Peter Hurley
2014-09-05 20:34 ` H. Peter Anvin
2014-09-05 20:42 ` Michael Cree
2014-09-05 20:43 ` Paul E. McKenney
2014-09-05 20:48 ` Thomas Gleixner
2014-09-05 21:05 ` Paul E. McKenney
2014-09-05 20:39 ` Michael Cree
2014-09-05 21:12 ` Peter Hurley
2014-09-05 21:27 ` Michael Cree
2014-09-05 20:42 ` Paul E. McKenney
2014-09-05 2:08 ` H. Peter Anvin
2014-09-05 15:31 ` Peter Hurley
2014-09-05 15:41 ` H. Peter Anvin
2014-09-08 17:52 ` One Thousand Gnomes
2014-09-08 17:59 ` H. Peter Anvin
2014-09-08 19:17 ` One Thousand Gnomes
2014-09-09 11:18 ` Peter Hurley
2014-09-08 22:47 ` Peter Hurley
2014-09-09 1:59 ` Paul E. McKenney
2014-09-09 11:14 ` Peter Hurley
2014-09-11 10:04 ` One Thousand Gnomes
2014-09-11 16:16 ` Paul E. McKenney
2014-09-11 20:01 ` Peter Hurley
2014-09-14 23:24 ` One Thousand Gnomes
2014-09-22 19:51 ` Paul E. McKenney
2014-09-23 18:19 ` Peter Hurley
2014-09-23 18:39 ` One Thousand Gnomes
2014-09-08 18:13 ` James Bottomley
2014-09-10 20:18 ` H. Peter Anvin
2014-09-10 21:10 ` Rob Landley
2014-09-04 8:57 ` Mikael Pettersson
2014-09-04 9:09 ` Jakub Jelinek
2014-09-04 12:24 ` Peter Hurley [this message]
2014-09-04 12:29 ` Jakub Jelinek
2014-09-04 16:50 ` One Thousand Gnomes
2014-09-04 19:42 ` Peter Hurley
2014-09-04 22:16 ` H. Peter Anvin
2014-09-05 0:17 ` Paul E. McKenney
2014-09-05 1:57 ` Peter Hurley
2014-09-05 2:11 ` James Bottomley
2014-09-05 2:47 ` Peter Hurley
2014-09-05 4:06 ` Paul E. McKenney
2014-09-05 8:30 ` David Laight
2014-09-05 12:31 ` Peter Hurley
2014-09-05 12:37 ` David Laight
2014-09-05 16:17 ` Peter Hurley
2014-09-25 16:12 ` Pavel Machek
2014-09-07 5:07 ` James Bottomley
2014-09-07 16:21 ` Paul E. McKenney
2014-09-07 19:04 ` James Bottomley
2014-09-07 20:41 ` Peter Hurley
2014-09-08 5:50 ` James Bottomley
2014-09-08 20:45 ` Chris Metcalf
2014-09-08 22:43 ` James Bottomley
2014-09-09 2:27 ` H. Peter Anvin
2014-09-09 8:11 ` Arnd Bergmann
2014-09-08 23:30 ` Peter Hurley
2014-09-09 2:56 ` James Bottomley
2014-09-09 3:20 ` H. Peter Anvin
2014-09-09 4:30 ` H. Peter Anvin
2014-09-09 10:40 ` Peter Hurley
2014-09-10 21:48 ` James Bottomley
2014-09-10 23:50 ` Peter Hurley
2014-09-11 10:23 ` Will Deacon
2014-09-07 23:00 ` Paul E. McKenney
2014-09-07 23:17 ` H. Peter Anvin
2014-09-07 23:36 ` Paul E. McKenney
2014-09-07 23:39 ` H. Peter Anvin
2014-09-08 5:56 ` James Bottomley
2014-09-08 18:12 ` H. Peter Anvin
2014-09-08 19:09 ` James Bottomley
2014-09-08 19:12 ` H. Peter Anvin
2014-09-08 19:12 ` H. Peter Anvin
2014-09-08 22:39 ` James Bottomley
2014-09-09 2:30 ` H. Peter Anvin
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=540859EC.5000407@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=jakub@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mfranc@redhat.com \
--cc=mikpelinux@gmail.com \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=rth@twiddle.net \
--cc=tony.luck@intel.com \
/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;
as well as URLs for NNTP newsgroup(s).