From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: David Howells <dhowells@redhat.com>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
linux-mips <linux-mips@linux-mips.org>,
linux-x86_64@vger.kernel.org,
linux-s390 <linux-s390@vger.kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Paul McKenney <paulmck@linux.vnet.ibm.com>,
Ingo Molnar <mingo@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>
Subject: Re: [PATCH/RFC 7/7] kernel: Force ACCESS_ONCE to work only on scalar types
Date: Mon, 24 Nov 2014 22:16:54 +0100 [thread overview]
Message-ID: <5473A046.2020901@de.ibm.com> (raw)
In-Reply-To: <CA+55aFz2bCbhQP3d1bh48AcWTh9bkoMO07JjmwbApGCanJFEMQ@mail.gmail.com>
Am 24.11.2014 um 22:02 schrieb Linus Torvalds:
> On Mon, Nov 24, 2014 at 12:53 PM, Christian Borntraeger
> <borntraeger@de.ibm.com> wrote:
>>
>> That looks like a lot of changes all over ACCESS_ONCE -> ASSIGN_ONCE:
>> git grep "ACCESS_ONCE.*=.*"
>> gives me 200 placea not in Documentation.
>
> Yeah, that's a bit annoying.
>
> How about a combination of the two:
>
> - accept the fact that right now ACCESS_ONCE() is fairly widespread
> (even for writing)
>
> - but also admit that we'd be better off with a nicer interface
>
> and make the solution be:
>
> - make ACCESS_ONCE() only work on scalars, and deprecate it
>
> - add new "read_once()" and "write_once()" interfaces that *do* work
> on (appropriately sized) structures and unions, and start migrating
> things over. In particular, start with the ones that can no longer use
> ACCESS_ONCE() because they aren't scalar..
>
> That second point would make the conversion patches actually easier to
> read. Instead of this:
>
> static inline int arch_spin_is_locked(arch_spinlock_t *lock)
> {
> - struct __raw_tickets tmp = ACCESS_ONCE(lock->tickets);
> + arch_spinlock_t tmp = {};
>
> - return tmp.tail != tmp.head;
> + tmp.head_tail =ACCESS_ONCE(lock->head_tail);
> + return tmp.tickets.tail != tmp.tickets.head;
> }
>
> which isn't *complex*, but is also not an obvious conversion, we'd have just
>
> static inline int arch_spin_is_locked(arch_spinlock_t *lock)
> {
> - struct __raw_tickets tmp = ACCESS_ONCE(lock->tickets);
> - struct __raw_tickets tmp = read_once(lock->tickets);
>
> return tmp.tail != tmp.head;
> }
>
> which is a much simpler and more obvious change.
>
> And then we could slowly try to migrate existing ACCESS_ONCE() users
> over (particularly writers).
>
> Hmm? Too much?
I will give it a try. I will start with Alexei's version for ACCESS_ONCE and your snippets to build read_once and write_once. The only open question is, what to do with the "too large" accesses. Pauls initial patch showed several
places, e.g. kernel/sched/fair.c accessing an u64 even on 32bit:
[...]
age_stamp = ACCESS_ONCE(rq->age_stamp);
avg = ACCESS_ONCE(rq->rt_avg);
[...]
I think I will simply not touch those...
Christian
next prev parent reply other threads:[~2014-11-24 21:16 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-24 13:03 [PATCH/RFC 0/7] ACCESS_ONCE and non-scalar accesses Christian Borntraeger
2014-11-24 13:03 ` [PATCH 1/7] KVM: s390: Fix ipte locking Christian Borntraeger
2014-11-24 13:03 ` Christian Borntraeger
2014-11-24 13:03 ` [PATCH/RFC 2/7] mm: replace page table access via ACCESS_ONCE with barriers Christian Borntraeger
2014-11-24 13:03 ` [PATCH/RFC 3/7] x86: Rework ACCESS_ONCE for spinlock code Christian Borntraeger
2014-11-24 13:03 ` Christian Borntraeger
2014-11-24 13:03 ` [PATCH/RFC 4/7] x86: Replace ACCESS_ONCE in gup with a barrier Christian Borntraeger
2014-11-24 13:03 ` [PATCH/RFC 5/7] mips: " Christian Borntraeger
2014-11-24 13:03 ` Christian Borntraeger
2014-11-24 13:03 ` [PATCH/RFC 6/7] arm64: Replace ACCESS_ONCE for spinlock code with barriers Christian Borntraeger
2014-11-24 18:50 ` Christian Borntraeger
2014-11-24 13:03 ` Christian Borntraeger
2014-11-24 13:03 ` [PATCH/RFC 7/7] kernel: Force ACCESS_ONCE to work only on scalar types Christian Borntraeger
2014-11-24 13:30 ` David Howells
2014-11-24 17:30 ` Linus Torvalds
2014-11-24 18:02 ` Alexei Starovoitov
2014-11-24 18:35 ` Linus Torvalds
2014-11-24 19:07 ` Christian Borntraeger
2014-11-24 19:14 ` Linus Torvalds
2014-11-24 19:42 ` Paul E. McKenney
2014-11-24 20:19 ` Linus Torvalds
2014-11-24 20:46 ` Paul E. McKenney
2014-11-24 20:28 ` Christian Borntraeger
2014-11-24 20:04 ` David Howells
2014-11-24 20:34 ` Linus Torvalds
2014-11-24 20:53 ` Christian Borntraeger
2014-11-24 21:02 ` Linus Torvalds
2014-11-24 21:16 ` Christian Borntraeger [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-11-24 20:29 Alexei Starovoitov
2014-11-24 20:45 ` Christian Borntraeger
2014-11-24 20:48 ` Paul E. McKenney
2014-11-24 22:58 Alexei Starovoitov
2014-11-25 0:00 ` Linus Torvalds
2014-11-25 2:28 Alexei Starovoitov
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=5473A046.2020901@de.ibm.com \
--to=borntraeger@de.ibm.com \
--cc=alexei.starovoitov@gmail.com \
--cc=catalin.marinas@arm.com \
--cc=dhowells@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-x86_64@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=torvalds@linux-foundation.org \
--cc=will.deacon@arm.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 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.