linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] locking/atomic: simplify non-atomic wrappers
@ 2021-07-21 15:58 Mark Rutland
  2021-07-22  7:21 ` Marco Elver
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Mark Rutland @ 2021-07-21 15:58 UTC (permalink / raw)
  To: linux-kernel, peterz; +Cc: elver, mark.rutland

Since the non-atomic arch_*() bitops use plain accesses, they are
implicitly instrumnted by the compiler, and we work around this in the
instrumented wrappers to avoid double instrumentation.

It's simpler to avoid the wrappers entirely, and use the preprocessor to
alias the arch_*() bitops to their regular versions, removing the need
for checks in the instrumented wrappers.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Suggested-by: Marco Elver <elver@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
---
 .../asm-generic/bitops/instrumented-non-atomic.h    | 21 +++++++--------------
 include/asm-generic/bitops/non-atomic.h             | 16 +++++++---------
 2 files changed, 14 insertions(+), 23 deletions(-)

Hi Peter,

Are you happy to take this atop your queue/locking/core branch?

This was suggested by Marco in [1], and also sidesteps some particularly bad
stack spills as in [2].

[1] https://lore.kernel.org/r/CANpmjNNVn4UxBCMg1ke9xaQNv52OMuQjr17GxUXojZKwiAFzzg@mail.gmail.com
[2] https://lore.kernel.org/r/20210719100719.GB12806@C02TD0UTHF1T.local/

Thanks,
Mark.

diff --git a/include/asm-generic/bitops/instrumented-non-atomic.h b/include/asm-generic/bitops/instrumented-non-atomic.h
index e6c1540965d6..37363d570b9b 100644
--- a/include/asm-generic/bitops/instrumented-non-atomic.h
+++ b/include/asm-generic/bitops/instrumented-non-atomic.h
@@ -24,8 +24,7 @@
  */
 static inline void __set_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___set_bit_uses_plain_access))
-		instrument_write(addr + BIT_WORD(nr), sizeof(long));
+	instrument_write(addr + BIT_WORD(nr), sizeof(long));
 	arch___set_bit(nr, addr);
 }
 
@@ -40,8 +39,7 @@ static inline void __set_bit(long nr, volatile unsigned long *addr)
  */
 static inline void __clear_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___clear_bit_uses_plain_access))
-		instrument_write(addr + BIT_WORD(nr), sizeof(long));
+	instrument_write(addr + BIT_WORD(nr), sizeof(long));
 	arch___clear_bit(nr, addr);
 }
 
@@ -56,8 +54,7 @@ static inline void __clear_bit(long nr, volatile unsigned long *addr)
  */
 static inline void __change_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___change_bit_uses_plain_access))
-		instrument_write(addr + BIT_WORD(nr), sizeof(long));
+	instrument_write(addr + BIT_WORD(nr), sizeof(long));
 	arch___change_bit(nr, addr);
 }
 
@@ -95,8 +92,7 @@ static inline void __instrument_read_write_bitop(long nr, volatile unsigned long
  */
 static inline bool __test_and_set_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___test_and_set_bit_uses_plain_access))
-		__instrument_read_write_bitop(nr, addr);
+	__instrument_read_write_bitop(nr, addr);
 	return arch___test_and_set_bit(nr, addr);
 }
 
@@ -110,8 +106,7 @@ static inline bool __test_and_set_bit(long nr, volatile unsigned long *addr)
  */
 static inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___test_and_clear_bit_uses_plain_access))
-		__instrument_read_write_bitop(nr, addr);
+	__instrument_read_write_bitop(nr, addr);
 	return arch___test_and_clear_bit(nr, addr);
 }
 
@@ -125,8 +120,7 @@ static inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr)
  */
 static inline bool __test_and_change_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___test_and_change_bit_uses_plain_access))
-		__instrument_read_write_bitop(nr, addr);
+	__instrument_read_write_bitop(nr, addr);
 	return arch___test_and_change_bit(nr, addr);
 }
 
@@ -137,8 +131,7 @@ static inline bool __test_and_change_bit(long nr, volatile unsigned long *addr)
  */
 static inline bool test_bit(long nr, const volatile unsigned long *addr)
 {
-	if (!__is_defined(arch_test_bit_uses_plain_access))
-		instrument_atomic_read(addr + BIT_WORD(nr), sizeof(long));
+	instrument_atomic_read(addr + BIT_WORD(nr), sizeof(long));
 	return arch_test_bit(nr, addr);
 }
 
diff --git a/include/asm-generic/bitops/non-atomic.h b/include/asm-generic/bitops/non-atomic.h
index c8149cd52730..365377fb104b 100644
--- a/include/asm-generic/bitops/non-atomic.h
+++ b/include/asm-generic/bitops/non-atomic.h
@@ -21,7 +21,7 @@ arch___set_bit(int nr, volatile unsigned long *addr)
 
 	*p  |= mask;
 }
-#define arch___set_bit_uses_plain_access
+#define __set_bit arch___set_bit
 
 static __always_inline void
 arch___clear_bit(int nr, volatile unsigned long *addr)
@@ -31,7 +31,7 @@ arch___clear_bit(int nr, volatile unsigned long *addr)
 
 	*p &= ~mask;
 }
-#define arch___clear_bit_uses_plain_access
+#define __clear_bit arch___clear_bit
 
 /**
  * arch___change_bit - Toggle a bit in memory
@@ -50,7 +50,7 @@ void arch___change_bit(int nr, volatile unsigned long *addr)
 
 	*p ^= mask;
 }
-#define arch___change_bit_uses_plain_access
+#define __change_bit arch___change_bit
 
 /**
  * arch___test_and_set_bit - Set a bit and return its old value
@@ -71,7 +71,7 @@ arch___test_and_set_bit(int nr, volatile unsigned long *addr)
 	*p = old | mask;
 	return (old & mask) != 0;
 }
-#define arch___test_and_set_bit_uses_plain_access
+#define __test_and_set_bit arch___test_and_set_bit
 
 /**
  * arch___test_and_clear_bit - Clear a bit and return its old value
@@ -92,7 +92,7 @@ arch___test_and_clear_bit(int nr, volatile unsigned long *addr)
 	*p = old & ~mask;
 	return (old & mask) != 0;
 }
-#define arch___test_and_clear_bit_uses_plain_access
+#define __test_and_clear_bit arch___test_and_clear_bit
 
 /* WARNING: non atomic and it can be reordered! */
 static __always_inline int
@@ -105,7 +105,7 @@ arch___test_and_change_bit(int nr, volatile unsigned long *addr)
 	*p = old ^ mask;
 	return (old & mask) != 0;
 }
-#define arch___test_and_change_bit_uses_plain_access
+#define __test_and_change_bit arch___test_and_change_bit
 
 /**
  * arch_test_bit - Determine whether a bit is set
@@ -117,8 +117,6 @@ arch_test_bit(int nr, const volatile unsigned long *addr)
 {
 	return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
 }
-#define arch_test_bit_uses_plain_access
-
-#include <asm-generic/bitops/instrumented-non-atomic.h>
+#define test_bit arch_test_bit
 
 #endif /* _ASM_GENERIC_BITOPS_NON_ATOMIC_H_ */
-- 
2.11.0


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

* Re: [PATCH] locking/atomic: simplify non-atomic wrappers
  2021-07-21 15:58 [PATCH] locking/atomic: simplify non-atomic wrappers Mark Rutland
@ 2021-07-22  7:21 ` Marco Elver
  2021-07-28  9:26 ` Peter Zijlstra
  2021-08-05  9:40 ` [tip: locking/core] " tip-bot2 for Mark Rutland
  2 siblings, 0 replies; 4+ messages in thread
