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

Reply via email to