This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Update to new generic semaphore algorithm v2
- From: Andreas Schwab <schwab at suse dot de>
- To: Torvald Riegel <triegel at redhat dot com>
- Cc: "Carlos O'Donell" <carlos at redhat dot com>, GLIBC Devel <libc-alpha at sourceware dot org>
- Date: Thu, 07 Feb 2019 11:26:06 +0100
- Subject: Re: [PATCH] Update to new generic semaphore algorithm v2
- References: <1421111716.23151.35.camel@triegel.csb>
On Jan 13 2015, Torvald Riegel <triegel@redhat.com> wrote:
> diff --git a/nptl/sem_getvalue.c b/nptl/sem_getvalue.c
> index c3c91e1..1432cc7 100644
> --- a/nptl/sem_getvalue.c
> +++ b/nptl/sem_getvalue.c
> @@ -19,23 +19,37 @@
> #include <semaphore.h>
> #include <shlib-compat.h>
> #include "semaphoreP.h"
> +#include <atomic.h>
>
>
> int
> -__new_sem_getvalue (sem, sval)
> - sem_t *sem;
> - int *sval;
> +__new_sem_getvalue (sem_t *sem, int *sval)
> {
> struct new_sem *isem = (struct new_sem *) sem;
>
> /* XXX Check for valid SEM parameter. */
> -
> - *sval = isem->value;
> + /* FIXME This uses relaxed MO, even though POSIX specifies that this function
> + should be linearizable. However, its debatable whether linearizability
> + is the right requirement. We need to follow up with POSIX and, if
> + necessary, use a stronger MO here and elsewhere (e.g., potentially
> + release MO in all places where we consume a token). */
> +
> +#if __HAVE_64B_ATOMICS
> + *sval = atomic_load_relaxed (&isem->data) & SEM_VALUE_MASK;
> +#else
> + *sval = atomic_load_relaxed (&isem->value) >> SEM_VALUE_SHIFT;
> +#endif
This has the effect that a semaphore that is shared between a x86-64 and
a x86-32 process no longer yields the same value, because the latter
does not define __HAVE_64B_ATOMICS.
Andreas.
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."