All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: modernize sync_bitops.h
@ 2018-06-25 10:24 Jan Beulich
  2018-06-26  7:18 ` Ingo Molnar
       [not found] ` <5B30C2C302000000000FA99B@prv1-mh.provo.novell.com>
  0 siblings, 2 replies; 12+ messages in thread
From: Jan Beulich @ 2018-06-25 10:24 UTC (permalink / raw)
  To: mingo, tglx, hpa; +Cc: linux-kernel

Add missing insn suffixes and use rmwcc.h just like was (more or less)
recently done for bitops.h as well.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
 arch/x86/include/asm/sync_bitops.h |   34 ++++++++++++----------------------
 1 file changed, 12 insertions(+), 22 deletions(-)

--- 4.18-rc2/arch/x86/include/asm/sync_bitops.h
+++ 4.18-rc2-x86-sync-bitops-insn-suffixes/arch/x86/include/asm/sync_bitops.h
@@ -14,6 +14,8 @@
  * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
  */
 
+#include <asm/rmwcc.h>
+
 #define ADDR (*(volatile long *)addr)
 
 /**
@@ -29,7 +31,7 @@
  */
 static inline void sync_set_bit(long nr, volatile unsigned long *addr)
 {
-	asm volatile("lock; bts %1,%0"
+	asm volatile("lock; " __ASM_SIZE(bts) " %1,%0"
 		     : "+m" (ADDR)
 		     : "Ir" (nr)
 		     : "memory");
@@ -47,7 +49,7 @@ static inline void sync_set_bit(long nr,
  */
 static inline void sync_clear_bit(long nr, volatile unsigned long *addr)
 {
-	asm volatile("lock; btr %1,%0"
+	asm volatile("lock; " __ASM_SIZE(btr) " %1,%0"
 		     : "+m" (ADDR)
 		     : "Ir" (nr)
 		     : "memory");
@@ -64,7 +66,7 @@ static inline void sync_clear_bit(long n
  */
 static inline void sync_change_bit(long nr, volatile unsigned long *addr)
 {
-	asm volatile("lock; btc %1,%0"
+	asm volatile("lock; " __ASM_SIZE(btc) " %1,%0"
 		     : "+m" (ADDR)
 		     : "Ir" (nr)
 		     : "memory");
@@ -78,14 +80,10 @@ static inline void sync_change_bit(long
  * This operation is atomic and cannot be reordered.
  * It also implies a memory barrier.
  */
-static inline int sync_test_and_set_bit(long nr, volatile unsigned long *addr)
+static inline bool sync_test_and_set_bit(long nr, volatile unsigned long *addr)
 {
-	unsigned char oldbit;
-
-	asm volatile("lock; bts %2,%1\n\tsetc %0"
-		     : "=qm" (oldbit), "+m" (ADDR)
-		     : "Ir" (nr) : "memory");
-	return oldbit;
+	GEN_BINARY_RMWcc("lock; " __ASM_SIZE(bts),
+	                 *addr, "Ir", nr, "%0", c);
 }
 
 /**
@@ -98,12 +96,8 @@ static inline int sync_test_and_set_bit(
  */
 static inline int sync_test_and_clear_bit(long nr, volatile unsigned long *addr)
 {
-	unsigned char oldbit;
-
-	asm volatile("lock; btr %2,%1\n\tsetc %0"
-		     : "=qm" (oldbit), "+m" (ADDR)
-		     : "Ir" (nr) : "memory");
-	return oldbit;
+	GEN_BINARY_RMWcc("lock; " __ASM_SIZE(btr),
+	                 *addr, "Ir", nr, "%0", c);
 }
 
 /**
@@ -116,12 +110,8 @@ static inline int sync_test_and_clear_bi
  */
 static inline int sync_test_and_change_bit(long nr, volatile unsigned long *addr)
 {
-	unsigned char oldbit;
-
-	asm volatile("lock; btc %2,%1\n\tsetc %0"
-		     : "=qm" (oldbit), "+m" (ADDR)
-		     : "Ir" (nr) : "memory");
-	return oldbit;
+	GEN_BINARY_RMWcc("lock; " __ASM_SIZE(btc),
+	                 *addr, "Ir", nr, "%0", c);
 }
 
 #define sync_test_bit(nr, addr) test_bit(nr, addr)





^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2019-04-10  8:48 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-25 10:24 [PATCH] x86: modernize sync_bitops.h Jan Beulich
2018-06-26  7:18 ` Ingo Molnar
2018-06-26  7:26   ` Jan Beulich
     [not found] ` <5B30C2C302000000000FA99B@prv1-mh.provo.novell.com>
     [not found]   ` <5B30C2C302000078001FE5A0@prv1-mh.provo.novell.com>
2018-11-21 10:11     ` [PATCH v2] " Jan Beulich
2018-11-21 11:55       ` David Laight
2018-11-21 13:02         ` Jan Beulich
2018-11-21 13:49           ` David Laight
2018-11-21 14:41             ` Jan Beulich
2018-11-21 15:53               ` David Laight
2018-11-27 19:51                 ` Sean Christopherson
     [not found]     ` <5BF52F4D02000000001006ED@prv1-mh.provo.novell.com>
     [not found]       ` <5BF52F4D020000780022227E@prv1-mh.provo.novell.com>
2019-03-27 15:15         ` [PATCH v2 RESEND] " Jan Beulich
2019-04-10  8:47           ` [tip:x86/asm] x86/asm: Modernize sync_bitops.h tip-bot for Jan Beulich

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.