diff mbox series

[i-g-t,v2,4/4] tests/sw_sync: use atomic_* instead of __sync_*

Message ID 737b847e6518b74fe57de3e309b5a4ede719ea72.1560433744.git.guillaume.tucker@collabora.com (mailing list archive)
State New, archived
Headers show
Series Use C11 atomics | expand

Commit Message

Guillaume Tucker June 13, 2019, 1:53 p.m. UTC
Replace calls to the older __sync_* functions with the new atomic_*
standard ones to be consistent with other tests and improve
portability across CPU architectures.  Add dependency of sw_sync on
libatomic.

Signed-off-by: Guillaume Tucker <guillaume.tucker@collabora.com>
---
 tests/Makefile.am |  1 +
 tests/meson.build |  8 +++++++-
 tests/sw_sync.c   | 12 ++++++------
 3 files changed, 14 insertions(+), 7 deletions(-)

Comments

Ser, Simon June 14, 2019, 8:12 a.m. UTC | #1
On Thu, 2019-06-13 at 14:53 +0100, Guillaume Tucker wrote:
> Replace calls to the older __sync_* functions with the new atomic_*
> standard ones to be consistent with other tests and improve
> portability across CPU architectures.  Add dependency of sw_sync on
> libatomic.
> 
> Signed-off-by: Guillaume Tucker <guillaume.tucker@collabora.com>

Reviewed-by: Simon Ser <simon.ser@intel.com>

Thanks!

> ---
>  tests/Makefile.am |  1 +
>  tests/meson.build |  8 +++++++-
>  tests/sw_sync.c   | 12 ++++++------
>  3 files changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index bbd386c9c2db..7d71df8c7a2e 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -122,6 +122,7 @@ prime_self_import_LDADD = $(LDADD) -lpthread
>  gem_userptr_blits_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
>  gem_userptr_blits_LDADD = $(LDADD) -lpthread
>  perf_pmu_LDADD = $(LDADD) $(top_builddir)/lib/libigt_perf.la
> +sw_sync_LDADD = $(LDADD) -latomic
>  
>  kms_flip_LDADD = $(LDADD) -lpthread
>  
> diff --git a/tests/meson.build b/tests/meson.build
> index ffd432d38193..34a74025a537 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -76,7 +76,6 @@ test_progs = [
>  	'prime_self_import',
>  	'prime_udl',
>  	'prime_vgem',
> -	'sw_sync',
>  	'syncobj_basic',
>  	'syncobj_wait',
>  	'template',
> @@ -329,6 +328,13 @@ executable('testdisplay', ['testdisplay.c',
> 'testdisplay_hotplug.c'],
>  	   install : true)
>  test_list += 'testdisplay'
>  
> +test_executables += executable('sw_sync', 'sw_sync.c',
> +	   dependencies : test_deps + [ libatomic ],
> +	   install_dir : libexecdir,
> +	   install_rpath : libexecdir_rpathdir,
> +	   install : true)
> +test_list += 'sw_sync'
> +
>  subdir('amdgpu')
>  
>  gen_testlist = find_program('generate_testlist.sh')
> diff --git a/tests/sw_sync.c b/tests/sw_sync.c
> index 950b8b614759..62d1d17cab45 100644
> --- a/tests/sw_sync.c
> +++ b/tests/sw_sync.c
> @@ -26,6 +26,7 @@
>  
>  #include <pthread.h>
>  #include <semaphore.h>
> +#include <stdatomic.h>
>  #include <stdint.h>
>  #include <sys/socket.h>
>  #include <sys/types.h>
> @@ -43,7 +44,7 @@ IGT_TEST_DESCRIPTION("Test SW Sync Framework");
>  typedef struct {
>  	int timeline;
>  	uint32_t thread_id;
> -	uint32_t *counter;
> +	_Atomic(uint32_t) *counter;
>  	sem_t *sem;
>  } data_t;
>  
> @@ -489,7 +490,7 @@ static void test_sync_multi_consumer(void)
>  	pthread_t thread_arr[MULTI_CONSUMER_THREADS];
>  	sem_t sem;
>  	int timeline;
> -	uint32_t counter = 0;
> +	_Atomic(uint32_t) counter = 0;
>  	uintptr_t thread_ret = 0;
>  	data_t data;
>  	int i, ret;
> @@ -517,7 +518,7 @@ static void test_sync_multi_consumer(void)
>  	{
>  		sem_wait(&sem);
>  
> -		__sync_fetch_and_add(&counter, 1);
> +		atomic_fetch_add(&counter, 1);
>  		sw_sync_timeline_inc(timeline, 1);
>  	}
>  
> @@ -554,7 +555,7 @@ static void *
> test_sync_multi_consumer_producer_thread(void *arg)
>  		if (sync_fence_wait(fence, 1000) < 0)
>  			return (void *) 1;
>  
> -		if (__sync_fetch_and_add(data->counter, 1) !=
> next_point)
> +		if (atomic_fetch_add(data->counter, 1) != next_point)
>  			return (void *) 1;
>  
>  		/* Kick off the next thread. */
> @@ -570,7 +571,7 @@ static void
> test_sync_multi_consumer_producer(void)
>  	data_t data_arr[MULTI_CONSUMER_PRODUCER_THREADS];
>  	pthread_t thread_arr[MULTI_CONSUMER_PRODUCER_THREADS];
>  	int timeline;
> -	uint32_t counter = 0;
> +	_Atomic(uint32_t) counter = 0;
>  	uintptr_t thread_ret = 0;
>  	data_t data;
>  	int i, ret;
> @@ -900,4 +901,3 @@ igt_main
>  	igt_subtest("sync_random_merge")
>  		test_sync_random_merge();
>  }
> -
diff mbox series

