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@xxxxxxxxxxxxx> Reviewed-by: Simon Ser <simon.ser@xxxxxxxxx> 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(); > } > - _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx