From: "Ser, Simon" <simon.ser@intel.com>
To: "guillaume.tucker@collabora.com" <guillaume.tucker@collabora.com>,
"Hiler, Arkadiusz" <arkadiusz.hiler@intel.com>,
"Latvala, Petri" <petri.latvala@intel.com>
Cc: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>
Subject: Re: [Intel-gfx] [igt-dev] [PATCH i-g-t 3/4] i915/gem_create: use __atomic_* instead of __sync_*
Date: Thu, 6 Jun 2019 07:20:23 +0000 [thread overview]
Message-ID: <facd43d06d2f0f2060163727ba1bcd17a871ca84.camel@intel.com> (raw)
In-Reply-To: <af5b9b35eb142b53fb7cb4684b494bc6ccb047f1.1559562608.git.guillaume.tucker@collabora.com>
On Mon, 2019-06-03 at 12:54 +0100, Guillaume Tucker wrote:
> Replace calls to the older __sync_* functions with the new __atomic_*
> standard ones. This fixes builds on some architectures, in particular
> MIPS which doesn't have __sync_add_and_fetch_8 and
> __sync_val_compare_and_swap_8 for 64-bit variable handling.
Can't we use the C11 atomics from stdatomic.h instead?
For instance:
https://en.cppreference.com/w/c/atomic/atomic_compare_exchange
> Signed-off-by: Guillaume Tucker <guillaume.tucker@collabora.com>
> ---
> tests/Makefile.am | 2 +-
> tests/i915/gem_create.c | 12 ++++++++++--
> 2 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 5097debf629c..18a0f1f20592 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -90,7 +90,7 @@ AM_LDFLAGS = -Wl,--as-needed
> drm_import_export_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> drm_import_export_LDADD = $(LDADD) -lpthread
> gem_create_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> -gem_create_LDADD = $(LDADD) -lpthread
> +gem_create_LDADD = $(LDADD) -lpthread -latomic
> gem_close_race_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> gem_close_race_LDADD = $(LDADD) -lpthread
> gem_ctx_thrash_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> diff --git a/tests/i915/gem_create.c b/tests/i915/gem_create.c
> index 43cbf45f289b..a4aeb94b3f93 100644
> --- a/tests/i915/gem_create.c
> +++ b/tests/i915/gem_create.c
> @@ -156,6 +156,14 @@ static void invalid_nonaligned_size(int fd)
> gem_close(fd, create.handle);
> }
>
> +static uint64_t atomic_compare_swap_u64(uint64_t *ptr, uint64_t oldval,
> + uint64_t newval)
> +{
> + __atomic_compare_exchange_n(ptr, &oldval, newval, 0,
> + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
> + return oldval;
> +}
> +
> static uint64_t get_npages(uint64_t *global, uint64_t npages)
> {
> uint64_t try, old, max;
> @@ -165,7 +173,7 @@ static uint64_t get_npages(uint64_t *global, uint64_t npages)
> old = max;
> try = 1 + npages % (max / 2);
> max -= try;
> - } while ((max = __sync_val_compare_and_swap(global, old, max)) != old);
> + } while ((max = atomic_compare_swap_u64(global, old, max)) != old);
>
> return try;
> }
> @@ -202,7 +210,7 @@ static void *thread_clear(void *data)
> }
> gem_close(i915, create.handle);
>
> - __sync_add_and_fetch(&arg->max, npages);
> + __atomic_add_fetch(&arg->max, npages, __ATOMIC_SEQ_CST);
> }
>
> return NULL;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: "Ser, Simon" <simon.ser@intel.com>
To: "guillaume.tucker@collabora.com" <guillaume.tucker@collabora.com>,
"Hiler, Arkadiusz" <arkadiusz.hiler@intel.com>,
"Latvala, Petri" <petri.latvala@intel.com>
Cc: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>
Subject: Re: [igt-dev] [PATCH i-g-t 3/4] i915/gem_create: use __atomic_* instead of __sync_*
Date: Thu, 6 Jun 2019 07:20:23 +0000 [thread overview]
Message-ID: <facd43d06d2f0f2060163727ba1bcd17a871ca84.camel@intel.com> (raw)
In-Reply-To: <af5b9b35eb142b53fb7cb4684b494bc6ccb047f1.1559562608.git.guillaume.tucker@collabora.com>
On Mon, 2019-06-03 at 12:54 +0100, Guillaume Tucker wrote:
> Replace calls to the older __sync_* functions with the new __atomic_*
> standard ones. This fixes builds on some architectures, in particular
> MIPS which doesn't have __sync_add_and_fetch_8 and
> __sync_val_compare_and_swap_8 for 64-bit variable handling.
Can't we use the C11 atomics from stdatomic.h instead?
For instance:
https://en.cppreference.com/w/c/atomic/atomic_compare_exchange
> Signed-off-by: Guillaume Tucker <guillaume.tucker@collabora.com>
> ---
> tests/Makefile.am | 2 +-
> tests/i915/gem_create.c | 12 ++++++++++--
> 2 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 5097debf629c..18a0f1f20592 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -90,7 +90,7 @@ AM_LDFLAGS = -Wl,--as-needed
> drm_import_export_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> drm_import_export_LDADD = $(LDADD) -lpthread
> gem_create_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> -gem_create_LDADD = $(LDADD) -lpthread
> +gem_create_LDADD = $(LDADD) -lpthread -latomic
> gem_close_race_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> gem_close_race_LDADD = $(LDADD) -lpthread
> gem_ctx_thrash_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
> diff --git a/tests/i915/gem_create.c b/tests/i915/gem_create.c
> index 43cbf45f289b..a4aeb94b3f93 100644
> --- a/tests/i915/gem_create.c
> +++ b/tests/i915/gem_create.c
> @@ -156,6 +156,14 @@ static void invalid_nonaligned_size(int fd)
> gem_close(fd, create.handle);
> }
>
> +static uint64_t atomic_compare_swap_u64(uint64_t *ptr, uint64_t oldval,
> + uint64_t newval)
> +{
> + __atomic_compare_exchange_n(ptr, &oldval, newval, 0,
> + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
> + return oldval;
> +}
> +
> static uint64_t get_npages(uint64_t *global, uint64_t npages)
> {
> uint64_t try, old, max;
> @@ -165,7 +173,7 @@ static uint64_t get_npages(uint64_t *global, uint64_t npages)
> old = max;
> try = 1 + npages % (max / 2);
> max -= try;
> - } while ((max = __sync_val_compare_and_swap(global, old, max)) != old);
> + } while ((max = atomic_compare_swap_u64(global, old, max)) != old);
>
> return try;
> }
> @@ -202,7 +210,7 @@ static void *thread_clear(void *data)
> }
> gem_close(i915, create.handle);
>
> - __sync_add_and_fetch(&arg->max, npages);
> + __atomic_add_fetch(&arg->max, npages, __ATOMIC_SEQ_CST);
> }
>
> return NULL;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-06-06 7:20 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-03 11:54 [igt-dev] [PATCH i-g-t 1/4] tests: add libatomic dependency Guillaume Tucker
2019-06-03 11:54 ` Guillaume Tucker
2019-06-03 11:54 ` [igt-dev] [PATCH i-g-t 2/4] gitlab-ci: add libatomic to Fedora docker image Guillaume Tucker
2019-06-03 11:54 ` Guillaume Tucker
2019-06-06 7:21 ` [igt-dev] " Arkadiusz Hiler
2019-06-06 7:21 ` Arkadiusz Hiler
2019-06-06 7:26 ` [igt-dev] " Ser, Simon
2019-06-06 7:26 ` Ser, Simon
2019-06-13 12:56 ` [Intel-gfx] " Guillaume Tucker
2019-06-13 12:56 ` Guillaume Tucker
2019-06-03 11:54 ` [igt-dev] [PATCH i-g-t 3/4] i915/gem_create: use __atomic_* instead of __sync_* Guillaume Tucker
2019-06-03 11:54 ` Guillaume Tucker
2019-06-06 7:20 ` Ser, Simon [this message]
2019-06-06 7:20 ` [igt-dev] " Ser, Simon
2019-06-13 13:03 ` Guillaume Tucker
2019-06-13 13:03 ` Guillaume Tucker
2019-06-03 11:54 ` [Intel-gfx] [PATCH i-g-t 4/4] tests/sw_sync: " Guillaume Tucker
2019-06-03 11:54 ` Guillaume Tucker
2019-06-03 13:04 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/4] tests: add libatomic dependency Patchwork
2019-06-03 16:38 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-06-06 7:18 ` [igt-dev] [PATCH i-g-t 1/4] " Ser, Simon
2019-06-06 7:18 ` Ser, Simon
2019-06-13 12:55 ` Guillaume Tucker
2019-06-13 12:55 ` Guillaume Tucker
2019-06-13 12:57 ` Ser, Simon
2019-06-13 12:57 ` Ser, Simon
2019-06-06 7:19 ` [Intel-gfx] " Arkadiusz Hiler
2019-06-06 7:19 ` Arkadiusz Hiler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=facd43d06d2f0f2060163727ba1bcd17a871ca84.camel@intel.com \
--to=simon.ser@intel.com \
--cc=arkadiusz.hiler@intel.com \
--cc=guillaume.tucker@collabora.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=petri.latvala@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.