[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200129104917.GN14946@hirez.programming.kicks-ass.net>
Date: Wed, 29 Jan 2020 11:49:17 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: Will Deacon <will@...nel.org>
Cc: linux-kernel@...r.kernel.org, linux-arch@...r.kernel.org,
kernel-team@...roid.com, Michael Ellerman <mpe@...erman.id.au>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Segher Boessenkool <segher@...nel.crashing.org>,
Christian Borntraeger <borntraeger@...ibm.com>,
Luc Van Oostenryck <luc.vanoostenryck@...il.com>,
Arnd Bergmann <arnd@...db.de>,
Peter Oberparleiter <oberpar@...ux.ibm.com>,
Masahiro Yamada <masahiroy@...nel.org>,
Nick Desaulniers <ndesaulniers@...gle.com>,
ying.huang@...el.com, kirill.shutemov@...ux.intel.com
Subject: Re: [PATCH v2 05/10] READ_ONCE: Enforce atomicity for
{READ,WRITE}_ONCE() memory accesses
On Sat, Jan 25, 2020 at 09:27:46AM +0100, Peter Zijlstra wrote:
> On Thu, Jan 23, 2020 at 03:33:36PM +0000, Will Deacon wrote:
> > {READ,WRITE}_ONCE() cannot guarantee atomicity for arbitrary data sizes.
> > This can be surprising to callers that might incorrectly be expecting
> > atomicity for accesses to aggregate structures, although there are other
> > callers where tearing is actually permissable (e.g. if they are using
> > something akin to sequence locking to protect the access).
> >
> > Linus sayeth:
> >
> > | We could also look at being stricter for the normal READ/WRITE_ONCE(),
> > | and require that they are
> > |
> > | (a) regular integer types
> > |
> > | (b) fit in an atomic word
> > |
> > | We actually did (b) for a while, until we noticed that we do it on
> > | loff_t's etc and relaxed the rules. But maybe we could have a
> > | "non-atomic" version of READ/WRITE_ONCE() that is used for the
> > | questionable cases?
> >
> > The slight snag is that we also have to support 64-bit accesses on 32-bit
> > architectures, as these appear to be widespread and tend to work out ok
> > if either the architecture supports atomic 64-bit accesses (x86, armv7)
> > or if the variable being accesses represents a virtual address and
> > therefore only requires 32-bit atomicity in practice.
> >
> > Take a step in that direction by introducing a variant of
> > 'compiletime_assert_atomic_type()' and use it to check the pointer
> > argument to {READ,WRITE}_ONCE(). Expose __{READ,WRITE_ONCE}() variants
> > which are allowed to tear and convert the two broken callers over to the
> > new macros.
>
> The build robot is telling me we also need this for m68k; they have:
>
> arch/m68k/include/asm/page.h:typedef struct { unsigned long pmd[16]; } pmd_t;
Fixed that with these patches:
https://lkml.kernel.org/r/20200129103941.304769381@infradead.org
Powered by blists - more mailing lists