From: Marco Elver @ 2021-07-22  7:21 UTC (permalink / raw)
  To: Mark Rutland; +Cc: linux-kernel, peterz

On Wed, 21 Jul 2021 at 17:58, Mark Rutland <mark.rutland@arm.com> wrote:
>
> Since the non-atomic arch_*() bitops use plain accesses, they are
> implicitly instrumnted by the compiler, and we work around this in the
> instrumented wrappers to avoid double instrumentation.
>
> It's simpler to avoid the wrappers entirely, and use the preprocessor to
> alias the arch_*() bitops to their regular versions, removing the need
> for checks in the instrumented wrappers.
>
> Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> Suggested-by: Marco Elver <elver@google.com>
> Cc: Peter Zijlstra <peterz@infradead.org>

Reviewed-by: Marco Elver <elver@google.com>

Thank you!

> ---
>  .../asm-generic/bitops/instrumented-non-atomic.h    | 21 +++++++--------------
>  include/asm-generic/bitops/non-atomic.h             | 16 +++++++---------
>  2 files changed, 14 insertions(+), 23 deletions(-)
>
> Hi Peter,
>
> Are you happy to take this atop your queue/locking/core branch?
>
> This was suggested by Marco in [1], and also sidesteps some particularly bad
> stack spills as in [2].
>
> [1] https://lore.kernel.org/r/CANpmjNNVn4UxBCMg1ke9xaQNv52OMuQjr17GxUXojZKwiAFzzg@mail.gmail.com
> [2] https://lore.kernel.org/r/20210719100719.GB12806@C02TD0UTHF1T.local/
>
> Thanks,
> Mark.
>
> diff --git a/include/asm-generic/bitops/instrumented-non-atomic.h b/include/asm-generic/bitops/instrumented-non-atomic.h
> index e6c1540965d6..37363d570b9b 100644
> --- a/include/asm-generic/bitops/instrumented-non-atomic.h
> +++ b/include/asm-generic/bitops/instrumented-non-atomic.h
> @@ -24,8 +24,7 @@
>   */
>  static inline void __set_bit(long nr, volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch___set_bit_uses_plain_access))
> -               instrument_write(addr + BIT_WORD(nr), sizeof(long));
> +       instrument_write(addr + BIT_WORD(nr), sizeof(long));
>         arch___set_bit(nr, addr);
>  }
>
> @@ -40,8 +39,7 @@ static inline void __set_bit(long nr, volatile unsigned long *addr)
>   */
>  static inline void __clear_bit(long nr, volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch___clear_bit_uses_plain_access))
> -               instrument_write(addr + BIT_WORD(nr), sizeof(long));
> +       instrument_write(addr + BIT_WORD(nr), sizeof(long));
>         arch___clear_bit(nr, addr);
>  }
>
> @@ -56,8 +54,7 @@ static inline void __clear_bit(long nr, volatile unsigned long *addr)
>   */
>  static inline void __change_bit(long nr, volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch___change_bit_uses_plain_access))
> -               instrument_write(addr + BIT_WORD(nr), sizeof(long));
> +       instrument_write(addr + BIT_WORD(nr), sizeof(long));
>         arch___change_bit(nr, addr);
>  }
>
> @@ -95,8 +92,7 @@ static inline void __instrument_read_write_bitop(long nr, volatile unsigned long
>   */
>  static inline bool __test_and_set_bit(long nr, volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch___test_and_set_bit_uses_plain_access))
> -               __instrument_read_write_bitop(nr, addr);
> +       __instrument_read_write_bitop(nr, addr);
>         return arch___test_and_set_bit(nr, addr);
>  }
>
> @@ -110,8 +106,7 @@ static inline bool __test_and_set_bit(long nr, volatile unsigned long *addr)
>   */
>  static inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch___test_and_clear_bit_uses_plain_access))
> -               __instrument_read_write_bitop(nr, addr);
> +       __instrument_read_write_bitop(nr, addr);
>         return arch___test_and_clear_bit(nr, addr);
>  }
>
> @@ -125,8 +120,7 @@ static inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr)
>   */
>  static inline bool __test_and_change_bit(long nr, volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch___test_and_change_bit_uses_plain_access))
> -               __instrument_read_write_bitop(nr, addr);
> +       __instrument_read_write_bitop(nr, addr);
>         return arch___test_and_change_bit(nr, addr);
>  }
>
> @@ -137,8 +131,7 @@ static inline bool __test_and_change_bit(long nr, volatile unsigned long *addr)
>   */
>  static inline bool test_bit(long nr, const volatile unsigned long *addr)
>  {
> -       if (!__is_defined(arch_test_bit_uses_plain_access))
> -               instrument_atomic_read(addr + BIT_WORD(nr), sizeof(long));
> +       instrument_atomic_read(addr + BIT_WORD(nr), sizeof(long));
>         return arch_test_bit(nr, addr);
>  }
>
> diff --git a/include/asm-generic/bitops/non-atomic.h b/include/asm-generic/bitops/non-atomic.h
> index c8149cd52730..365377fb104b 100644
> --- a/include/asm-generic/bitops/non-atomic.h
> +++ b/include/asm-generic/bitops/non-atomic.h
> @@ -21,7 +21,7 @@ arch___set_bit(int nr, volatile unsigned long *addr)
>
>         *p  |= mask;
>  }
> -#define arch___set_bit_uses_plain_access
> +#define __set_bit arch___set_bit
>
>  static __always_inline void
>  arch___clear_bit(int nr, volatile unsigned long *addr)
> @@ -31,7 +31,7 @@ arch___clear_bit(int nr, volatile unsigned long *addr)
>
>         *p &= ~mask;
>  }
> -#define arch___clear_bit_uses_plain_access
> +#define __clear_bit arch___clear_bit
>
>  /**
>   * arch___change_bit - Toggle a bit in memory
> @@ -50,7 +50,7 @@ void arch___change_bit(int nr, volatile unsigned long *addr)
>
>         *p ^= mask;
>  }
> -#define arch___change_bit_uses_plain_access
> +#define __change_bit arch___change_bit
>
>  /**
>   * arch___test_and_set_bit - Set a bit and return its old value
> @@ -71,7 +71,7 @@ arch___test_and_set_bit(int nr, volatile unsigned long *addr)
>         *p = old | mask;
>         return (old & mask) != 0;
>  }
> -#define arch___test_and_set_bit_uses_plain_access
> +#define __test_and_set_bit arch___test_and_set_bit
>
>  /**
>   * arch___test_and_clear_bit - Clear a bit and return its old value
> @@ -92,7 +92,7 @@ arch___test_and_clear_bit(int nr, volatile unsigned long *addr)
>         *p = old & ~mask;
>         return (old & mask) != 0;
>  }
> -#define arch___test_and_clear_bit_uses_plain_access
> +#define __test_and_clear_bit arch___test_and_clear_bit
>
>  /* WARNING: non atomic and it can be reordered! */
>  static __always_inline int
> @@ -105,7 +105,7 @@ arch___test_and_change_bit(int nr, volatile unsigned long *addr)
>         *p = old ^ mask;
>         return (old & mask) != 0;
>  }
> -#define arch___test_and_change_bit_uses_plain_access
> +#define __test_and_change_bit arch___test_and_change_bit
>
>  /**
>   * arch_test_bit - Determine whether a bit is set
> @@ -117,8 +117,6 @@ arch_test_bit(int nr, const volatile unsigned long *addr)
>  {
>         return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
>  }
> -#define arch_test_bit_uses_plain_access
> -
> -#include <asm-generic/bitops/instrumented-non-atomic.h>
> +#define test_bit arch_test_bit
>
>  #endif /* _ASM_GENERIC_BITOPS_NON_ATOMIC_H_ */
> --
> 2.11.0
>

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

