diff options
Diffstat (limited to 'testsuites/smptests/smpatomic07/tasks.c')
-rw-r--r-- | testsuites/smptests/smpatomic07/tasks.c | 75 |
1 files changed, 34 insertions, 41 deletions
diff --git a/testsuites/smptests/smpatomic07/tasks.c b/testsuites/smptests/smpatomic07/tasks.c index 88c69be6fb..21802d650f 100644 --- a/testsuites/smptests/smpatomic07/tasks.c +++ b/testsuites/smptests/smpatomic07/tasks.c @@ -18,35 +18,40 @@ #include <stdlib.h> #include <rtems/rtems/atomic.h> -#define TEST_REPEAT 200000 +#define TEST_REPEAT 1000 -#define ATOMIC_CAS_NO_BARRIER(NAME, TYPE, cpuid, mem_bar) \ +#define ATOMIC_CAS_NO_BARRIER(NAME, TYPE, R_TYPE, cpuid, mem_bar) \ { \ - Atomic_##TYPE a = 0, b = 0; \ + Atomic_##TYPE t; \ + R_TYPE a; \ + R_TYPE b; \ unsigned int i; \ int r; \ for (i = 0; i < TEST_REPEAT; i++){ \ - a = rand() % (Atomic_##TYPE)-1; \ - b = a; \ - r = _Atomic_Compare_exchange_##NAME(&b, a + 1, a - 1, mem_bar); \ - if(r != 0){ \ - locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": FAILED\n", cpuid); \ - rtems_test_exit( 0 ); \ - } \ - b = a; \ - r = _Atomic_Compare_exchange_##NAME(&b, a, a - 1, mem_bar); \ - if((r == 0) ||((r != 0) && ((a - 1) != b))){ \ - locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": FAILED\n", cpuid); \ - rtems_test_exit( 0 ); \ - } \ - b = a; \ - r = _Atomic_Compare_exchange_##NAME(&b, a + 1, a, mem_bar); \ - if(r != 0){ \ - locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": FAILED\n", cpuid); \ - rtems_test_exit( 0 ); \ - } \ + a = rand() % (R_TYPE)-1; \ + _Atomic_Store_##NAME(&t, a, mem_bar); \ + b = a + 1; \ + r = _Atomic_Compare_exchange_##NAME(&t, &b, a - 1, mem_bar, memory_order_relaxed);\ + if(r != 0){ \ + locked_printf("\ntask%d: Atomic_Compare_exchange_" #NAME ": FAILED\n", (unsigned int)cpuid); \ + rtems_test_exit( 0 ); \ + } \ + _Atomic_Store_##NAME(&t, a, mem_bar); \ + r = _Atomic_Compare_exchange_##NAME(&t, &a, a - 1, mem_bar, memory_order_relaxed);\ + b = _Atomic_Load_##NAME(&t, mem_bar); \ + if((r == 0) ||((r != 0) && ((a - 1) != b))){ \ + locked_printf("\ntask%d: Atomic_Compare_exchange_" #NAME ": FAILED\n", (unsigned int)cpuid); \ + rtems_test_exit( 0 ); \ + } \ + _Atomic_Store_##NAME(&t, a, mem_bar); \ + b = a + 1; \ + r = _Atomic_Compare_exchange_##NAME(&t, &b, a, mem_bar, memory_order_relaxed); \ + if(r != 0){ \ + locked_printf("\ntask%d: Atomic_Compare_exchange_" #NAME ": FAILED\n", (unsigned int)cpuid); \ + rtems_test_exit( 0 ); \ + } \ } \ - locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": SUCCESS\n", cpuid); \ + locked_printf("\nCPU%d Atomic_Compare_exchange_" #NAME ": SUCCESS\n", cpuid); \ } rtems_task Test_task( @@ -66,31 +71,19 @@ rtems_task Test_task( /* Print that the task is up and running. */ /* test relaxed barrier */ - ATOMIC_CAS_NO_BARRIER(int, Int, cpu_num, ATOMIC_RELAXED_BARRIER); + ATOMIC_CAS_NO_BARRIER(uint, Uint, uint_fast32_t, cpu_num, ATOMIC_ORDER_RELAXED); - ATOMIC_CAS_NO_BARRIER(long, Long, cpu_num, ATOMIC_RELAXED_BARRIER); - - ATOMIC_CAS_NO_BARRIER(ptr, Pointer, cpu_num, ATOMIC_RELAXED_BARRIER); - - ATOMIC_CAS_NO_BARRIER(32, Int32, cpu_num, ATOMIC_RELAXED_BARRIER); + ATOMIC_CAS_NO_BARRIER(ptr, Pointer, uintptr_t, cpu_num, ATOMIC_ORDER_RELAXED); /* test acquire barrier */ - ATOMIC_CAS_NO_BARRIER(int, Int, cpu_num, ATOMIC_ACQUIRE_BARRIER); - - ATOMIC_CAS_NO_BARRIER(long, Long, cpu_num, ATOMIC_ACQUIRE_BARRIER); + ATOMIC_CAS_NO_BARRIER(uint, Uint, uint_fast32_t, cpu_num, ATOMIC_ORDER_ACQUIRE); - ATOMIC_CAS_NO_BARRIER(ptr, Pointer, cpu_num, ATOMIC_ACQUIRE_BARRIER); - - ATOMIC_CAS_NO_BARRIER(32, Int32, cpu_num, ATOMIC_ACQUIRE_BARRIER); + ATOMIC_CAS_NO_BARRIER(ptr, Pointer, uintptr_t, cpu_num, ATOMIC_ORDER_ACQUIRE); /* test release barrier */ - ATOMIC_CAS_NO_BARRIER(int, Int, cpu_num, ATOMIC_RELEASE_BARRIER); - - ATOMIC_CAS_NO_BARRIER(long, Long, cpu_num, ATOMIC_RELEASE_BARRIER); - - ATOMIC_CAS_NO_BARRIER(ptr, Pointer, cpu_num, ATOMIC_RELEASE_BARRIER); + ATOMIC_CAS_NO_BARRIER(uint, Uint, uint_fast32_t, cpu_num, ATOMIC_ORDER_RELEASE); - ATOMIC_CAS_NO_BARRIER(32, Int32, cpu_num, ATOMIC_RELEASE_BARRIER); + ATOMIC_CAS_NO_BARRIER(ptr, Pointer, uintptr_t, cpu_num, ATOMIC_ORDER_RELEASE); // ATOMIC_CAS_NO_BARRIER(64, cpu_num); |