From: Peter Zijlstra <peterz@infradead.org>
To: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
mingo@kernel.org, will.deacon@arm.com,
paulmck@linux.vnet.ibm.com, Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH 28/31] arch, x86: Convert smp_mb__*
Date: Wed, 19 Mar 2014 07:47:57 +0100 [thread overview]
Message-ID: <20140319065205.267534883@infradead.org> (raw)
In-Reply-To: 20140319064729.660482086@infradead.org
[-- Attachment #1: peterz-x86-smp_mb__atomic.patch --]
[-- Type: text/plain, Size: 3406 bytes --]
x86 is strongly ordered and all its atomic ops imply a full barrier.
Implement the two new primitives as the old ones were.
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
---
arch/x86/include/asm/atomic.h | 7 +------
arch/x86/include/asm/barrier.h | 4 ++++
arch/x86/include/asm/bitops.h | 6 ++----
arch/x86/include/asm/sync_bitops.h | 2 +-
arch/x86/kernel/apic/hw_nmi.c | 2 +-
5 files changed, 9 insertions(+), 12 deletions(-)
--- a/arch/x86/include/asm/atomic.h
+++ b/arch/x86/include/asm/atomic.h
@@ -7,6 +7,7 @@
#include <asm/alternative.h>
#include <asm/cmpxchg.h>
#include <asm/rmwcc.h>
+#include <asm/barrier.h>
/*
* Atomic operations that C can't guarantee us. Useful for
@@ -256,12 +257,6 @@ static inline void atomic_or_long(unsign
: : "r" ((unsigned)(mask)), "m" (*(addr)) \
: "memory")
-/* Atomic operations are already serializing on x86 */
-#define smp_mb__before_atomic_dec() barrier()
-#define smp_mb__after_atomic_dec() barrier()
-#define smp_mb__before_atomic_inc() barrier()
-#define smp_mb__after_atomic_inc() barrier()
-
#ifdef CONFIG_X86_32
# include <asm/atomic64_32.h>
#else
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -141,6 +141,10 @@ do { \
#endif
+/* Atomic operations are already serializing on x86 */
+#define smp_mb__before_atomic() barrier()
+#define smp_mb__after_atomic() barrier()
+
/*
* Stop RDTSC speculation. This is needed when you need to use RDTSC
* (or get_cycles or vread that possibly accesses the TSC) in a defined
--- a/arch/x86/include/asm/bitops.h
+++ b/arch/x86/include/asm/bitops.h
@@ -15,6 +15,7 @@
#include <linux/compiler.h>
#include <asm/alternative.h>
#include <asm/rmwcc.h>
+#include <asm/barrier.h>
#if BITS_PER_LONG == 32
# define _BITOPS_LONG_SHIFT 5
@@ -102,7 +103,7 @@ static inline void __set_bit(long nr, vo
*
* clear_bit() is atomic and may not be reordered. However, it does
* not contain a memory barrier, so if it is used for locking purposes,
- * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
+ * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic()
* in order to ensure changes are visible on other processors.
*/
static __always_inline void
@@ -156,9 +157,6 @@ static inline void __clear_bit_unlock(lo
__clear_bit(nr, addr);
}
-#define smp_mb__before_clear_bit() barrier()
-#define smp_mb__after_clear_bit() barrier()
-
/**
* __change_bit - Toggle a bit in memory
* @nr: the bit to change
--- a/arch/x86/include/asm/sync_bitops.h
+++ b/arch/x86/include/asm/sync_bitops.h
@@ -41,7 +41,7 @@ static inline void sync_set_bit(long nr,
*
* sync_clear_bit() is atomic and may not be reordered. However, it does
* not contain a memory barrier, so if it is used for locking purposes,
- * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
+ * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic()
* in order to ensure changes are visible on other processors.
*/
static inline void sync_clear_bit(long nr, volatile unsigned long *addr)
--- a/arch/x86/kernel/apic/hw_nmi.c
+++ b/arch/x86/kernel/apic/hw_nmi.c
@@ -57,7 +57,7 @@ void arch_trigger_all_cpu_backtrace(void
}
clear_bit(0, &backtrace_flag);
- smp_mb__after_clear_bit();
+ smp_mb__after_atomic();
}
static int __kprobes
next prev parent reply other threads:[~2014-03-19 6:47 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-19 6:47 [PATCH 00/31] Clean up smp_mb__ barriers Peter Zijlstra
2014-03-19 6:47 ` [PATCH 01/31] ia64: Fix up smp_mb__{before,after}_clear_bit Peter Zijlstra
2014-03-19 6:47 ` [PATCH 02/31] arc,hexagon: Delete asm/barrier.h Peter Zijlstra
2014-03-19 6:47 ` [PATCH 03/31] arch: Prepare for smp_mb__{before,after}_atomic() Peter Zijlstra
2014-03-19 6:47 ` [PATCH 04/31] arch,alpha: Convert smp_mb__* Peter Zijlstra
2014-03-19 6:47 ` [PATCH 05/31] arch,arc: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 06/31] arch,arm: " Peter Zijlstra
2014-04-14 16:19 ` Will Deacon
2014-03-19 6:47 ` [PATCH 07/31] arch,arm64: " Peter Zijlstra
2014-03-21 11:54 ` Catalin Marinas
2014-03-19 6:47 ` [PATCH 08/31] arch,avr32: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 09/31] arch,blackfin: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 10/31] arch,c6x: " Peter Zijlstra
2014-04-09 15:35 ` Mark Salter
2014-03-19 6:47 ` [PATCH 11/31] arch,cris: " Peter Zijlstra
2014-03-20 11:11 ` Jesper Nilsson
2014-03-19 6:47 ` [PATCH 12/31] arch,frv: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 13/31] arch,hexagon: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 14/31] arch,ia64: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 15/31] arch,m32r: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 16/31] arch,m68k: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 17/31] arch,metag: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 18/31] arch,mips: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 19/31] arch,mn10300: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 20/31] arch,openrisc: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 21/31] arch,parisc: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 22/31] arch,powerpc: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 23/31] arch,s390: " Peter Zijlstra
2014-03-19 13:50 ` Heiko Carstens
2014-03-19 6:47 ` [PATCH 24/31] arch,score: " Peter Zijlstra
2014-03-19 18:53 ` Lennox Wu
2014-03-19 6:47 ` [PATCH 25/31] arch,sh: " Peter Zijlstra
2014-03-19 6:47 ` [PATCH 26/31] arch,sparc: " Peter Zijlstra
2014-03-19 17:54 ` David Miller
2014-03-19 6:47 ` [PATCH 27/31] arch,tile: " Peter Zijlstra
2014-03-19 17:49 ` Chris Metcalf
2014-03-19 17:49 ` Chris Metcalf
2014-03-19 6:47 ` Peter Zijlstra [this message]
2014-03-19 6:47 ` [PATCH 29/31] arch,xtensa: " Peter Zijlstra
2014-03-19 13:11 ` Max Filippov
2014-03-19 13:30 ` Peter Zijlstra
2014-03-19 6:47 ` [PATCH 30/31] arch,doc: " Peter Zijlstra
2014-03-19 17:15 ` Paul E. McKenney
2014-03-19 17:36 ` David Howells
2014-03-19 6:48 ` [PATCH 31/31] arch: Mass conversion of smp_mb__* Peter Zijlstra
2014-03-19 9:55 ` [PATCH 00/31] Clean up smp_mb__ barriers David Howells
2014-03-19 9:58 ` Peter Zijlstra
2014-03-19 10:07 ` David Howells
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=20140319065205.267534883@infradead.org \
--to=peterz@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.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.