This is the one thing from Ola's patch that everybody agrees (I guess). After rebase, Ola can send out separate patches each solving an individual problem.
-Petri > -----Original Message----- > From: lng-odp-boun...@lists.linaro.org [mailto:lng-odp- > boun...@lists.linaro.org] On Behalf Of ext Maxim Uvarov > Sent: Thursday, November 06, 2014 12:54 AM > To: lng-odp@lists.linaro.org > Subject: Re: [lng-odp] [PATCH] Removed odp_atomic_int_t > > Applying this patch will conflict with Ola's work right? Do we need take > decision about Ola's patch? > Which way we go with that patch or with Ola's? > > Maxim. > > On 11/05/2014 03:56 PM, Santosh Shukla wrote: > > > > > > On 31 October 2014 19:09, Petri Savolainen > > <petri.savolai...@linaro.org <mailto:petri.savolai...@linaro.org>> > wrote: > > > > Integer version is not needed. Unsigned 32 and 64 bit atomics > > are used instead. If signed 32/64 bits can be added later > > > > > > instead - if signed 32/64 bits required then can be added later on > > need basis. > > > > > > on need basis. > > > > Signed-off-by: Petri Savolainen <petri.savolai...@linaro.org > > <mailto:petri.savolai...@linaro.org>> > > --- > > platform/linux-generic/include/api/odp_atomic.h | 115 > > --------------------- > > platform/linux-generic/include/api/odp_barrier.h | 4 +- > > .../linux-generic/include/odp_buffer_internal.h | 2 +- > > platform/linux-generic/odp_barrier.c | 6 +- > > platform/linux-generic/odp_thread.c | 6 +- > > test/api_test/odp_atomic_test.c | 80 > > ++------------ > > test/api_test/odp_atomic_test.h | 9 -- > > 7 files changed, 16 insertions(+), 206 deletions(-) > > > > diff --git a/platform/linux-generic/include/api/odp_atomic.h > > b/platform/linux-generic/include/api/odp_atomic.h > > index 213c81f..5c83b39 100644 > > --- a/platform/linux-generic/include/api/odp_atomic.h > > +++ b/platform/linux-generic/include/api/odp_atomic.h > > @@ -26,10 +26,6 @@ extern "C" { > > * @{ > > */ > > > > -/** > > - * Atomic integer > > - */ > > -typedef volatile int32_t odp_atomic_int_t; > > > > /** > > * Atomic unsigned integer 64 bits > > @@ -43,117 +39,6 @@ typedef volatile uint32_t odp_atomic_u32_t; > > > > > > /** > > - * Initialize atomic integer > > - * > > - * @param ptr An integer atomic variable > > - * > > - * @note The operation is not synchronized with other threads > > - */ > > -static inline void odp_atomic_init_int(odp_atomic_int_t *ptr) > > -{ > > - *ptr = 0; > > -} > > - > > -/** > > - * Load value of atomic integer > > - * > > - * @param ptr An atomic variable > > - * > > - * @return atomic integer value > > - * > > - * @note The operation is not synchronized with other threads > > - */ > > -static inline int odp_atomic_load_int(odp_atomic_int_t *ptr) > > -{ > > - return *ptr; > > -} > > - > > -/** > > - * Store value to atomic integer > > - * > > - * @param ptr An atomic variable > > - * @param new_value Store new_value to a variable > > - * > > - * @note The operation is not synchronized with other threads > > - */ > > -static inline void odp_atomic_store_int(odp_atomic_int_t *ptr, > > int new_value) > > -{ > > - *ptr = new_value; > > -} > > - > > -/** > > - * Fetch and add atomic integer > > - * > > - * @param ptr An atomic variable > > - * @param value A value to be added to the variable > > - * > > - * @return Value of the variable before the operation > > - */ > > -static inline int odp_atomic_fetch_add_int(odp_atomic_int_t *ptr, > > int value) > > -{ > > - return __sync_fetch_and_add(ptr, value); > > -} > > - > > -/** > > - * Fetch and subtract atomic integer > > - * > > - * @param ptr An atomic integer variable > > - * @param value A value to be subtracted from the variable > > - * > > - * @return Value of the variable before the operation > > - */ > > -static inline int odp_atomic_fetch_sub_int(odp_atomic_int_t *ptr, > > int value) > > -{ > > - return __sync_fetch_and_sub(ptr, value); > > -} > > - > > -/** > > - * Fetch and increment atomic integer by 1 > > - * > > - * @param ptr An atomic variable > > - * > > - * @return Value of the variable before the operation > > - */ > > -static inline int odp_atomic_fetch_inc_int(odp_atomic_int_t *ptr) > > -{ > > - return odp_atomic_fetch_add_int(ptr, 1); > > -} > > - > > -/** > > - * Increment atomic integer by 1 > > - * > > - * @param ptr An atomic variable > > - * > > - */ > > -static inline void odp_atomic_inc_int(odp_atomic_int_t *ptr) > > -{ > > - odp_atomic_fetch_add_int(ptr, 1); > > -} > > - > > -/** > > - * Fetch and decrement atomic integer by 1 > > - * > > - * @param ptr An atomic int variable > > - * > > - * @return Value of the variable before the operation > > - */ > > -static inline int odp_atomic_fetch_dec_int(odp_atomic_int_t *ptr) > > -{ > > - return odp_atomic_fetch_sub_int(ptr, 1); > > -} > > - > > -/** > > - * Decrement atomic integer by 1 > > - * > > - * @param ptr An atomic variable > > - * > > - */ > > -static inline void odp_atomic_dec_int(odp_atomic_int_t *ptr) > > -{ > > - odp_atomic_fetch_sub_int(ptr, 1); > > -} > > - > > -/** > > * Initialize atomic uint32 > > * > > * @param ptr An atomic variable > > diff --git a/platform/linux-generic/include/api/odp_barrier.h > > b/platform/linux-generic/include/api/odp_barrier.h > > index 866648f..fb02a9d 100644 > > --- a/platform/linux-generic/include/api/odp_barrier.h > > +++ b/platform/linux-generic/include/api/odp_barrier.h > > @@ -31,8 +31,8 @@ extern "C" { > > * ODP execution barrier > > */ > > typedef struct odp_barrier_t { > > - int count; /**< @private Thread count */ > > - odp_atomic_int_t bar; /**< @private Barrier counter */ > > + uint32_t count; /**< @private Thread count */ > > + odp_atomic_u32_t bar; /**< @private Barrier counter */ > > } odp_barrier_t; > > > > > > diff --git a/platform/linux-generic/include/odp_buffer_internal.h > > b/platform/linux-generic/include/odp_buffer_internal.h > > index 2002b51..0027bfc 100644 > > --- a/platform/linux-generic/include/odp_buffer_internal.h > > +++ b/platform/linux-generic/include/odp_buffer_internal.h > > @@ -88,7 +88,7 @@ typedef struct odp_buffer_hdr_t { > > uint32_t index; /* buf index in the > > pool */ > > size_t size; /* max data size */ > > size_t cur_offset; /* current offset */ > > - odp_atomic_int_t ref_count; /* reference count */ > > + odp_atomic_u32_t ref_count; /* reference count */ > > odp_buffer_scatter_t scatter; /* Scatter/gather list > */ > > int type; /* type of next header > */ > > odp_buffer_pool_t pool_hdl; /* buffer pool handle > */ > > diff --git a/platform/linux-generic/odp_barrier.c > > b/platform/linux-generic/odp_barrier.c > > index a82b294..f4a87c8 100644 > > --- a/platform/linux-generic/odp_barrier.c > > +++ b/platform/linux-generic/odp_barrier.c > > @@ -11,7 +11,7 @@ > > void odp_barrier_init_count(odp_barrier_t *barrier, int count) > > { > > barrier->count = count; > > - barrier->bar = 0; > > + barrier->bar = 0; > > odp_sync_stores(); > > } > > > > @@ -30,12 +30,12 @@ void odp_barrier_init_count(odp_barrier_t > > *barrier, int count) > > > > void odp_barrier_sync(odp_barrier_t *barrier) > > { > > - int count; > > + uint32_t count; > > int wasless; > > > > odp_sync_stores(); > > wasless = barrier->bar < barrier->count; > > - count = odp_atomic_fetch_inc_int(&barrier->bar); > > + count = odp_atomic_fetch_inc_u32(&barrier->bar); > > > > if (count == 2*barrier->count-1) { > > barrier->bar = 0; > > diff --git a/platform/linux-generic/odp_thread.c > > b/platform/linux-generic/odp_thread.c > > index b869b27..dcb893d 100644 > > --- a/platform/linux-generic/odp_thread.c > > +++ b/platform/linux-generic/odp_thread.c > > @@ -31,7 +31,7 @@ typedef struct { > > > > typedef struct { > > thread_state_t thr[ODP_CONFIG_MAX_THREADS]; > > - odp_atomic_int_t num; > > + odp_atomic_u32_t num; > > > > } thread_globals_t; > > > > @@ -64,10 +64,10 @@ int odp_thread_init_global(void) > > > > static int thread_id(void) > > { > > - int id; > > + uint32_t id; > > int cpu; > > > > - id = odp_atomic_fetch_add_int(&thread_globals->num, 1); > > + id = odp_atomic_fetch_inc_u32(&thread_globals->num); > > > > if (id >= ODP_CONFIG_MAX_THREADS) { > > ODP_ERR("Too many threads\n"); > > diff --git a/test/api_test/odp_atomic_test.c > > b/test/api_test/odp_atomic_test.c > > index d92a8c1..3ca7674 100644 > > --- a/test/api_test/odp_atomic_test.c > > +++ b/test/api_test/odp_atomic_test.c > > @@ -10,17 +10,14 @@ > > #include <odp_common.h> > > #include <odp_atomic_test.h> > > > > -static odp_atomic_int_t a32; > > static odp_atomic_u32_t a32u; > > static odp_atomic_u64_t a64u; > > > > -static odp_atomic_int_t numthrds; > > +static odp_atomic_u32_t numthrds; > > > > static const char * const test_name[] = { > > "dummy", > > "test atomic basic ops add/sub/inc/dec", > > - "test atomic inc/dec of signed word", > > - "test atomic add/sub of signed word", > > "test atomic inc/dec of unsigned word", > > "test atomic add/sub of unsigned word", > > "test atomic inc/dec of unsigned double word", > > @@ -34,12 +31,10 @@ static void usage(void) > > printf("\n./odp_atomic -t <testcase> -n <num of > pthread>,\n\n" > > "\t<testcase> is\n" > > "\t\t1 - Test mix(does inc,dec,add,sub on 32/64 > bit)\n" > > - "\t\t2 - Test inc dec of signed word\n" > > - "\t\t3 - Test add sub of signed word\n" > > - "\t\t4 - Test inc dec of unsigned word\n" > > - "\t\t5 - Test add sub of unsigned word\n" > > - "\t\t6 - Test inc dec of double word\n" > > - "\t\t7 - Test add sub of double word\n" > > + "\t\t2 - Test inc dec of unsigned word\n" > > + "\t\t3 - Test add sub of unsigned word\n" > > + "\t\t4 - Test inc dec of double word\n" > > + "\t\t5 - Test add sub of double word\n" > > "\t<num of pthread> is optional\n" > > "\t\t<1 - 31> - no of pthreads to start\n" > > "\t\tif user doesn't specify this option, then\n" > > @@ -50,13 +45,6 @@ static void usage(void) > > "\t\t./odp_atomic -t 3 -n 12\n"); > > } > > > > -void test_atomic_inc_32(void) > > -{ > > - int i; > > - > > - for (i = 0; i < CNT; i++) > > - odp_atomic_inc_int(&a32); > > -} > > > > void test_atomic_inc_u32(void) > > { > > @@ -74,14 +62,6 @@ void test_atomic_inc_64(void) > > odp_atomic_inc_u64(&a64u); > > } > > > > -void test_atomic_dec_32(void) > > -{ > > - int i; > > - > > - for (i = 0; i < CNT; i++) > > - odp_atomic_dec_int(&a32); > > -} > > - > > void test_atomic_dec_u32(void) > > { > > int i; > > @@ -98,14 +78,6 @@ void test_atomic_dec_64(void) > > odp_atomic_dec_u64(&a64u); > > } > > > > -void test_atomic_add_32(void) > > -{ > > - int i; > > - > > - for (i = 0; i < (CNT / ADD_SUB_CNT); i++) > > - odp_atomic_fetch_add_int(&a32, ADD_SUB_CNT); > > -} > > - > > void test_atomic_add_u32(void) > > { > > int i; > > @@ -122,14 +94,6 @@ void test_atomic_add_64(void) > > odp_atomic_fetch_add_u64(&a64u, ADD_SUB_CNT); > > } > > > > -void test_atomic_sub_32(void) > > -{ > > - int i; > > - > > - for (i = 0; i < (CNT / ADD_SUB_CNT); i++) > > - odp_atomic_fetch_sub_int(&a32, ADD_SUB_CNT); > > -} > > - > > void test_atomic_sub_u32(void) > > { > > int i; > > @@ -146,18 +110,6 @@ void test_atomic_sub_64(void) > > odp_atomic_fetch_sub_u64(&a64u, ADD_SUB_CNT); > > } > > > > -void test_atomic_inc_dec_32(void) > > -{ > > - test_atomic_inc_32(); > > - test_atomic_dec_32(); > > -} > > - > > -void test_atomic_add_sub_32(void) > > -{ > > - test_atomic_add_32(); > > - test_atomic_sub_32(); > > -} > > - > > void test_atomic_inc_dec_u32(void) > > { > > test_atomic_inc_u32(); > > @@ -188,11 +140,6 @@ void test_atomic_add_sub_64(void) > > */ > > void test_atomic_basic(void) > > { > > - test_atomic_inc_32(); > > - test_atomic_dec_32(); > > - test_atomic_add_32(); > > - test_atomic_sub_32(); > > - > > test_atomic_inc_u32(); > > test_atomic_dec_u32(); > > test_atomic_add_u32(); > > @@ -206,25 +153,18 @@ void test_atomic_basic(void) > > > > void test_atomic_init(void) > > { > > - odp_atomic_init_int(&a32); > > odp_atomic_init_u32(&a32u); > > odp_atomic_init_u64(&a64u); > > } > > > > void test_atomic_store(void) > > { > > - odp_atomic_store_int(&a32, S32_INIT_VAL); > > odp_atomic_store_u32(&a32u, U32_INIT_VAL); > > odp_atomic_store_u64(&a64u, U64_INIT_VAL); > > } > > > > int test_atomic_validate(void) > > { > > - if (odp_atomic_load_int(&a32) != S32_INIT_VAL) { > > - ODP_ERR("Atomic signed 32 usual functions > failed\n"); > > - return -1; > > - } > > - > > if (odp_atomic_load_u32(&a32u) != U32_INIT_VAL) { > > ODP_ERR("Atomic u32 usual functions failed\n"); > > return -1; > > @@ -247,7 +187,7 @@ static void *run_thread(void *arg) > > > > ODP_DBG("Thread %i starts\n", thr); > > > > - odp_atomic_inc_int(&numthrds); > > + odp_atomic_inc_u32(&numthrds); > > > > /* Wait here until all pthreads are created */ > > while (*(volatile int *)&numthrds < parg->numthrds) > > @@ -259,12 +199,6 @@ static void *run_thread(void *arg) > > case TEST_MIX: > > test_atomic_basic(); > > break; > > - case TEST_INC_DEC_S32: > > - test_atomic_inc_dec_32(); > > - break; > > - case TEST_ADD_SUB_S32: > > - test_atomic_add_sub_32(); > > - break; > > case TEST_INC_DEC_U32: > > test_atomic_inc_dec_u32(); > > break; > > @@ -328,7 +262,7 @@ int main(int argc, char *argv[]) > > if (pthrdnum == 0) > > pthrdnum = odp_sys_core_count(); > > > > - odp_atomic_init_int(&numthrds); > > + odp_atomic_init_u32(&numthrds); > > test_atomic_init(); > > test_atomic_store(); > > > > diff --git a/test/api_test/odp_atomic_test.h > > b/test/api_test/odp_atomic_test.h > > index 7814da5..aaa9d34 100644 > > --- a/test/api_test/odp_atomic_test.h > > +++ b/test/api_test/odp_atomic_test.h > > @@ -18,14 +18,11 @@ > > #define ADD_SUB_CNT 5 > > > > #define CNT 500000 > > -#define S32_INIT_VAL (1UL << 10) > > #define U32_INIT_VAL (1UL << 10) > > #define U64_INIT_VAL (1ULL << 33) > > > > typedef enum { > > TEST_MIX = 1, /* Must be first test case num */ > > - TEST_INC_DEC_S32, > > - TEST_ADD_SUB_S32, > > TEST_INC_DEC_U32, > > TEST_ADD_SUB_U32, > > TEST_INC_DEC_64, > > @@ -34,16 +31,10 @@ typedef enum { > > } odp_test_atomic_t; > > > > > > -void test_atomic_inc_dec_32(void); > > -void test_atomic_add_sub_32(void); > > void test_atomic_inc_dec_u32(void); > > void test_atomic_add_sub_u32(void); > > void test_atomic_inc_dec_64(void); > > void test_atomic_add_sub_64(void); > > > > > > so as we should replace above 2 api from _64 to _u64, right? > > > > -void test_atomic_inc_32(void); > > -void test_atomic_dec_32(void); > > -void test_atomic_add_32(void); > > -void test_atomic_sub_32(void); > > void test_atomic_inc_u32(void); > > void test_atomic_dec_u32(void); > > void test_atomic_add_u32(void); > > -- > > 2.1.1 > > > > > > _______________________________________________ > > lng-odp mailing list > > lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org> > > http://lists.linaro.org/mailman/listinfo/lng-odp > > > > > > > > > > _______________________________________________ > > lng-odp mailing list > > lng-odp@lists.linaro.org > > http://lists.linaro.org/mailman/listinfo/lng-odp > > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > http://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org http://lists.linaro.org/mailman/listinfo/lng-odp