Ping. This set should definitely get into v1.7. It’s not yet in api-next.
-Petri From: EXT Bill Fischofer [mailto:[email protected]] Sent: Saturday, January 30, 2016 3:44 PM To: Savolainen, Petri (Nokia - FI/Espoo) Cc: LNG ODP Mailman List Subject: Re: [lng-odp] [API-NEXT PATCH 1/3] api: atomic: init functions are not atomic For this series: Reviewed-and-tested-by: Bill Fischofer <[email protected]<mailto:[email protected]>> On Fri, Jan 29, 2016 at 5:25 AM, Petri Savolainen <[email protected]<mailto:[email protected]>> wrote: Highlight that application must ensure that there's no race while calling init functions. Also lock free call will never set op.init flag, since init call will not need to implement locking or other (lock free) synchronization. Signed-off-by: Petri Savolainen <[email protected]<mailto:[email protected]>> --- include/odp/api/atomic.h | 11 +++++++++++ platform/linux-generic/odp_atomic.c | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/odp/api/atomic.h b/include/odp/api/atomic.h index 8626495..a16d90b 100644 --- a/include/odp/api/atomic.h +++ b/include/odp/api/atomic.h @@ -67,6 +67,10 @@ extern "C" { /** * Initialize atomic uint32 variable * + * Initializes the atomic variable with 'val'. This operation is not atomic. + * Application must ensure that there's no race condition while initializing + * the variable. + * * @param atom Pointer to atomic variable * @param val Value to initialize the variable with */ @@ -219,6 +223,10 @@ uint32_t odp_atomic_xchg_u32(odp_atomic_u32_t *atom, uint32_t new_val); /** * Initialize atomic uint64 variable * + * Initializes the atomic variable with 'val'. This operation is not atomic. + * Application must ensure that there's no race condition while initializing + * the variable. + * * @param atom Pointer to atomic variable * @param val Value to initialize the variable with */ @@ -600,6 +608,9 @@ typedef union odp_atomic_op_t { * variables instead of uint64 to optimize performance on platforms that * implement a performance critical operation using locks. * + * Init operations (e.g. odp_atomic_init_64()) are not atomic. This function + * clears the op.init bit but will never set it to one. + * * @param atomic_op Pointer to atomic operation structure for storing * operation flags. All bits are initialized to zero during * the operation. The parameter is ignored when NULL. diff --git a/platform/linux-generic/odp_atomic.c b/platform/linux-generic/odp_atomic.c index 996d09a..5b71ecf 100644 --- a/platform/linux-generic/odp_atomic.c +++ b/platform/linux-generic/odp_atomic.c @@ -16,8 +16,10 @@ int odp_atomic_lock_free_u64(odp_atomic_op_t *atomic_op) return 0; #else /* All operations are lock-free */ - if (atomic_op) + if (atomic_op) { atomic_op->all_bits = ~((uint32_t)0); + atomic_op->op.init = 0; + } return 2; #endif -- 2.6.3 _______________________________________________ lng-odp mailing list [email protected]<mailto:[email protected]> https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