* Re: [PATCH] locking/atomic: simplify non-atomic wrappers
  2021-07-21 15:58 [PATCH] locking/atomic: simplify non-atomic wrappers Mark Rutland
  2021-07-22  7:21 ` Marco Elver
@ 2021-07-28  9:26 ` Peter Zijlstra
  2021-08-05  9:40 ` [tip: locking/core] " tip-bot2 for Mark Rutland
  2 siblings, 0 replies; 4+ messages in thread
From: Peter Zijlstra @ 2021-07-28  9:26 UTC (permalink / raw)
  To: Mark Rutland; +Cc: linux-kernel, elver

On Wed, Jul 21, 2021 at 04:58:13PM +0100, Mark Rutland wrote:
> Since the non-atomic arch_*() bitops use plain accesses, they are
> implicitly instrumnted by the compiler, and we work around this in the
> instrumented wrappers to avoid double instrumentation.
> 
> It's simpler to avoid the wrappers entirely, and use the preprocessor to
> alias the arch_*() bitops to their regular versions, removing the need
> for checks in the instrumented wrappers.
> 
> Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> Suggested-by: Marco Elver <elver@google.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> ---
>  .../asm-generic/bitops/instrumented-non-atomic.h    | 21 +++++++--------------
>  include/asm-generic/bitops/non-atomic.h             | 16 +++++++---------
>  2 files changed, 14 insertions(+), 23 deletions(-)
> 
> Hi Peter,
> 
> Are you happy to take this atop your queue/locking/core branch?
> 

Will do, thanks!

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

* [tip: locking/core] locking/atomic: simplify non-atomic wrappers
  2021-07-21 15:58 [PATCH] locking/atomic: simplify non-atomic wrappers Mark Rutland
  2021-07-22  7:21 ` Marco Elver
  2021-07-28  9:26 ` Peter Zijlstra
@ 2021-08-05  9:40 ` tip-bot2 for Mark Rutland
  2 siblings, 0 replies; 4+ messages in thread
