[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] x86/bitops: Remove ADDR



commit cfad3bc123227f3588fdff1711fb443845d6d03f
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Sep 2 12:36:17 2026 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Sep 2 21:44:30 2026 +0100

    x86/bitops: Remove ADDR
    
    All this does is obfuscate the usage sites.
    
    No functional change.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Teddy Astie <teddy.astie@xxxxxxxxxx>
---
 docs/misra/rules.rst              |  3 ++-
 xen/arch/x86/include/asm/bitops.h | 34 +++++++++++++++++++++-------------
 2 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/docs/misra/rules.rst b/docs/misra/rules.rst
index b3e929307d..b174add811 100644
--- a/docs/misra/rules.rst
+++ b/docs/misra/rules.rst
@@ -212,7 +212,8 @@ maintainers if you want to suggest a change.
            static inline void set_bit(int nr, volatile void *addr)
            {
                asm volatile ( "lock btsl %1,%0"
-                              : "+m" (ADDR) : "Ir" (nr) : "memory");
+                              : "+m" (*(volatile int *)addr)
+                              : "Ir" (nr) : "memory" );
            }
            #define set_bit(nr, addr) ({                            \
                if ( bitop_bad_size(addr) ) __bitop_bad_size();     \
diff --git a/xen/arch/x86/include/asm/bitops.h 
b/xen/arch/x86/include/asm/bitops.h
index 66e2b522d5..b806002a96 100644
--- a/xen/arch/x86/include/asm/bitops.h
+++ b/xen/arch/x86/include/asm/bitops.h
@@ -10,15 +10,11 @@
 #include <asm/cpufeatureset.h>
 
 /*
- * We specify the memory operand as both input and output because the memory
- * operand is both read from and written to. Since the operand is in fact a
- * word array, we also specify "memory" in the clobbers list to indicate that
- * words other than the one directly addressed by the memory operand may be
- * modified.
+ * Since the operand is in fact a word array, we also specify "memory"
+ * in the clobbers list to indicate that words other than the one
+ * directly addressed by the memory operand may be modified.
  */
 
-#define ADDR (*(volatile int *) addr)
-
 /**
  * set_bit - Atomically set a bit in memory
  * @nr: the bit to set
@@ -32,7 +28,9 @@
 static inline void set_bit(int nr, volatile void *addr)
 {
     asm volatile ( "lock btsl %1,%0"
-                   : "+m" (ADDR) : "Ir" (nr) : "memory");
+                   : "+m" (*(volatile int *)addr)
+                   : "Ir" (nr)
+                   : "memory" );
 }
 #define set_bit(nr, addr) ({                            \
     if ( bitop_bad_size(addr) ) __bitop_bad_size();     \
@@ -73,7 +71,9 @@ static inline void constant_set_bit(int nr, void *addr)
 static inline void clear_bit(int nr, volatile void *addr)
 {
     asm volatile ( "lock btrl %1,%0"
-                   : "+m" (ADDR) : "Ir" (nr) : "memory");
+                   : "+m" (*(volatile int *)addr)
+                   : "Ir" (nr)
+                   : "memory" );
 }
 #define clear_bit(nr, addr) ({                          \
     if ( bitop_bad_size(addr) ) __bitop_bad_size();     \
@@ -140,7 +140,9 @@ static inline void constant_change_bit(int nr, void *addr)
 static inline void change_bit(int nr, volatile void *addr)
 {
     asm volatile ( "lock btcl %1,%0"
-                    : "+m" (ADDR) : "Ir" (nr) : "memory");
+                   : "+m" (*(volatile int *)addr)
+                   : "Ir" (nr)
+                   : "memory" );
 }
 #define change_bit(nr, addr) ({                         \
     if ( bitop_bad_size(addr) ) __bitop_bad_size();     \
@@ -162,7 +164,9 @@ static inline int test_and_set_bit(int nr, volatile void 
*addr)
     asm volatile ( "lock btsl %[nr], %[addr]\n\t"
                    ASM_FLAG_OUT(, "sbbl %[old], %[old]\n\t")
                    : [old] ASM_FLAG_OUT("=@ccc", "=r") (oldbit),
-                     [addr] "+m" (ADDR) : [nr] "Ir" (nr) : "memory" );
+                     [addr] "+m" (*(volatile int *)addr)
+                   : [nr] "Ir" (nr)
+                   : "memory" );
 
     return oldbit;
 }
@@ -208,7 +212,9 @@ static inline int test_and_clear_bit(int nr, volatile void 
*addr)
     asm volatile ( "lock btrl %[nr], %[addr]\n\t"
                    ASM_FLAG_OUT(, "sbbl %[old], %[old]\n\t")
                    : [old] ASM_FLAG_OUT("=@ccc", "=r") (oldbit),
-                     [addr] "+m" (ADDR) : [nr] "Ir" (nr) : "memory" );
+                     [addr] "+m" (*(volatile int *)addr)
+                   : [nr] "Ir" (nr)
+                   : "memory" );
 
     return oldbit;
 }
@@ -268,7 +274,9 @@ static inline int test_and_change_bit(int nr, volatile void 
*addr)
     asm volatile ( "lock btcl %[nr], %[addr]\n\t"
                    ASM_FLAG_OUT(, "sbbl %[old], %[old]\n\t")
                    : [old] ASM_FLAG_OUT("=@ccc", "=r") (oldbit),
-                     [addr] "+m" (ADDR) : [nr] "Ir" (nr) : "memory" );
+                     [addr] "+m" (*(volatile int *)addr)
+                   : [nr] "Ir" (nr)
+                   : "memory" );
 
     return oldbit;
 }
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.