Patch

diff --git a/tests/Makefile.am b/tests/Makefile.am
index bbd386c9c2db..7d71df8c7a2e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -122,6 +122,7 @@  prime_self_import_LDADD = $(LDADD) -lpthread
 gem_userptr_blits_CFLAGS = $(AM_CFLAGS) $(THREAD_CFLAGS)
 gem_userptr_blits_LDADD = $(LDADD) -lpthread
 perf_pmu_LDADD = $(LDADD) $(top_builddir)/lib/libigt_perf.la
+sw_sync_LDADD = $(LDADD) -latomic
 
 kms_flip_LDADD = $(LDADD) -lpthread
 
diff --git a/tests/meson.build b/tests/meson.build
index ffd432d38193..34a74025a537 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -76,7 +76,6 @@  test_progs = [
 	'prime_self_import',
 	'prime_udl',
 	'prime_vgem',
-	'sw_sync',
 	'syncobj_basic',
 	'syncobj_wait',
 	'template',
@@ -329,6 +328,13 @@  executable('testdisplay', ['testdisplay.c', 'testdisplay_hotplug.c'],
 	   install : true)
 test_list += 'testdisplay'
 
+test_executables += executable('sw_sync', 'sw_sync.c',
+	   dependencies : test_deps + [ libatomic ],
+	   install_dir : libexecdir,
+	   install_rpath : libexecdir_rpathdir,
+	   install : true)
+test_list += 'sw_sync'
+
 subdir('amdgpu')
 
 gen_testlist = find_program('generate_testlist.sh')
diff --git a/tests/sw_sync.c b/tests/sw_sync.c
index 950b8b614759..62d1d17cab45 100644
--- a/tests/sw_sync.c
+++ b/tests/sw_sync.c
@@ -26,6 +26,7 @@ 
 
 #include <pthread.h>
 #include <semaphore.h>
+#include <stdatomic.h>
 #include <stdint.h>
 #include <sys/socket.h>
 #include <sys/types.h>
@@ -43,7 +44,7 @@  IGT_TEST_DESCRIPTION("Test SW Sync Framework");
 typedef struct {
 	int timeline;
 	uint32_t thread_id;
-	uint32_t *counter;
+	_Atomic(uint32_t) *counter;
 	sem_t *sem;
 } data_t;
 
@@ -489,7 +490,7 @@  static void test_sync_multi_consumer(void)
 	pthread_t thread_arr[MULTI_CONSUMER_THREADS];
 	sem_t sem;
 	int timeline;
-	uint32_t counter = 0;
+	_Atomic(uint32_t) counter = 0;
 	uintptr_t thread_ret = 0;
 	data_t data;
 	int i, ret;
@@ -517,7 +518,7 @@  static void test_sync_multi_consumer(void)
 	{
 		sem_wait(&sem);
 
-		__sync_fetch_and_add(&counter, 1);
+		atomic_fetch_add(&counter, 1);
 		sw_sync_timeline_inc(timeline, 1);
 	}
 
@@ -554,7 +555,7 @@  static void * test_sync_multi_consumer_producer_thread(void *arg)
 		if (sync_fence_wait(fence, 1000) < 0)
 			return (void *) 1;
 
-		if (__sync_fetch_and_add(data->counter, 1) != next_point)
+		if (atomic_fetch_add(data->counter, 1) != next_point)
 			return (void *) 1;
 
 		/* Kick off the next thread. */
@@ -570,7 +571,7 @@  static void test_sync_multi_consumer_producer(void)
 	data_t data_arr[MULTI_CONSUMER_PRODUCER_THREADS];
 	pthread_t thread_arr[MULTI_CONSUMER_PRODUCER_THREADS];
 	int timeline;
-	uint32_t counter = 0;
+	_Atomic(uint32_t) counter = 0;
 	uintptr_t thread_ret = 0;
 	data_t data;
 	int i, ret;
@@ -900,4 +901,3 @@  igt_main
 	igt_subtest("sync_random_merge")
 		test_sync_random_merge();
 }
-