From: tip-bot2 for Mark Rutland @ 2021-08-05  9:40 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Marco Elver, Mark Rutland, Peter Zijlstra (Intel), x86, linux-kernel

The following commit has been merged into the locking/core branch of tip:

Commit-ID:     9248e52fec9536590852844b0634b5d20483c1ab
Gitweb:        https://git.kernel.org/tip/9248e52fec9536590852844b0634b5d20483c1ab
Author:        Mark Rutland <mark.rutland@arm.com>
AuthorDate:    Wed, 21 Jul 2021 16:58:13 +01:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Wed, 04 Aug 2021 15:16:47 +02:00

locking/atomic: simplify non-atomic wrappers

Since the non-atomic arch_*() bitops use plain accesses, they are
implicitly instrumnted by the compiler, and we work around this in the
instrumented wrappers to avoid double instrumentation.

It's simpler to avoid the wrappers entirely, and use the preprocessor to
alias the arch_*() bitops to their regular versions, removing the need
for checks in the instrumented wrappers.

Suggested-by: Marco Elver <elver@google.com>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Marco Elver <elver@google.com>
Link: https://lore.kernel.org/r/20210721155813.17082-1-mark.rutland@arm.com
---
 include/asm-generic/bitops/instrumented-non-atomic.h | 21 +++--------
 include/asm-generic/bitops/non-atomic.h              | 16 +++-----
 2 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/include/asm-generic/bitops/instrumented-non-atomic.h b/include/asm-generic/bitops/instrumented-non-atomic.h
