Does your checkpatch warns on spelling? I will fix on apply.

WARNING: 'substract' may be misspelled - perhaps 'subtract'?
#43: FILE: include/odp/api/atomic.h:403:
+        uint32_t fetch_sub : 1;  /**< Atomic fetch and substract */

WARNING: 'substract' may be misspelled - perhaps 'subtract'?
#44: FILE: include/odp/api/atomic.h:404:
+        uint32_t sub       : 1;  /**< Atomic substract */


On 12/10/2015 20:22, Ola Liljedahl wrote:


On 26 November 2015 at 09:56, Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com <mailto:petri.savolai...@nokia.com>> wrote:

    ping.

    > -----Original Message-----
    > From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org
    <mailto:lng-odp-boun...@lists.linaro.org>] On Behalf Of EXT
    > Petri Savolainen
    > Sent: Thursday, November 12, 2015 10:30 AM
    > To: lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
    > Subject: [lng-odp] [API-NEXT PATCH v3] api: atomic: added
    > atomic_lock_free_u64
    >
    > Platforms may support some uint64 operations lock-free and
    > others not. For example, inc_64 can be natively supported but
    > cas_64 (or max_64/min_64) not. User may be able to switch to
    > 32 bit variables when a 64 bit operation uses locks. The same
    > atomic operation struture could be used for platform init to guide
    > lock vs. lock-free implementation (e.g. if cas_64 is never
    > called, inc_64 can be lock-free).
    >
    > Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com
    <mailto:petri.savolai...@nokia.com>>

Reviewed-by: Ola Liljedahl <ola.liljed...@linaro.org <mailto:ola.liljed...@linaro.org>>

    > ---
    >  include/odp/api/atomic.h            | 48
    > +++++++++++++++++++++++++++++++++++++
    >  platform/linux-generic/Makefile.am  |  1 +
    >  platform/linux-generic/odp_atomic.c | 24 +++++++++++++++++++
    >  3 files changed, 73 insertions(+)
    >  create mode 100644 platform/linux-generic/odp_atomic.c
    >
    > diff --git a/include/odp/api/atomic.h b/include/odp/api/atomic.h
    > index 316f13a..5e897c1 100644
    > --- a/include/odp/api/atomic.h
    > +++ b/include/odp/api/atomic.h
    > @@ -388,6 +388,54 @@ void
    odp_atomic_add_rls_u32(odp_atomic_u32_t *atom,
    > uint32_t val);
    >  void odp_atomic_sub_rls_u32(odp_atomic_u32_t *atom, uint32_t val);
    >
    >  /**
    > + * Atomic operations
    > + *
    > + * Atomic operations listed in a bit field structure.
    > + */
    > +typedef union odp_atomic_op_t {
    > +     /** Operation flags */
    > +     struct {
    > +             uint32_t init      : 1;  /**< Init atomic variable */
    > +             uint32_t load      : 1;  /**< Atomic load */
    > +             uint32_t store     : 1;  /**< Atomic store */
    > +             uint32_t fetch_add : 1;  /**< Atomic fetch and add */
    > +             uint32_t add       : 1;  /**< Atomic add */
    > +             uint32_t fetch_sub : 1;  /**< Atomic fetch and
    substract */
    > +             uint32_t sub       : 1;  /**< Atomic substract */
    > +             uint32_t fetch_inc : 1;  /**< Atomic fetch and
    increment */
    > +             uint32_t inc       : 1;  /**< Atomic increment */
    > +             uint32_t fetch_dec : 1;  /**< Atomic fetch and
    decrement */
    > +             uint32_t dec       : 1;  /**< Atomic decrement */
    > +             uint32_t min       : 1;  /**< Atomic minimum */
    > +             uint32_t max       : 1;  /**< Atomic maximum */
    > +             uint32_t cas       : 1;  /**< Atomic compare and
    swap */
    > +     } op;
    > +
    > +     /** All bits of the bit field structure.
    > +       * Operation flag mapping is architecture specific. This
    field can
    > be
    > +       * used to set/clear all flags, or bitwise operations
    over the
    > entire
    > +       * structure. */
    > +     uint32_t all_bits;
    > +} odp_atomic_op_t;
    > +
    > +/**
    > + * Query which atomic uint64 operations are lock-free
    > + *
    > + * Lock-free implementations have higher performance and scale
    better
    > than
    > + * implementations using locks. User can decide to use e.g.
    uint32 atomic
    > + * variables instead of uint64 to optimize performance on
    platforms that
    > + * implement a performance critical operation using locks.
    > + *
    > + * @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.
    > + * @retval 0 None of the operations are lock-free
    > + * @retval 1 Some of the operations are lock-free
    > + * @retval 2 All operations are lock-free
    > + */
    > +int odp_atomic_lock_free_u64(odp_atomic_op_t *atomic_op);
    > +
    > +/**
    >   * @}
    >   */
    >
    > diff --git a/platform/linux-generic/Makefile.am b/platform/linux-
    > generic/Makefile.am
    > index a6b6029..0b7234e 100644
    > --- a/platform/linux-generic/Makefile.am
    > +++ b/platform/linux-generic/Makefile.am
    > @@ -151,6 +151,7 @@ noinst_HEADERS = \
    >                 ${srcdir}/Makefile.inc
    >
    >  __LIB__libodp_la_SOURCES = \
    > +                        odp_atomic.c \
    >                          odp_barrier.c \
    >                          odp_buffer.c \
    >                          odp_classification.c \
    > diff --git a/platform/linux-generic/odp_atomic.c b/platform/linux-
    > generic/odp_atomic.c
    > new file mode 100644
    > index 0000000..996d09a
    > --- /dev/null
    > +++ b/platform/linux-generic/odp_atomic.c
    > @@ -0,0 +1,24 @@
    > +/* Copyright (c) 2015, Linaro Limited
    > + * All rights reserved.
    > + *
    > + * SPDX-License-Identifier:     BSD-3-Clause
    > + */
    > +
    > +#include <odp/atomic.h>
    > +
    > +int odp_atomic_lock_free_u64(odp_atomic_op_t *atomic_op)
    > +{
    > +#if __GCC_ATOMIC_LLONG_LOCK_FREE < 2
    > +     /* All operations have locks */
    > +     if (atomic_op)
    > +             atomic_op->all_bits = 0;
    > +
    > +     return 0;
    > +#else
    > +     /* All operations are lock-free */
    > +     if (atomic_op)
    > +             atomic_op->all_bits = ~((uint32_t)0);
    > +
    > +     return 2;
    > +#endif
    > +}
    > --
    > 2.6.2
    >
    > _______________________________________________
    > lng-odp mailing list
    > lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
    > https://lists.linaro.org/mailman/listinfo/lng-odp
    _______________________________________________
    lng-odp mailing list
    lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
    https://lists.linaro.org/mailman/listinfo/lng-odp




_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to