From: "Jan Beulich" Subject: [PATCH] x86: simplify a few macros / inline functions Date: Fri, 08 May 2015 07:42:38 +0100 Message-ID: <554C76FE0200007800077F45@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__PartE5D1F1CE.1__=" Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Yqbzd-0003dC-L0 for xen-devel@lists.xenproject.org; Fri, 08 May 2015 06:42:41 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: Andrew Cooper , Keir Fraser List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__PartE5D1F1CE.1__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Drop pointless casts and write_atomic()'s bogus and unused "return value". Signed-off-by: Jan Beulich --- a/xen/include/asm-x86/atomic.h +++ b/xen/include/asm-x86/atomic.h @@ -17,12 +17,11 @@ static inline void name(volatile type *a build_read_atomic(read_u8_atomic, "b", uint8_t, "=3Dq", ) build_read_atomic(read_u16_atomic, "w", uint16_t, "=3Dr", ) build_read_atomic(read_u32_atomic, "l", uint32_t, "=3Dr", ) +build_read_atomic(read_u64_atomic, "q", uint64_t, "=3Dr", ) =20 build_write_atomic(write_u8_atomic, "b", uint8_t, "q", ) build_write_atomic(write_u16_atomic, "w", uint16_t, "r", ) build_write_atomic(write_u32_atomic, "l", uint32_t, "r", ) - -build_read_atomic(read_u64_atomic, "q", uint64_t, "=3Dr", ) build_write_atomic(write_u64_atomic, "q", uint64_t, "r", ) =20 #undef build_read_atomic @@ -30,29 +29,28 @@ build_write_atomic(write_u64_atomic, "q" =20 void __bad_atomic_size(void); =20 -#define read_atomic(p) ({ \ - unsigned long x_; \ - switch ( sizeof(*(p)) ) { \ - case 1: x_ =3D read_u8_atomic((uint8_t *)(p)); break; = \ - case 2: x_ =3D read_u16_atomic((uint16_t *)(p)); break; = \ - case 4: x_ =3D read_u32_atomic((uint32_t *)(p)); break; = \ - case 8: x_ =3D read_u64_atomic((uint64_t *)(p)); break; = \ - default: x_ =3D 0; __bad_atomic_size(); break; = \ - } \ - (typeof(*(p)))x_; \ +#define read_atomic(p) ({ \ + unsigned long x_; \ + switch ( sizeof(*(p)) ) { \ + case 1: x_ =3D read_u8_atomic((uint8_t *)(p)); break; \ + case 2: x_ =3D read_u16_atomic((uint16_t *)(p)); break; \ + case 4: x_ =3D read_u32_atomic((uint32_t *)(p)); break; \ + case 8: x_ =3D read_u64_atomic((uint64_t *)(p)); break; \ + default: x_ =3D 0; __bad_atomic_size(); break; \ + } \ + (typeof(*(p)))x_; \ }) =20 -#define write_atomic(p, x) ({ \ - typeof(*(p)) __x =3D (x); = \ - unsigned long x_ =3D (unsigned long)__x; = \ - switch ( sizeof(*(p)) ) { \ - case 1: write_u8_atomic((uint8_t *)(p), (uint8_t)x_); break; \ - case 2: write_u16_atomic((uint16_t *)(p), (uint16_t)x_); break; \ - case 4: write_u32_atomic((uint32_t *)(p), (uint32_t)x_); break; \ - case 8: write_u64_atomic((uint64_t *)(p), (uint64_t)x_); break; \ - default: __bad_atomic_size(); break; \ - } \ - __x; \ +#define write_atomic(p, x) ({ \ + typeof(*(p)) __x =3D (x); \ + unsigned long x_ =3D (unsigned long)__x; \ + switch ( sizeof(*(p)) ) { \ + case 1: write_u8_atomic((uint8_t *)(p), x_); break; \ + case 2: write_u16_atomic((uint16_t *)(p), x_); break; \ + case 4: write_u32_atomic((uint32_t *)(p), x_); break; \ + case 8: write_u64_atomic((uint64_t *)(p), x_); break; \ + default: __bad_atomic_size(); break; \ + } \ }) =20 /* --- a/xen/include/asm-x86/system.h +++ b/xen/include/asm-x86/system.h @@ -41,25 +41,25 @@ static always_inline unsigned long __xch case 1: asm volatile ( "xchgb %b0,%1" : "=3Dq" (x) - : "m" (*__xg((volatile void *)ptr)), "0" (x) + : "m" (*__xg(ptr)), "0" (x) : "memory" ); break; case 2: asm volatile ( "xchgw %w0,%1" : "=3Dr" (x) - : "m" (*__xg((volatile void *)ptr)), "0" (x) + : "m" (*__xg(ptr)), "0" (x) : "memory" ); break; case 4: asm volatile ( "xchgl %k0,%1" : "=3Dr" (x) - : "m" (*__xg((volatile void *)ptr)), "0" (x) + : "m" (*__xg(ptr)), "0" (x) : "memory" ); break; case 8: asm volatile ( "xchgq %0,%1" : "=3Dr" (x) - : "m" (*__xg((volatile void *)ptr)), "0" (x) + : "m" (*__xg(ptr)), "0" (x) : "memory" ); break; } @@ -81,28 +81,28 @@ static always_inline unsigned long __cmp case 1: asm volatile ( "lock; cmpxchgb %b1,%2" : "=3Da" (prev) - : "q" (new), "m" (*__xg((volatile void *)ptr)), + : "q" (new), "m" (*__xg(ptr)), "0" (old) : "memory" ); return prev; case 2: asm volatile ( "lock; cmpxchgw %w1,%2" : "=3Da" (prev) - : "r" (new), "m" (*__xg((volatile void *)ptr)), + : "r" (new), "m" (*__xg(ptr)), "0" (old) : "memory" ); return prev; case 4: asm volatile ( "lock; cmpxchgl %k1,%2" : "=3Da" (prev) - : "r" (new), "m" (*__xg((volatile void *)ptr)), + : "r" (new), "m" (*__xg(ptr)), "0" (old) : "memory" ); return prev; case 8: asm volatile ( "lock; cmpxchgq %1,%2" : "=3Da" (prev) - : "r" (new), "m" (*__xg((volatile void *)ptr)), + : "r" (new), "m" (*__xg(ptr)), "0" (old) : "memory" ); return prev; --=__PartE5D1F1CE.1__= Content-Type: text/plain; name="x86-simplify-macros.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="x86-simplify-macros.patch" x86: simplify a few macros / inline functions=0A=0ADrop pointless casts = and write_atomic()'s bogus and unused "return=0Avalue".=0A=0ASigned-off-by:= Jan Beulich =0A=0A--- a/xen/include/asm-x86/atomic.h=0A= +++ b/xen/include/asm-x86/atomic.h=0A@@ -17,12 +17,11 @@ static inline = void name(volatile type *a=0A build_read_atomic(read_u8_atomic, "b", = uint8_t, "=3Dq", )=0A build_read_atomic(read_u16_atomic, "w", uint16_t, = "=3Dr", )=0A build_read_atomic(read_u32_atomic, "l", uint32_t, "=3Dr", = )=0A+build_read_atomic(read_u64_atomic, "q", uint64_t, "=3Dr", )=0A =0A = build_write_atomic(write_u8_atomic, "b", uint8_t, "q", )=0A build_write_ato= mic(write_u16_atomic, "w", uint16_t, "r", )=0A build_write_atomic(write_u32= _atomic, "l", uint32_t, "r", )=0A-=0A-build_read_atomic(read_u64_atomic, = "q", uint64_t, "=3Dr", )=0A build_write_atomic(write_u64_atomic, "q", = uint64_t, "r", )=0A =0A #undef build_read_atomic=0A@@ -30,29 +29,28 @@ = build_write_atomic(write_u64_atomic, "q"=0A =0A void __bad_atomic_size(void= );=0A =0A-#define read_atomic(p) ({ = \=0A- unsigned long x_; = \=0A- switch ( sizeof(*(p)) ) { = \=0A- case 1: x_ =3D read_u8_atomic((uint8_t *)(p)); break; = \=0A- case 2: x_ =3D read_u16_atomic((uint16_t *)(p)); = break; \=0A- case 4: x_ =3D read_u32_atomic((uint32_t = *)(p)); break; \=0A- case 8: x_ =3D read_u64_atomic((uint6= 4_t *)(p)); break; \=0A- default: x_ =3D 0; __bad_atomic_s= ize(); break; \=0A- } = \=0A- (typeof(*(p)))x_; = \=0A+#define read_atomic(p) ({ = \=0A+ unsigned long x_; = \=0A+ switch ( sizeof(*(p)) ) { = \=0A+ case 1: x_ =3D read_u8_atomic((uint8_t *)(p)); break; = \=0A+ case 2: x_ =3D read_u16_atomic((uint16_t *)(p)); break; \=0A+ = case 4: x_ =3D read_u32_atomic((uint32_t *)(p)); break; \=0A+ case 8: = x_ =3D read_u64_atomic((uint64_t *)(p)); break; \=0A+ default: x_ =3D = 0; __bad_atomic_size(); break; \=0A+ } = \=0A+ (typeof(*(p)))x_; = \=0A })=0A =0A-#define write_atomic(p, x) ({ = \=0A- typeof(*(p)) __x =3D (x); = \=0A- unsigned long x_ =3D (unsigned = long)__x; \=0A- switch ( sizeof(*(p)) ) { = \=0A- case 1: write_u8_atomic((= uint8_t *)(p), (uint8_t)x_); break; \=0A- case 2: write_u16_atomi= c((uint16_t *)(p), (uint16_t)x_); break; \=0A- case 4: write_u32_ato= mic((uint32_t *)(p), (uint32_t)x_); break; \=0A- case 8: write_u64_a= tomic((uint64_t *)(p), (uint64_t)x_); break; \=0A- default: = __bad_atomic_size(); break; \=0A- } = \=0A- __x; = \=0A+#define= write_atomic(p, x) ({ \=0A+ typeof(*(p)) = __x =3D (x); \=0A+ unsigned long x_ =3D = (unsigned long)__x; \=0A+ switch ( sizeof(*(p)) ) { = \=0A+ case 1: write_u8_atomic((uint8_t *)(p), = x_); break; \=0A+ case 2: write_u16_atomic((uint16_t *)(p), x_); = break; \=0A+ case 4: write_u32_atomic((uint32_t *)(p), x_); break; = \=0A+ case 8: write_u64_atomic((uint64_t *)(p), x_); break; \=0A+ = default: __bad_atomic_size(); break; \=0A+ } = \=0A })=0A =0A /*=0A--- = a/xen/include/asm-x86/system.h=0A+++ b/xen/include/asm-x86/system.h=0A@@ = -41,25 +41,25 @@ static always_inline unsigned long __xch=0A case = 1:=0A asm volatile ( "xchgb %b0,%1"=0A : = "=3Dq" (x)=0A- : "m" (*__xg((volatile void *)ptr)), = "0" (x)=0A+ : "m" (*__xg(ptr)), "0" (x)=0A = : "memory" );=0A break;=0A case 2:=0A asm = volatile ( "xchgw %w0,%1"=0A : "=3Dr" (x)=0A- = : "m" (*__xg((volatile void *)ptr)), "0" (x)=0A+ = : "m" (*__xg(ptr)), "0" (x)=0A : = "memory" );=0A break;=0A case 4:=0A asm volatile ( = "xchgl %k0,%1"=0A : "=3Dr" (x)=0A- = : "m" (*__xg((volatile void *)ptr)), "0" (x)=0A+ = : "m" (*__xg(ptr)), "0" (x)=0A : "memory" );=0A = break;=0A case 8:=0A asm volatile ( "xchgq %0,%1"=0A = : "=3Dr" (x)=0A- : "m" (*__xg((vola= tile void *)ptr)), "0" (x)=0A+ : "m" (*__xg(ptr)), = "0" (x)=0A : "memory" );=0A break;=0A = }=0A@@ -81,28 +81,28 @@ static always_inline unsigned long __cmp=0A = case 1:=0A asm volatile ( "lock; cmpxchgb %b1,%2"=0A = : "=3Da" (prev)=0A- : "q" (new), "m" = (*__xg((volatile void *)ptr)),=0A+ : "q" (new), "m" = (*__xg(ptr)),=0A "0" (old)=0A = : "memory" );=0A return prev;=0A case 2:=0A asm = volatile ( "lock; cmpxchgw %w1,%2"=0A : "=3Da" = (prev)=0A- : "r" (new), "m" (*__xg((volatile void = *)ptr)),=0A+ : "r" (new), "m" (*__xg(ptr)),=0A = "0" (old)=0A : "memory" );=0A = return prev;=0A case 4:=0A asm volatile ( "lock; cmpxchgl = %k1,%2"=0A : "=3Da" (prev)=0A- = : "r" (new), "m" (*__xg((volatile void *)ptr)),=0A+ = : "r" (new), "m" (*__xg(ptr)),=0A "0" (old)=0A = : "memory" );=0A return prev;=0A case 8:=0A = asm volatile ( "lock; cmpxchgq %1,%2"=0A : = "=3Da" (prev)=0A- : "r" (new), "m" (*__xg((volatile = void *)ptr)),=0A+ : "r" (new), "m" (*__xg(ptr)),=0A = "0" (old)=0A : "memory" );=0A = return prev;=0A --=__PartE5D1F1CE.1__= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --=__PartE5D1F1CE.1__=--