index e6c1540..37363d5 100644
--- a/include/asm-generic/bitops/instrumented-non-atomic.h
+++ b/include/asm-generic/bitops/instrumented-non-atomic.h
@@ -24,8 +24,7 @@
  */
 static inline void __set_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___set_bit_uses_plain_access))
-		instrument_write(addr + BIT_WORD(nr), sizeof(long));
+	instrument_write(addr + BIT_WORD(nr), sizeof(long));
 	arch___set_bit(nr, addr);
 }
 
@@ -40,8 +39,7 @@ static inline void __set_bit(long nr, volatile unsigned long *addr)
  */
 static inline void __clear_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___clear_bit_uses_plain_access))
-		instrument_write(addr + BIT_WORD(nr), sizeof(long));
+	instrument_write(addr + BIT_WORD(nr), sizeof(long));
 	arch___clear_bit(nr, addr);
 }
 
@@ -56,8 +54,7 @@ static inline void __clear_bit(long nr, volatile unsigned long *addr)
  */
 static inline void __change_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___change_bit_uses_plain_access))
-		instrument_write(addr + BIT_WORD(nr), sizeof(long));
+	instrument_write(addr + BIT_WORD(nr), sizeof(long));
 	arch___change_bit(nr, addr);
 }
 
@@ -95,8 +92,7 @@ static inline void __instrument_read_write_bitop(long nr, volatile unsigned long
  */
 static inline bool __test_and_set_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___test_and_set_bit_uses_plain_access))
-		__instrument_read_write_bitop(nr, addr);
+	__instrument_read_write_bitop(nr, addr);
 	return arch___test_and_set_bit(nr, addr);
 }
 
@@ -110,8 +106,7 @@ static inline bool __test_and_set_bit(long nr, volatile unsigned long *addr)
  */
 static inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___test_and_clear_bit_uses_plain_access))
-		__instrument_read_write_bitop(nr, addr);
+	__instrument_read_write_bitop(nr, addr);
 	return arch___test_and_clear_bit(nr, addr);
 }
 
