Re: [Gc] [PATCH] Fix missing "unsigned" on fetch CAS calls
Ivan Maidanski
ivmai at mail.ru
Sun Jul 1 01:59:13 PDT 2012
Hi Ian,
Thank you. Done (committed to master branch). Please test it.
Regards,
Ivan Maidanski
Sun, 01 Jul 2012 00:08:02 -0700 Ian Wienand <ian at wienand.org>:
> Hi,
>
> Debian bug #679680 [1] found this issue
>
> In the generalize-small.h template we have
>
> ---
> #if defined(AO_HAVE_XSIZE_fetch_compare_and_swap_acquire) \
> && !defined(AO_HAVE_XSIZE_compare_and_swap_acquire)
> AO_INLINE int
> AO_XSIZE_compare_and_swap_acquire(volatile XCTYPE *addr, XCTYPE old_val,
> XCTYPE new_val)
> {
> return AO_XSIZE_fetch_compare_and_swap_acquire(addr, old_val, new_val)
> == old_val;
> }
> # define AO_HAVE_XSIZE_compare_and_swap_acquire
> #endif
> ---
>
> which matches for ia64; but then it tries to call the fetch CAS with
> "addr" which ia64 defines as
>
> ---
> AO_INLINE unsigned char
> AO_char_fetch_compare_and_swap_acquire(volatile unsigned char *addr,
> unsigned char old, unsigned char new_val)
>
> ---
>
> I'm pretty sure the "unsigned" just got left off in the template
>
> [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679680
>
> -i
>
> * atomic_ops/generalize-small.template : add unsigned qualifier
> when fetch CAS defined (Debian bug #679680)
> * atomic_ops/generalize-small.h : regenerate
>
> Signed-off-by: Ian Wienand <ian at wienand.org>
> ---
> src/atomic_ops/generalize-small.h | 45 ++++++++++++++++++------------
> src/atomic_ops/generalize-small.template | 15 ++++++----
> 2 files changed, 36 insertions(+), 24 deletions(-)
>
> diff --git a/src/atomic_ops/generalize-small.h b/src/atomic_ops/generalize-small.h
> index f30ebac..6cd6e6a 100644
> --- a/src/atomic_ops/generalize-small.h
> +++ b/src/atomic_ops/generalize-small.h
> @@ -158,8 +158,9 @@
> #if defined(AO_HAVE_char_fetch_compare_and_swap_full) \
> && !defined(AO_HAVE_char_compare_and_swap_full)
> AO_INLINE int
> - AO_char_compare_and_swap_full(volatile char *addr, char old_val,
> - char new_val)
> + AO_char_compare_and_swap_full(volatile unsigned char *addr,
> + unsigned char old_val,
> + unsigned char new_val)
> {
> return AO_char_fetch_compare_and_swap_full(addr, old_val, new_val)
> == old_val;
> @@ -170,8 +171,9 @@
> #if defined(AO_HAVE_char_fetch_compare_and_swap_acquire) \
> && !defined(AO_HAVE_char_compare_and_swap_acquire)
> AO_INLINE int
> - AO_char_compare_and_swap_acquire(volatile char *addr, char old_val,
> - char new_val)
> + AO_char_compare_and_swap_acquire(volatile unsigned char *addr,
> + unsigned char old_val,
> + unsigned char new_val)
> {
> return AO_char_fetch_compare_and_swap_acquire(addr, old_val, new_val)
> == old_val;
> @@ -182,8 +184,9 @@
> #if defined(AO_HAVE_char_fetch_compare_and_swap_release) \
> && !defined(AO_HAVE_char_compare_and_swap_release)
> AO_INLINE int
> - AO_char_compare_and_swap_release(volatile char *addr, char old_val,
> - char new_val)
> + AO_char_compare_and_swap_release(unsigned volatile char *addr,
> + unsigned char old_val,
> + unsigned char new_val)
> {
> return AO_char_fetch_compare_and_swap_release(addr, old_val, new_val)
> == old_val;
> @@ -781,8 +784,9 @@
> #if defined(AO_HAVE_short_fetch_compare_and_swap_full) \
> && !defined(AO_HAVE_short_compare_and_swap_full)
> AO_INLINE int
> - AO_short_compare_and_swap_full(volatile short *addr, short old_val,
> - short new_val)
> + AO_short_compare_and_swap_full(volatile unsigned short *addr,
> + unsigned short old_val,
> + unsigned short new_val)
> {
> return AO_short_fetch_compare_and_swap_full(addr, old_val, new_val)
> == old_val;
> @@ -793,8 +797,9 @@
> #if defined(AO_HAVE_short_fetch_compare_and_swap_acquire) \
> && !defined(AO_HAVE_short_compare_and_swap_acquire)
> AO_INLINE int
> - AO_short_compare_and_swap_acquire(volatile short *addr, short old_val,
> - short new_val)
> + AO_short_compare_and_swap_acquire(volatile unsigned short *addr,
> + unsigned short old_val,
> + unsigned short new_val)
> {
> return AO_short_fetch_compare_and_swap_acquire(addr, old_val, new_val)
> == old_val;
> @@ -805,8 +810,9 @@
> #if defined(AO_HAVE_short_fetch_compare_and_swap_release) \
> && !defined(AO_HAVE_short_compare_and_swap_release)
> AO_INLINE int
> - AO_short_compare_and_swap_release(volatile short *addr, short old_val,
> - short new_val)
> + AO_short_compare_and_swap_release(unsigned volatile short *addr,
> + unsigned short old_val,
> + unsigned short new_val)
> {
> return AO_short_fetch_compare_and_swap_release(addr, old_val, new_val)
> == old_val;
> @@ -1404,8 +1410,9 @@
> #if defined(AO_HAVE_int_fetch_compare_and_swap_full) \
> && !defined(AO_HAVE_int_compare_and_swap_full)
> AO_INLINE int
> - AO_int_compare_and_swap_full(volatile int *addr, int old_val,
> - int new_val)
> + AO_int_compare_and_swap_full(volatile unsigned int *addr,
> + unsigned int old_val,
> + unsigned int new_val)
> {
> return AO_int_fetch_compare_and_swap_full(addr, old_val, new_val)
> == old_val;
> @@ -1416,8 +1423,9 @@
> #if defined(AO_HAVE_int_fetch_compare_and_swap_acquire) \
> && !defined(AO_HAVE_int_compare_and_swap_acquire)
> AO_INLINE int
> - AO_int_compare_and_swap_acquire(volatile int *addr, int old_val,
> - int new_val)
> + AO_int_compare_and_swap_acquire(volatile unsigned int *addr,
> + unsigned int old_val,
> + unsigned int new_val)
> {
> return AO_int_fetch_compare_and_swap_acquire(addr, old_val, new_val)
> == old_val;
> @@ -1428,8 +1436,9 @@
> #if defined(AO_HAVE_int_fetch_compare_and_swap_release) \
> && !defined(AO_HAVE_int_compare_and_swap_release)
> AO_INLINE int
> - AO_int_compare_and_swap_release(volatile int *addr, int old_val,
> - int new_val)
> + AO_int_compare_and_swap_release(unsigned volatile int *addr,
> + unsigned int old_val,
> + unsigned int new_val)
> {
> return AO_int_fetch_compare_and_swap_release(addr, old_val, new_val)
> == old_val;
> diff --git a/src/atomic_ops/generalize-small.template b/src/atomic_ops/generalize-small.template
> index b11aa10..f4b573b 100644
> --- a/src/atomic_ops/generalize-small.template
> +++ b/src/atomic_ops/generalize-small.template
> @@ -158,8 +158,9 @@
> #if defined(AO_HAVE_XSIZE_fetch_compare_and_swap_full) \
> && !defined(AO_HAVE_XSIZE_compare_and_swap_full)
> AO_INLINE int
> - AO_XSIZE_compare_and_swap_full(volatile XCTYPE *addr, XCTYPE old_val,
> - XCTYPE new_val)
> + AO_XSIZE_compare_and_swap_full(volatile unsigned XCTYPE *addr,
> + unsigned XCTYPE old_val,
> + unsigned XCTYPE new_val)
> {
> return AO_XSIZE_fetch_compare_and_swap_full(addr, old_val, new_val)
> == old_val;
> @@ -170,8 +171,9 @@
> #if defined(AO_HAVE_XSIZE_fetch_compare_and_swap_acquire) \
> && !defined(AO_HAVE_XSIZE_compare_and_swap_acquire)
> AO_INLINE int
> - AO_XSIZE_compare_and_swap_acquire(volatile XCTYPE *addr, XCTYPE old_val,
> - XCTYPE new_val)
> + AO_XSIZE_compare_and_swap_acquire(volatile unsigned XCTYPE *addr,
> + unsigned XCTYPE old_val,
> + unsigned XCTYPE new_val)
> {
> return AO_XSIZE_fetch_compare_and_swap_acquire(addr, old_val, new_val)
> == old_val;
> @@ -182,8 +184,9 @@
> #if defined(AO_HAVE_XSIZE_fetch_compare_and_swap_release) \
> && !defined(AO_HAVE_XSIZE_compare_and_swap_release)
> AO_INLINE int
> - AO_XSIZE_compare_and_swap_release(volatile XCTYPE *addr, XCTYPE old_val,
> - XCTYPE new_val)
> + AO_XSIZE_compare_and_swap_release(unsigned volatile XCTYPE *addr,
> + unsigned XCTYPE old_val,
> + unsigned XCTYPE new_val)
> {
> return AO_XSIZE_fetch_compare_and_swap_release(addr, old_val, new_val)
> == old_val;
> --
> 1.7.10
>
>
>
> _______________________________________________
> Gc mailing list
> Gc at linux.hpl.hp.com
> http://www.hpl.hp.com/hosted/linux/mail-archives/gc/
>
More information about the Gc
mailing list