From: Will Deacon <will@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: Will Deacon <will@kernel.org>, Yunjae Lee <lyj7694@gmail.com>,
SeongJae Park <sj38.park@gmail.com>,
"Paul E. McKenney" <paulmck@kernel.org>,
Josh Triplett <josh@joshtriplett.org>,
Matt Turner <mattst88@gmail.com>,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
Richard Henderson <rth@twiddle.net>,
Peter Zijlstra <peterz@infradead.org>,
Alan Stern <stern@rowland.harvard.edu>,
Michael Ellerman <mpe@ellerman.id.au>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
Joe Perches <joe@perches.com>, Boqun Feng <boqun.feng@gmail.com>,
linux-alpha@vger.kernel.org,
virtualization@lists.linux-foundation.org
Subject: [PATCH 03/13] READ_ONCE: Allow __READ_ONCE_SIZE cases to be overridden by the architecture
Date: Fri, 8 Nov 2019 17:01:10 +0000 [thread overview]
Message-ID: <20191108170120.22331-4-will@kernel.org> (raw)
In-Reply-To: <20191108170120.22331-1-will@kernel.org>
The meat and potatoes of 'READ_ONCE()' is defined by the
'__READ_ONCE_SIZE()' macro, which uses volatile casts in an attempt to
avoid tearing of byte, halfword, word and double-word accesses. Allow
this to be overridden by the architecture code in the case that things
like memory barriers are also required.
Signed-off-by: Will Deacon <will@kernel.org>
---
include/asm-generic/rwonce.h | 28 ++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/include/asm-generic/rwonce.h b/include/asm-generic/rwonce.h
index abf326634ecd..2c2ac0948c94 100644
--- a/include/asm-generic/rwonce.h
+++ b/include/asm-generic/rwonce.h
@@ -33,13 +33,29 @@
#include <asm/barrier.h>
+#ifndef __read_once_size_1
+#define __read_once_size_1(p) (*(volatile __u8 *)(p))
+#endif
+
+#ifndef __read_once_size_2
+#define __read_once_size_2(p) (*(volatile __u16 *)(p))
+#endif
+
+#ifndef __read_once_size_4
+#define __read_once_size_4(p) (*(volatile __u32 *)(p))
+#endif
+
+#ifndef __read_once_size_8
+#define __read_once_size_8(p) (*(volatile __u64 *)(p))
+#endif
+
#define __READ_ONCE_SIZE \
({ \
switch (size) { \
- case 1: *(__u8 *)res = *(volatile __u8 *)p; break; \
- case 2: *(__u16 *)res = *(volatile __u16 *)p; break; \
- case 4: *(__u32 *)res = *(volatile __u32 *)p; break; \
- case 8: *(__u64 *)res = *(volatile __u64 *)p; break; \
+ case 1: *(__u8 *)res = __read_once_size_1(p); break; \
+ case 2: *(__u16 *)res = __read_once_size_2(p); break; \
+ case 4: *(__u32 *)res = __read_once_size_4(p); break; \
+ case 8: *(__u64 *)res = __read_once_size_8(p); break; \
default: \
barrier(); \
__builtin_memcpy((void *)res, (const void *)p, size); \
@@ -59,6 +75,10 @@ void __read_once_size_nocheck(const volatile void *p, void *res, int size)
__READ_ONCE_SIZE;
}
+#undef __read_once_size_1
+#undef __read_once_size_2
+#undef __read_once_size_4
+#undef __read_once_size_8
#undef __READ_ONCE_SIZE
static __always_inline void __write_once_size(volatile void *p, void *res, int size)
--
2.24.0.rc1.363.gb1bccd3e3d-goog
next prev parent reply other threads:[~2019-11-08 17:01 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-08 17:01 [PATCH 00/13] Finish off [smp_]read_barrier_depends() Will Deacon
2019-11-08 17:01 ` [PATCH 01/13] compiler.h: Split {READ, WRITE}_ONCE definitions out into rwonce.h Will Deacon
2019-11-08 17:01 ` [PATCH 01/13] compiler.h: Split {READ,WRITE}_ONCE " Will Deacon
2019-11-08 19:57 ` Arnd Bergmann
2019-11-08 19:57 ` Arnd Bergmann
2019-11-11 8:10 ` [PATCH 01/13] compiler.h: Split {READ, WRITE}_ONCE " Christian Borntraeger
2019-11-11 8:10 ` [PATCH 01/13] compiler.h: Split {READ,WRITE}_ONCE " Christian Borntraeger
2019-11-11 8:10 ` Christian Borntraeger
2019-11-11 9:32 ` [PATCH 01/13] compiler.h: Split {READ, WRITE}_ONCE " Arnd Bergmann
2019-11-11 9:32 ` [PATCH 01/13] compiler.h: Split {READ,WRITE}_ONCE " Arnd Bergmann
2019-11-11 9:32 ` [PATCH 01/13] compiler.h: Split {READ, WRITE}_ONCE " Arnd Bergmann
2019-11-12 11:36 ` [PATCH 01/13] compiler.h: Split {READ,WRITE}_ONCE " Will Deacon
2019-11-12 11:36 ` Will Deacon
2019-11-08 19:57 ` [PATCH 01/13] compiler.h: Split {READ, WRITE}_ONCE " Arnd Bergmann
2019-11-08 17:01 ` [PATCH 02/13] READ_ONCE: Undefine internal __READ_ONCE_SIZE macro after use Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 03/13] READ_ONCE: Allow __READ_ONCE_SIZE cases to be overridden by the architecture Will Deacon
2019-11-08 17:01 ` Will Deacon [this message]
2019-11-08 17:01 ` [PATCH 04/13] vhost: Remove redundant use of read_barrier_depends() barrier Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 05/13] alpha: Override READ_ONCE() with barriered implementation Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 06/13] READ_ONCE: Remove smp_read_barrier_depends() invocation Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 07/13] alpha: Replace smp_read_barrier_depends() usage with smp_[r]mb() Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 08/13] locking/barriers: Remove definitions for [smp_]read_barrier_depends() Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 09/13] Documentation/barriers: Remove references to [smp_]read_barrier_depends() Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-21 19:32 ` [PATCH] Documentation/barriers/kokr: " SeongJae Park
2019-11-26 22:20 ` Paul E. McKenney
2019-11-29 18:08 ` [PATCH v2] " SeongJae Park
2019-12-06 17:20 ` SeongJae Park
2019-12-06 20:44 ` Paul E. McKenney
2019-12-06 21:29 ` SeongJae Park
2019-12-06 22:08 ` Paul E. McKenney
2019-12-06 22:38 ` SeongJae Park
2019-12-06 22:51 ` Paul E. McKenney
2019-12-09 9:44 ` Will Deacon
2019-12-09 17:00 ` Paul E. McKenney
2019-12-09 17:06 ` Will Deacon
2019-12-09 17:43 ` SeongJae Park
2019-11-08 17:01 ` [PATCH 10/13] tools/memory-model: Remove smp_read_barrier_depends() from informal doc Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:42 ` Alan Stern
2019-11-08 17:42 ` Alan Stern
2019-11-08 17:42 ` Alan Stern
2019-11-08 17:01 ` [PATCH 11/13] powerpc: Remove comment about read_barrier_depends() Will Deacon
2019-11-20 10:37 ` Michael Ellerman
2019-11-26 22:24 ` Paul E. McKenney
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 12/13] include/linux: Remove smp_read_barrier_depends() from comments Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 17:01 ` [PATCH 13/13] checkpatch: Remove checks relating to [smp_]read_barrier_depends() Will Deacon
2019-11-08 17:01 ` Will Deacon
2019-11-08 18:50 ` [PATCH 00/13] Finish off [smp_]read_barrier_depends() Paul E. McKenney
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=20191108170120.22331-4-will@kernel.org \
--to=will@kernel.org \
--cc=arnd@arndb.de \
--cc=boqun.feng@gmail.com \
--cc=ink@jurassic.park.msu.ru \
--cc=jasowang@redhat.com \
--cc=joe@perches.com \
--cc=josh@joshtriplett.org \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lyj7694@gmail.com \
--cc=mattst88@gmail.com \
--cc=mpe@ellerman.id.au \
--cc=mst@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rth@twiddle.net \
--cc=sj38.park@gmail.com \
--cc=stern@rowland.harvard.edu \
--cc=virtualization@lists.linux-foundation.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.