All this does is obfuscate the usage sites. No functional change.
Signed-off-by: Andrew Cooper <[email protected]> --- CC: Jan Beulich <[email protected]> CC: Roger Pau Monné <[email protected]> CC: Teddy Astie <[email protected]> CC: Stefano Stabellini <[email protected]> CC: Julien Grall <[email protected]> CC: Bertrand Marquis <[email protected]> CC: Michal Orzel <[email protected]> CC: Volodymyr Babchuk <[email protected]> --- docs/misra/rules.rst | 3 ++- xen/arch/x86/include/asm/bitops.h | 34 ++++++++++++++++--------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/docs/misra/rules.rst b/docs/misra/rules.rst index b3e929307d51..d6be4b0c5d43 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 fbcab32fd239..45fc64474344 100644 --- a/xen/arch/x86/include/asm/bitops.h +++ b/xen/arch/x86/include/asm/bitops.h @@ -9,16 +9,6 @@ #include <asm/asm_defns.h> #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. - */ - -#define ADDR (*(volatile int *) addr) - /** * set_bit - Atomically set a bit in memory * @nr: the bit to set @@ -32,7 +22,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 +65,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 +134,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 +158,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 +206,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 +268,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; } -- 2.34.1
