Merged to api-next and next.
Maxim.
On 02/02/2016 11:47, Savolainen, Petri (Nokia - FI/Espoo) wrote:
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