@@ -125,8 +120,7 @@ static inline bool __test_and_clear_bit(long nr, volatile unsigned long *addr)
  */
 static inline bool __test_and_change_bit(long nr, volatile unsigned long *addr)
 {
-	if (!__is_defined(arch___test_and_change_bit_uses_plain_access))
-		__instrument_read_write_bitop(nr, addr);
+	__instrument_read_write_bitop(nr, addr);
 	return arch___test_and_change_bit(nr, addr);
 }
 
@@ -137,8 +131,7 @@ static inline bool __test_and_change_bit(long nr, volatile unsigned long *addr)
  */
 static inline bool test_bit(long nr, const volatile unsigned long *addr)
 {
-	if (!__is_defined(arch_test_bit_uses_plain_access))
-		instrument_atomic_read(addr + BIT_WORD(nr), sizeof(long));
+	instrument_atomic_read(addr + BIT_WORD(nr), sizeof(long));
 	return arch_test_bit(nr, addr);
 }
 
diff --git a/include/asm-generic/bitops/non-atomic.h b/include/asm-generic/bitops/non-atomic.h
index c8149cd..365377f 100644
--- a/include/asm-generic/bitops/non-atomic.h
+++ b/include/asm-generic/bitops/non-atomic.h
@@ -21,7 +21,7 @@ arch___set_bit(int nr, volatile unsigned long *addr)
 
 	*p  |= mask;
 }
-#define arch___set_bit_uses_plain_access
+#define __set_bit arch___set_bit
 
 static __always_inline void
 arch___clear_bit(int nr, volatile unsigned long *addr)
@@ -31,7 +31,7 @@ arch___clear_bit(int nr, volatile unsigned long *addr)
 
 	*p &= ~mask;
 }
-#define arch___clear_bit_uses_plain_access
+#define __clear_bit arch___clear_bit
 
 /**
  * arch___change_bit - Toggle a bit in memory
@@ -50,7 +50,7 @@ void arch___change_bit(int nr, volatile unsigned long *addr)
 
 	*p ^= mask;
 }
-#define arch___change_bit_uses_plain_access
+#define __change_bit arch___change_bit
 
 /**
  * arch___test_and_set_bit - Set a bit and return its old value
@@ -71,7 +71,7 @@ arch___test_and_set_bit(int nr, volatile unsigned long *addr)
 	*p = old | mask;
 	return (old & mask) != 0;
 }
-#define arch___test_and_set_bit_uses_plain_access
+#define __test_and_set_bit arch___test_and_set_bit
 
 /**
  * arch___test_and_clear_bit - Clear a bit and return its old value
@@ -92,7 +92,7 @@ arch___test_and_clear_bit(int nr, volatile unsigned long *addr)
 	*p = old & ~mask;
 	return (old & mask) != 0;
 }
-#define arch___test_and_clear_bit_uses_plain_access
+#define __test_and_clear_bit arch___test_and_clear_bit
 
 /* WARNING: non atomic and it can be reordered! */
 static __always_inline int
@@ -105,7 +105,7 @@ arch___test_and_change_bit(int nr, volatile unsigned long *addr)
 	*p = old ^ mask;
 	return (old & mask) != 0;
 }
-#define arch___test_and_change_bit_uses_plain_access
+#define __test_and_change_bit arch___test_and_change_bit
 
 /**
  * arch_test_bit - Determine whether a bit is set
@@ -117,8 +117,6 @@ arch_test_bit(int nr, const volatile unsigned long *addr)
 {
 	return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
 }
-#define arch_test_bit_uses_plain_access
-
-#include <asm-generic/bitops/instrumented-non-atomic.h>
+#define test_bit arch_test_bit
 
 #endif /* _ASM_GENERIC_BITOPS_NON_ATOMIC_H_ */

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

end of thread, other threads:[~2021-08-05  9:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-21 15:58 [PATCH] locking/atomic: simplify non-atomic wrappers Mark Rutland
2021-07-22  7:21 ` Marco Elver
2021-07-28  9:26 ` Peter Zijlstra
2021-08-05  9:40 ` [tip: locking/core] " tip-bot2 for Mark Rutland

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).