diff mbox

[PATCHv17,06/10] linux-generic/helper: move ring from helper to linux-generic

Message ID 1449757466-6287-7-git-send-email-maxim.uvarov@linaro.org
State Superseded
Headers show

Commit Message

Maxim Uvarov Dec. 10, 2015, 2:24 p.m. UTC
Move ring and it's test from helper to linux-generic/pktio and kill
not needed api_test directory. Unfortunately odp_ring_test.c had some old
dirty code so I had to clean up it to to use cunit and
latest helper apis.

Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 configure.ac                                       |   1 -
 helper/Makefile.am                                 |   2 -
 helper/test/Makefile.am                            |   5 +-
 platform/linux-generic/Makefile.am                 |   2 +
 .../include/odp_packet_io_ring_internal.h          | 112 +++++----
 platform/linux-generic/m4/configure.m4             |   3 +-
 {helper => platform/linux-generic/pktio}/ring.c    | 263 ++++++++++-----------
 platform/linux-generic/test/Makefile.am            |   3 +-
 platform/linux-generic/test/ring/.gitignore        |   1 +
 platform/linux-generic/test/ring/Makefile.am       |  16 ++
 .../linux-generic/test/ring/ringtest.c             | 178 +++++++-------
 test/Makefile.am                                   |   2 +-
 test/api_test/.gitignore                           |   2 -
 test/api_test/Makefile.am                          |  13 -
 test/api_test/odp_common.c                         |  91 -------
 test/api_test/odp_common.h                         |  42 ----
 16 files changed, 307 insertions(+), 429 deletions(-)
 rename helper/include/odp/helper/ring.h => platform/linux-generic/include/odp_packet_io_ring_internal.h (87%)
 rename {helper => platform/linux-generic/pktio}/ring.c (71%)
 create mode 100644 platform/linux-generic/test/ring/.gitignore
 create mode 100644 platform/linux-generic/test/ring/Makefile.am
 rename test/api_test/odp_ring_test.c => platform/linux-generic/test/ring/ringtest.c (72%)
 delete mode 100644 test/api_test/.gitignore
 delete mode 100644 test/api_test/Makefile.am
 delete mode 100644 test/api_test/odp_common.c
 delete mode 100644 test/api_test/odp_common.h

Comments

Mike Holmes Dec. 16, 2015, 11:24 p.m. UTC | #1
This fails to apply for me

Using patch:
lng-odp_PATCHv17_06-10_linux-generic-helper_move_ring_from_helper_to_linux-generic.mbox
  Trying to apply patch
Applying: linux-generic/helper: move ring from helper to linux-generic
error: patch failed: platform/linux-generic/Makefile.am:91
error: platform/linux-generic/Makefile.am: patch does not apply
error: patch failed: platform/linux-generic/test/Makefile.am:1
error: platform/linux-generic/test/Makefile.am: patch does not apply
error: patch failed: test/api_test/odp_common.c:1
error: test/api_test/odp_common.c: patch does not apply
Patch failed at 0001 linux-generic/helper: move ring from helper to
linux-generic
The copy of the patch that failed is found in:
   /home/mike/git/check-odp/build/odp-apply/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Applying: linux-generic/helper: move ring from helper to linux-generic
fatal: sha1 information is lacking or useless
(platform/linux-generic/Makefile.am).
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.
Patch failed at 0001 linux-generic/helper: move ring from helper to
linux-generic


On 10 December 2015 at 09:24, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> Move ring and it's test from helper to linux-generic/pktio and kill

> not needed api_test directory. Unfortunately odp_ring_test.c had some old

> dirty code so I had to clean up it to to use cunit and

> latest helper apis.

>

> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>

> ---

>  configure.ac                                       |   1 -

>  helper/Makefile.am                                 |   2 -

>  helper/test/Makefile.am                            |   5 +-

>  platform/linux-generic/Makefile.am                 |   2 +

>  .../include/odp_packet_io_ring_internal.h          | 112 +++++----

>  platform/linux-generic/m4/configure.m4             |   3 +-

>  {helper => platform/linux-generic/pktio}/ring.c    | 263

> ++++++++++-----------

>  platform/linux-generic/test/Makefile.am            |   3 +-

>  platform/linux-generic/test/ring/.gitignore        |   1 +

>  platform/linux-generic/test/ring/Makefile.am       |  16 ++

>  .../linux-generic/test/ring/ringtest.c             | 178 +++++++-------

>  test/Makefile.am                                   |   2 +-

>  test/api_test/.gitignore                           |   2 -

>  test/api_test/Makefile.am                          |  13 -

>  test/api_test/odp_common.c                         |  91 -------

>  test/api_test/odp_common.h                         |  42 ----

>  16 files changed, 307 insertions(+), 429 deletions(-)

>  rename helper/include/odp/helper/ring.h =>

> platform/linux-generic/include/odp_packet_io_ring_internal.h (87%)

>  rename {helper => platform/linux-generic/pktio}/ring.c (71%)

>  create mode 100644 platform/linux-generic/test/ring/.gitignore

>  create mode 100644 platform/linux-generic/test/ring/Makefile.am

>  rename test/api_test/odp_ring_test.c =>

> platform/linux-generic/test/ring/ringtest.c (72%)

>  delete mode 100644 test/api_test/.gitignore

>  delete mode 100644 test/api_test/Makefile.am

>  delete mode 100644 test/api_test/odp_common.c

>  delete mode 100644 test/api_test/odp_common.h

>

> diff --git a/configure.ac b/configure.ac

> index 00a1415..bfaa3be 100644

> --- a/configure.ac

> +++ b/configure.ac

> @@ -345,7 +345,6 @@ AC_CONFIG_FILES([Makefile

>                  pkgconfig/libodphelper.pc

>                  scripts/Makefile

>                  test/Makefile

> -                test/api_test/Makefile

>                  test/performance/Makefile

>                  test/validation/Makefile

>                  test/validation/buffer/Makefile

> diff --git a/helper/Makefile.am b/helper/Makefile.am

> index 9caaba0..0f4c09b 100644

> --- a/helper/Makefile.am

> +++ b/helper/Makefile.am

> @@ -8,7 +8,6 @@ AM_CFLAGS += -I$(top_srcdir)/include

>

>  helperincludedir = $(includedir)/odp/helper/

>  helperinclude_HEADERS = \

> -                 $(srcdir)/include/odp/helper/ring.h \

>                   $(srcdir)/include/odp/helper/linux.h \

>                   $(srcdir)/include/odp/helper/chksum.h\

>                   $(srcdir)/include/odp/helper/eth.h\

> @@ -29,7 +28,6 @@ noinst_HEADERS = \

>

>  __LIB__libodphelper_la_SOURCES = \

>                                         linux.c \

> -                                       ring.c \

>                                         hashtable.c \

>                                         lineartable.c

>

> diff --git a/helper/test/Makefile.am b/helper/test/Makefile.am

> index 760dac1..a9c3016 100644

> --- a/helper/test/Makefile.am

> +++ b/helper/test/Makefile.am

> @@ -1,6 +1,7 @@

>  include $(top_srcdir)/test/Makefile.inc

>

>  AM_CFLAGS += -I$(srcdir)/common

> +AM_CFLAGS += -I$(top_srcdir)/test/validation/common

>  AM_LDFLAGS += -static

>

>  TESTS_ENVIRONMENT += TEST_DIR=${builddir}

> @@ -28,5 +29,5 @@ dist_thread_SOURCES = thread.c

>  thread_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la

>  dist_process_SOURCES = process.c

>  process_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la

> -odph_pause_SOURCES = pause.c

> -dist_odp_table_SOURCES = table.c

> +dist_pause_SOURCES = pause.c

> +dist_table_SOURCES = table.c

> diff --git a/platform/linux-generic/Makefile.am

> b/platform/linux-generic/Makefile.am

> index f71c0f2..1ed2ed7 100644

> --- a/platform/linux-generic/Makefile.am

> +++ b/platform/linux-generic/Makefile.am

> @@ -91,6 +91,7 @@ noinst_HEADERS = \

>                   ${srcdir}/include/odp_packet_internal.h \

>                   ${srcdir}/include/odp_packet_io_internal.h \

>                   ${srcdir}/include/odp_packet_io_queue.h \

> +                 ${srcdir}/include/odp_packet_io_ring_internal.h \

>                   ${srcdir}/include/odp_packet_netmap.h \

>                   ${srcdir}/include/odp_packet_socket.h \

>                   ${srcdir}/include/odp_pool_internal.h \

> @@ -121,6 +122,7 @@ __LIB__libodp_la_SOURCES = \

>                            pktio/netmap.c \

>                            pktio/socket.c \

>                            pktio/socket_mmap.c \

> +                          pktio/ring.c \

>                            odp_pool.c \

>                            odp_queue.c \

>                            odp_rwlock.c \

> diff --git a/helper/include/odp/helper/ring.h

> b/platform/linux-generic/include/odp_packet_io_ring_internal.h

> similarity index 87%

> rename from helper/include/odp/helper/ring.h

> rename to platform/linux-generic/include/odp_packet_io_ring_internal.h

> index 541a466..f97c026 100644

> --- a/helper/include/odp/helper/ring.h

> +++ b/platform/linux-generic/include/odp_packet_io_ring_internal.h

> @@ -89,29 +89,28 @@

>   *

>   */

>

> -#ifndef ODPH_RING_H_

> -#define ODPH_RING_H_

> +#ifndef _RING_H_

> +#define _RING_H_

>

>  #ifdef __cplusplus

>  extern "C" {

>  #endif

>

> -

>  #include <odp/std_types.h>

>  #include <odp/hints.h>

>  #include <odp/atomic.h>

>  #include <errno.h>

>  #include <sys/queue.h>

> +#include <odp_debug_internal.h>

>

> -enum odph_ring_queue_behavior {

> -       ODPH_RING_QUEUE_FIXED = 0, /**< Enq/Deq a fixed number

> +enum _ring_queue_behavior {

> +       _RING_QUEUE_FIXED = 0, /**< Enq/Deq a fixed number

>                                 of items from a ring */

> -       ODPH_RING_QUEUE_VARIABLE   /**< Enq/Deq as many items

> +       _RING_QUEUE_VARIABLE   /**< Enq/Deq as many items

>                                 a possible from ring */

>  };

>

> -

> -#define ODPH_RING_NAMESIZE 32 /**< The maximum length of a ring name. */

> +#define _RING_NAMESIZE 32 /**< The maximum length of a ring name. */

>

>  /**

>   * An ODP ring structure.

> @@ -123,12 +122,12 @@ enum odph_ring_queue_behavior {

>   * values in a modulo-32bit base: that's why the overflow of the indexes

> is not

>   * a problem.

>   */

> -typedef struct odph_ring {

> +typedef struct _ring {

>         /** @private Next in list. */

> -       TAILQ_ENTRY(odph_ring) next;

> +       TAILQ_ENTRY(_ring) next;

>

>         /** @private Name of the ring. */

> -       char name[ODPH_RING_NAMESIZE];

> +       char name[_RING_NAMESIZE];

>         /** @private Flags supplied at creation. */

>         int flags;

>

> @@ -153,21 +152,21 @@ typedef struct odph_ring {

>

>         /** @private Memory space of ring starts here. */

>         void *ring[0] ODP_ALIGNED_CACHE;

> -} odph_ring_t;

> +} _ring_t;

>

>  /* The default enqueue is "single-producer".*/

> -#define ODPH_RING_F_SP_ENQ (1 << 0)

> +#define _RING_F_SP_ENQ (1 << 0)

>  /* The default dequeue is "single-consumer".*/

> -#define ODPH_RING_F_SC_DEQ (1 << 1)

> +#define _RING_F_SC_DEQ (1 << 1)

>  /* If set - ring is visible from different processes.

>   * Default is thread visible.*/

> -#define ODPH_RING_SHM_PROC (1 << 2)

> +#define _RING_SHM_PROC (1 << 2)

>   /* Do not link ring to linked list. */

> -#define ODPH_RING_NO_LIST  (1 << 3)

> +#define _RING_NO_LIST  (1 << 3)

>  /* Quota exceed for burst ops */

> -#define ODPH_RING_QUOT_EXCEED (1 << 31)

> +#define _RING_QUOT_EXCEED (1 << 31)

>  /* Ring size mask */

> -#define ODPH_RING_SZ_MASK  (unsigned)(0x0fffffff)

> +#define _RING_SZ_MASK  (unsigned)(0x0fffffff)

>

>  /**

>   * Create a new ring named *name* in memory.

> @@ -198,9 +197,8 @@ typedef struct odph_ring {

>   *    - EEXIST - a memzone with the same name already exists

>   *    - ENOMEM - no appropriate memory area found in which to create

> memzone

>   */

> -odph_ring_t *odph_ring_create(const char *name, unsigned count,

> -                           unsigned flags);

> -

> +_ring_t *_ring_create(const char *name, unsigned count,

> +                     unsigned flags);

>

>  /**

>   * Change the high water mark.

> @@ -217,14 +215,14 @@ odph_ring_t *odph_ring_create(const char *name,

> unsigned count,

>   * @return 0: Success; water mark changed.

>   *             -EINVAL: Invalid water mark value.

>   */

> -int odph_ring_set_water_mark(odph_ring_t *r, unsigned count);

> +int _ring_set_water_mark(_ring_t *r, unsigned count);

>

>  /**

>   * Dump the status of the ring to the console.

>   *

>   * @param r A pointer to the ring structure.

>   */

> -void odph_ring_dump(const odph_ring_t *r);

> +void _ring_dump(const _ring_t *r);

>

>  /**

>   * Enqueue several objects on the ring (multi-producers safe).

> @@ -251,9 +249,9 @@ void odph_ring_dump(const odph_ring_t *r);

>   *   if behavior = ODP_RING_QUEUE_VARIABLE

>   *   - n: Actual number of objects enqueued.

>   */

> -int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,

> -                             unsigned n,

> -                             enum odph_ring_queue_behavior behavior);

> +int ___ring_mp_do_enqueue(_ring_t *r, void * const *obj_table,

> +                         unsigned n,

> +                         enum _ring_queue_behavior behavior);

>

>  /**

>   * Enqueue several objects on a ring (NOT multi-producers safe).

> @@ -277,9 +275,9 @@ int __odph_ring_mp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>   *   if behavior = ODP_RING_QUEUE_VARIABLE

>   *   - n: Actual number of objects enqueued.

>   */

> -int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,

> -                             unsigned n,

> -                             enum odph_ring_queue_behavior behavior);

> +int ___ring_sp_do_enqueue(_ring_t *r, void * const *obj_table,

> +                         unsigned n,

> +                         enum _ring_queue_behavior behavior);

>

>  /**

>   * Dequeue several objects from a ring (multi-consumers safe). When

> @@ -308,9 +306,9 @@ int __odph_ring_sp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>   *   - n: Actual number of objects dequeued.

>   */

>

> -int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,

> -                             unsigned n,

> -                             enum odph_ring_queue_behavior behavior);

> +int ___ring_mc_do_dequeue(_ring_t *r, void **obj_table,

> +                         unsigned n,

> +                         enum _ring_queue_behavior behavior);

>

>  /**

>   * Dequeue several objects from a ring (NOT multi-consumers safe).

> @@ -335,9 +333,9 @@ int __odph_ring_mc_do_dequeue(odph_ring_t *r, void

> **obj_table,

>   *   if behavior = ODP_RING_QUEUE_VARIABLE

>   *   - n: Actual number of objects dequeued.

>   */

> -int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,

> -                             unsigned n,

> -                             enum odph_ring_queue_behavior behavior);

> +int ___ring_sc_do_dequeue(_ring_t *r, void **obj_table,

> +                         unsigned n,

> +                         enum _ring_queue_behavior behavior);

>

>  /**

>   * Enqueue several objects on the ring (multi-producers safe).

> @@ -357,8 +355,8 @@ int __odph_ring_sc_do_dequeue(odph_ring_t *r, void

> **obj_table,

>   *     high water mark is exceeded.

>   *   - -ENOBUFS: Not enough room in the ring to enqueue, no object is

> enqueued.

>   */

> -int odph_ring_mp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,

> -                             unsigned n);

> +int _ring_mp_enqueue_bulk(_ring_t *r, void * const *obj_table,

> +                         unsigned n);

>

>  /**

>   * Enqueue several objects on a ring (NOT multi-producers safe).

> @@ -375,8 +373,8 @@ int odph_ring_mp_enqueue_bulk(odph_ring_t *r, void *

> const *obj_table,

>   *     high water mark is exceeded.

>   *   - -ENOBUFS: Not enough room in the ring to enqueue; no object is

> enqueued.

>   */

> -int odph_ring_sp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,

> -                             unsigned n);

> +int _ring_sp_enqueue_bulk(_ring_t *r, void * const *obj_table,

> +                         unsigned n);

>

>  /**

>   * Dequeue several objects from a ring (multi-consumers safe).

> @@ -395,7 +393,7 @@ int odph_ring_sp_enqueue_bulk(odph_ring_t *r, void *

> const *obj_table,

>   *   - -ENOENT: Not enough entries in the ring to dequeue; no object is

>   *     dequeued.

>   */

> -int odph_ring_mc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned

> n);

> +int _ring_mc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n);

>

>  /**

>   * Dequeue several objects from a ring (NOT multi-consumers safe).

> @@ -412,7 +410,7 @@ int odph_ring_mc_dequeue_bulk(odph_ring_t *r, void

> **obj_table, unsigned n);

>   *   - -ENOENT: Not enough entries in the ring to dequeue; no object is

>   *     dequeued.

>   */

> -int odph_ring_sc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned

> n);

> +int _ring_sc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n);

>

>  /**

>   * Test if a ring is full.

> @@ -423,7 +421,7 @@ int odph_ring_sc_dequeue_bulk(odph_ring_t *r, void

> **obj_table, unsigned n);

>   *   - 1: The ring is full.

>   *   - 0: The ring is not full.

>   */

> -int odph_ring_full(const odph_ring_t *r);

> +int _ring_full(const _ring_t *r);

>

>  /**

>   * Test if a ring is empty.

> @@ -434,7 +432,7 @@ int odph_ring_full(const odph_ring_t *r);

>   *   - 1: The ring is empty.

>   *   - 0: The ring is not empty.

>   */

> -int odph_ring_empty(const odph_ring_t *r);

> +int _ring_empty(const _ring_t *r);

>

>  /**

>   * Return the number of entries in a ring.

> @@ -444,7 +442,7 @@ int odph_ring_empty(const odph_ring_t *r);

>   * @return

>   *   The number of entries in the ring.

>   */

> -unsigned odph_ring_count(const odph_ring_t *r);

> +unsigned _ring_count(const _ring_t *r);

>

>  /**

>   * Return the number of free entries in a ring.

> @@ -454,14 +452,14 @@ unsigned odph_ring_count(const odph_ring_t *r);

>   * @return

>   *   The number of free entries in the ring.

>   */

> -unsigned odph_ring_free_count(const odph_ring_t *r);

> +unsigned _ring_free_count(const _ring_t *r);

>

>  /**

>   * search ring by name

>   * @param name ring name to search

>   * @return     pointer to ring otherwise NULL

>   */

> -odph_ring_t *odph_ring_lookup(const char *name);

> +_ring_t *_ring_lookup(const char *name);

>

>  /**

>   * Enqueue several objects on the ring (multi-producers safe).

> @@ -478,8 +476,8 @@ odph_ring_t *odph_ring_lookup(const char *name);

>   * @return

>   *   - n: Actual number of objects enqueued.

>   */

> -int odph_ring_mp_enqueue_burst(odph_ring_t *r, void * const *obj_table,

> -                              unsigned n);

> +int _ring_mp_enqueue_burst(_ring_t *r, void * const *obj_table,

> +                          unsigned n);

>

>  /**

>   * Enqueue several objects on a ring (NOT multi-producers safe).

> @@ -493,8 +491,8 @@ int odph_ring_mp_enqueue_burst(odph_ring_t *r, void *

> const *obj_table,

>   * @return

>   *   - n: Actual number of objects enqueued.

>   */

> -int odph_ring_sp_enqueue_burst(odph_ring_t *r, void * const *obj_table,

> -                              unsigned n);

> +int _ring_sp_enqueue_burst(_ring_t *r, void * const *obj_table,

> +                          unsigned n);

>  /**

>   * Enqueue several objects on a ring.

>   *

> @@ -511,8 +509,8 @@ int odph_ring_sp_enqueue_burst(odph_ring_t *r, void *

> const *obj_table,

>   * @return

>   *   - n: Actual number of objects enqueued.

>   */

> -int odph_ring_enqueue_burst(odph_ring_t *r, void * const *obj_table,

> -                           unsigned n);

> +int _ring_enqueue_burst(_ring_t *r, void * const *obj_table,

> +                       unsigned n);

>

>  /**

>   * Dequeue several objects from a ring (multi-consumers safe). When the

> request

> @@ -531,7 +529,7 @@ int odph_ring_enqueue_burst(odph_ring_t *r, void *

> const *obj_table,

>   * @return

>   *   - n: Actual number of objects dequeued, 0 if ring is empty

>   */

> -int odph_ring_mc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned

> n);

> +int _ring_mc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n);

>

>  /**

>   * Dequeue several objects from a ring (NOT multi-consumers safe).When the

> @@ -547,7 +545,7 @@ int odph_ring_mc_dequeue_burst(odph_ring_t *r, void

> **obj_table, unsigned n);

>   * @return

>   *   - n: Actual number of objects dequeued, 0 if ring is empty

>   */

> -int odph_ring_sc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned

> n);

> +int _ring_sc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n);

>

>  /**

>   * Dequeue multiple objects from a ring up to a maximum number.

> @@ -565,17 +563,17 @@ int odph_ring_sc_dequeue_burst(odph_ring_t *r, void

> **obj_table, unsigned n);

>   * @return

>   *   - Number of objects dequeued, or a negative error code on error

>   */

> -int odph_ring_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n);

> +int _ring_dequeue_burst(_ring_t *r, void **obj_table, unsigned n);

>

>  /**

>   * dump the status of all rings on the console

>   */

> -void odph_ring_list_dump(void);

> +void _ring_list_dump(void);

>

>  /**

>   * initialise ring tailq

>   */

> -void odph_ring_tailq_init(void);

> +void _ring_tailq_init(void);

>

>  #ifdef __cplusplus

>  }

> diff --git a/platform/linux-generic/m4/configure.m4

> b/platform/linux-generic/m4/configure.m4

> index df6dc64..6bb159f 100644

> --- a/platform/linux-generic/m4/configure.m4

> +++ b/platform/linux-generic/m4/configure.m4

> @@ -23,4 +23,5 @@ m4_include([platform/linux-generic/m4/odp_pcap.m4])

>

>  AC_CONFIG_FILES([platform/linux-generic/Makefile

>                  platform/linux-generic/test/Makefile

> -                platform/linux-generic/test/pktio/Makefile])

> +                platform/linux-generic/test/pktio/Makefile

> +                platform/linux-generic/test/ring/Makefile])

> diff --git a/helper/ring.c b/platform/linux-generic/pktio/ring.c

> similarity index 71%

> rename from helper/ring.c

> rename to platform/linux-generic/pktio/ring.c

> index 6b233cc..9af11b7 100644

> --- a/helper/ring.c

> +++ b/platform/linux-generic/pktio/ring.c

> @@ -78,9 +78,9 @@

>  #include <string.h>

>  #include "odph_debug.h"

>  #include <odp/rwlock.h>

> -#include <odp/helper/ring.h>

> +#include <odp_packet_io_ring_internal.h>

>

> -static TAILQ_HEAD(, odph_ring) odp_ring_list;

> +static TAILQ_HEAD(, _ring) odp_ring_list;

>

>  #define RING_VAL_IS_POWER_2(x) ((((x) - 1) & (x)) == 0)

>

> @@ -93,9 +93,9 @@ static TAILQ_HEAD(, odph_ring) odp_ring_list;

>         if (odp_likely(idx + n < size)) { \

>                 for (i = 0; i < (n & ((~(unsigned)0x3))); i += 4, idx +=

> 4) { \

>                         r->ring[idx] = obj_table[i]; \

> -                       r->ring[idx+1] = obj_table[i+1]; \

> -                       r->ring[idx+2] = obj_table[i+2]; \

> -                       r->ring[idx+3] = obj_table[i+3]; \

> +                       r->ring[idx + 1] = obj_table[i + 1]; \

> +                       r->ring[idx + 2] = obj_table[i + 2]; \

> +                       r->ring[idx + 3] = obj_table[i + 3]; \

>                 } \

>                 switch (n & 0x3) { \

>                 case 3: \

> @@ -122,9 +122,9 @@ static TAILQ_HEAD(, odph_ring) odp_ring_list;

>         if (odp_likely(idx + n < size)) { \

>                 for (i = 0; i < (n & (~(unsigned)0x3)); i += 4, idx += 4)

> {\

>                         obj_table[i] = r->ring[idx]; \

> -                       obj_table[i+1] = r->ring[idx+1]; \

> -                       obj_table[i+2] = r->ring[idx+2]; \

> -                       obj_table[i+3] = r->ring[idx+3]; \

> +                       obj_table[i + 1] = r->ring[idx + 1]; \

> +                       obj_table[i + 2] = r->ring[idx + 2]; \

> +                       obj_table[i + 3] = r->ring[idx + 3]; \

>                 } \

>                 switch (n & 0x3) { \

>                 case 3: \

> @@ -145,36 +145,37 @@ static TAILQ_HEAD(, odph_ring) odp_ring_list;

>  static odp_rwlock_t    qlock;  /* rings tailq lock */

>

>  /* init tailq_ring */

> -void odph_ring_tailq_init(void)

> +void _ring_tailq_init(void)

>  {

>         TAILQ_INIT(&odp_ring_list);

>         odp_rwlock_init(&qlock);

>  }

>

>  /* create the ring */

> -odph_ring_t *

> -odph_ring_create(const char *name, unsigned count, unsigned flags)

> +_ring_t *

> +_ring_create(const char *name, unsigned count, unsigned flags)

>  {

> -       char ring_name[ODPH_RING_NAMESIZE];

> -       odph_ring_t *r;

> +       char ring_name[_RING_NAMESIZE];

> +       _ring_t *r;

>         size_t ring_size;

>         uint32_t shm_flag;

>         odp_shm_t shm;

>

> -       if (flags & ODPH_RING_SHM_PROC)

> +       if (flags & _RING_SHM_PROC)

>                 shm_flag = ODP_SHM_PROC;

>         else

>                 shm_flag = 0;

>

>         /* count must be a power of 2 */

> -       if (!RING_VAL_IS_POWER_2(count) || (count > ODPH_RING_SZ_MASK)) {

> -               ODPH_ERR("Requested size is invalid, must be power of 2,

> and do not exceed the size limit %u\n",

> -                        ODPH_RING_SZ_MASK);

> +       if (!RING_VAL_IS_POWER_2(count) || (count > _RING_SZ_MASK)) {

> +               ODPH_ERR("Requested size is invalid, must be power of 2,"

> +                        "and do not exceed the size limit %u\n",

> +                        _RING_SZ_MASK);

>                 return NULL;

>         }

>

>         snprintf(ring_name, sizeof(ring_name), "%s", name);

> -       ring_size = count*sizeof(void *)+sizeof(odph_ring_t);

> +       ring_size = count * sizeof(void *) + sizeof(_ring_t);

>

>         odp_rwlock_write_lock(&qlock);

>         /* reserve a memory zone for this ring.*/

> @@ -188,18 +189,18 @@ odph_ring_create(const char *name, unsigned count,

> unsigned flags)

>                 snprintf(r->name, sizeof(r->name), "%s", name);

>                 r->flags = flags;

>                 r->prod.watermark = count;

> -               r->prod.sp_enqueue = !!(flags & ODPH_RING_F_SP_ENQ);

> -               r->cons.sc_dequeue = !!(flags & ODPH_RING_F_SC_DEQ);

> +               r->prod.sp_enqueue = !!(flags & _RING_F_SP_ENQ);

> +               r->cons.sc_dequeue = !!(flags & _RING_F_SC_DEQ);

>                 r->prod.size = count;

>                 r->cons.size = count;

> -               r->prod.mask = count-1;

> -               r->cons.mask = count-1;

> +               r->prod.mask = count - 1;

> +               r->cons.mask = count - 1;

>                 r->prod.head = 0;

>                 r->cons.head = 0;

>                 r->prod.tail = 0;

>                 r->cons.tail = 0;

>

> -               if (!(flags & ODPH_RING_NO_LIST))

> +               if (!(flags & _RING_NO_LIST))

>                         TAILQ_INSERT_TAIL(&odp_ring_list, r, next);

>         } else {

>                 ODPH_ERR("Cannot reserve memory\n");

> @@ -213,7 +214,7 @@ odph_ring_create(const char *name, unsigned count,

> unsigned flags)

>   * change the high water mark. If *count* is 0, water marking is

>   * disabled

>   */

> -int odph_ring_set_water_mark(odph_ring_t *r, unsigned count)

> +int _ring_set_water_mark(_ring_t *r, unsigned count)

>  {

>         if (count >= r->prod.size)

>                 return -EINVAL;

> @@ -229,8 +230,8 @@ int odph_ring_set_water_mark(odph_ring_t *r, unsigned

> count)

>  /**

>   * Enqueue several objects on the ring (multi-producers safe).

>   */

> -int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,

> -                        unsigned n, enum odph_ring_queue_behavior

> behavior)

> +int ___ring_mp_do_enqueue(_ring_t *r, void * const *obj_table,

> +                         unsigned n, enum _ring_queue_behavior behavior)

>  {

>         uint32_t prod_head, prod_next;

>         uint32_t cons_tail, free_entries;

> @@ -255,24 +256,22 @@ int __odph_ring_mp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>

>                 /* check that we have enough room in ring */

>                 if (odp_unlikely(n > free_entries)) {

> -                       if (behavior == ODPH_RING_QUEUE_FIXED) {

> +                       if (behavior == _RING_QUEUE_FIXED)

>                                 return -ENOBUFS;

> -                       } else {

> -                               /* No free entry available */

> -                               if (odp_unlikely(free_entries == 0))

> -                                       return 0;

> +                       /* No free entry available */

> +                       if (odp_unlikely(free_entries == 0))

> +                               return 0;

>

> -                               n = free_entries;

> -                       }

> +                       n = free_entries;

>                 }

>

>                 prod_next = prod_head + n;

>                 success = __atomic_compare_exchange_n(&r->prod.head,

> -                               &prod_head,

> -                               prod_next,

> -                               false/*strong*/,

> -                               __ATOMIC_ACQUIRE,

> -                               __ATOMIC_RELAXED);

> +                                                     &prod_head,

> +                                                     prod_next,

> +                                                     false/*strong*/,

> +                                                     __ATOMIC_ACQUIRE,

> +                                                     __ATOMIC_RELAXED);

>         } while (odp_unlikely(success == 0));

>

>         /* write entries in ring */

> @@ -280,10 +279,10 @@ int __odph_ring_mp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>

>         /* if we exceed the watermark */

>         if (odp_unlikely(((mask + 1) - free_entries + n) >

> r->prod.watermark)) {

> -               ret = (behavior == ODPH_RING_QUEUE_FIXED) ? -EDQUOT :

> -                               (int)(n | ODPH_RING_QUOT_EXCEED);

> +               ret = (behavior == _RING_QUEUE_FIXED) ? -EDQUOT :

> +                               (int)(n | _RING_QUOT_EXCEED);

>         } else {

> -               ret = (behavior == ODPH_RING_QUEUE_FIXED) ? 0 : n;

> +               ret = (behavior == _RING_QUEUE_FIXED) ? 0 : n;

>         }

>

>         /*

> @@ -302,8 +301,8 @@ int __odph_ring_mp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>  /**

>   * Enqueue several objects on a ring (NOT multi-producers safe).

>   */

> -int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,

> -                            unsigned n, enum odph_ring_queue_behavior

> behavior)

> +int ___ring_sp_do_enqueue(_ring_t *r, void * const *obj_table,

> +                         unsigned n, enum _ring_queue_behavior behavior)

>  {

>         uint32_t prod_head, cons_tail;

>         uint32_t prod_next, free_entries;

> @@ -321,15 +320,13 @@ int __odph_ring_sp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>

>         /* check that we have enough room in ring */

>         if (odp_unlikely(n > free_entries)) {

> -               if (behavior == ODPH_RING_QUEUE_FIXED) {

> +               if (behavior == _RING_QUEUE_FIXED)

>                         return -ENOBUFS;

> -               } else {

> -                       /* No free entry available */

> -                       if (odp_unlikely(free_entries == 0))

> -                               return 0;

> +               /* No free entry available */

> +               if (odp_unlikely(free_entries == 0))

> +                       return 0;

>

> -                       n = free_entries;

> -               }

> +               n = free_entries;

>         }

>

>         prod_next = prod_head + n;

> @@ -340,10 +337,10 @@ int __odph_ring_sp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>

>         /* if we exceed the watermark */

>         if (odp_unlikely(((mask + 1) - free_entries + n) >

> r->prod.watermark)) {

> -               ret = (behavior == ODPH_RING_QUEUE_FIXED) ? -EDQUOT :

> -                       (int)(n | ODPH_RING_QUOT_EXCEED);

> +               ret = (behavior == _RING_QUEUE_FIXED) ? -EDQUOT :

> +                       (int)(n | _RING_QUOT_EXCEED);

>         } else {

> -               ret = (behavior == ODPH_RING_QUEUE_FIXED) ? 0 : n;

> +               ret = (behavior == _RING_QUEUE_FIXED) ? 0 : n;

>         }

>

>         /* Release our entries and the memory they refer to */

> @@ -356,8 +353,8 @@ int __odph_ring_sp_do_enqueue(odph_ring_t *r, void *

> const *obj_table,

>   * Dequeue several objects from a ring (multi-consumers safe).

>   */

>

> -int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,

> -                        unsigned n, enum odph_ring_queue_behavior

> behavior)

> +int ___ring_mc_do_dequeue(_ring_t *r, void **obj_table,

> +                         unsigned n, enum _ring_queue_behavior behavior)

>  {

>         uint32_t cons_head, prod_tail;

>         uint32_t cons_next, entries;

> @@ -381,23 +378,21 @@ int __odph_ring_mc_do_dequeue(odph_ring_t *r, void

> **obj_table,

>

>                 /* Set the actual entries for dequeue */

>                 if (n > entries) {

> -                       if (behavior == ODPH_RING_QUEUE_FIXED) {

> +                       if (behavior == _RING_QUEUE_FIXED)

>                                 return -ENOENT;

> -                       } else {

> -                               if (odp_unlikely(entries == 0))

> -                                       return 0;

> +                       if (odp_unlikely(entries == 0))

> +                               return 0;

>

> -                               n = entries;

> -                       }

> +                       n = entries;

>                 }

>

>                 cons_next = cons_head + n;

>                 success = __atomic_compare_exchange_n(&r->cons.head,

> -                               &cons_head,

> -                               cons_next,

> -                               false/*strong*/,

> -                               __ATOMIC_ACQUIRE,

> -                               __ATOMIC_RELAXED);

> +                                                     &cons_head,

> +                                                     cons_next,

> +                                                     false/*strong*/,

> +                                                     __ATOMIC_ACQUIRE,

> +                                                     __ATOMIC_RELAXED);

>         } while (odp_unlikely(success == 0));

>

>         /* copy in table */

> @@ -414,14 +409,14 @@ int __odph_ring_mc_do_dequeue(odph_ring_t *r, void

> **obj_table,

>         __atomic_thread_fence(__ATOMIC_RELEASE);

>         r->cons.tail = cons_next;

>

> -       return behavior == ODPH_RING_QUEUE_FIXED ? 0 : n;

> +       return behavior == _RING_QUEUE_FIXED ? 0 : n;

>  }

>

>  /**

>   * Dequeue several objects from a ring (NOT multi-consumers safe).

>   */

> -int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,

> -                            unsigned n, enum odph_ring_queue_behavior

> behavior)

> +int ___ring_sc_do_dequeue(_ring_t *r, void **obj_table,

> +                         unsigned n, enum _ring_queue_behavior behavior)

>  {

>         uint32_t cons_head, prod_tail;

>         uint32_t cons_next, entries;

> @@ -437,14 +432,12 @@ int __odph_ring_sc_do_dequeue(odph_ring_t *r, void

> **obj_table,

>         entries = prod_tail - cons_head;

>

>         if (n > entries) {

> -               if (behavior == ODPH_RING_QUEUE_FIXED) {

> +               if (behavior == _RING_QUEUE_FIXED)

>                         return -ENOENT;

> -               } else {

> -                       if (odp_unlikely(entries == 0))

> -                               return 0;

> +               if (odp_unlikely(entries == 0))

> +                       return 0;

>

> -                       n = entries;

> -               }

> +               n = entries;

>         }

>

>         cons_next = cons_head + n;

> @@ -456,127 +449,131 @@ int __odph_ring_sc_do_dequeue(odph_ring_t *r, void

> **obj_table,

>         DEQUEUE_PTRS();

>

>         r->cons.tail = cons_next;

> -       return behavior == ODPH_RING_QUEUE_FIXED ? 0 : n;

> +       return behavior == _RING_QUEUE_FIXED ? 0 : n;

>  }

>

>  /**

>   * Enqueue several objects on the ring (multi-producers safe).

>   */

> -int odph_ring_mp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,

> -                               unsigned n)

> +int _ring_mp_enqueue_bulk(_ring_t *r, void * const *obj_table,

> +                         unsigned n)

>  {

> -       return __odph_ring_mp_do_enqueue(r, obj_table, n,

> -                                        ODPH_RING_QUEUE_FIXED);

> +       return ___ring_mp_do_enqueue(r, obj_table, n,

> +                                        _RING_QUEUE_FIXED);

>  }

>

>  /**

>   * Enqueue several objects on a ring (NOT multi-producers safe).

>   */

> -int odph_ring_sp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,

> -                            unsigned n)

> +int _ring_sp_enqueue_bulk(_ring_t *r, void * const *obj_table,

> +                         unsigned n)

>  {

> -       return __odph_ring_sp_do_enqueue(r, obj_table, n,

> -                                        ODPH_RING_QUEUE_FIXED);

> +       return ___ring_sp_do_enqueue(r, obj_table, n,

> +                                        _RING_QUEUE_FIXED);

>  }

>

>  /**

>   * Dequeue several objects from a ring (multi-consumers safe).

>   */

> -int odph_ring_mc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned

> n)

> +int _ring_mc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n)

>  {

> -       return __odph_ring_mc_do_dequeue(r, obj_table, n,

> -                                        ODPH_RING_QUEUE_FIXED);

> +       return ___ring_mc_do_dequeue(r, obj_table, n,

> +                                        _RING_QUEUE_FIXED);

>  }

>

>  /**

>   * Dequeue several objects from a ring (NOT multi-consumers safe).

>   */

> -int odph_ring_sc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned

> n)

> +int _ring_sc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n)

>  {

> -       return __odph_ring_sc_do_dequeue(r, obj_table, n,

> -                                        ODPH_RING_QUEUE_FIXED);

> +       return ___ring_sc_do_dequeue(r, obj_table, n,

> +                                        _RING_QUEUE_FIXED);

>  }

>

>  /**

>   * Test if a ring is full.

>   */

> -int odph_ring_full(const odph_ring_t *r)

> +int _ring_full(const _ring_t *r)

>  {

>         uint32_t prod_tail = r->prod.tail;

>         uint32_t cons_tail = r->cons.tail;

> +

>         return (((cons_tail - prod_tail - 1) & r->prod.mask) == 0);

>  }

>

>  /**

>   * Test if a ring is empty.

>   */

> -int odph_ring_empty(const odph_ring_t *r)

> +int _ring_empty(const _ring_t *r)

>  {

>         uint32_t prod_tail = r->prod.tail;

>         uint32_t cons_tail = r->cons.tail;

> +

>         return !!(cons_tail == prod_tail);

>  }

>

>  /**

>   * Return the number of entries in a ring.

>   */

> -unsigned odph_ring_count(const odph_ring_t *r)

> +unsigned _ring_count(const _ring_t *r)

>  {

>         uint32_t prod_tail = r->prod.tail;

>         uint32_t cons_tail = r->cons.tail;

> +

>         return (prod_tail - cons_tail) & r->prod.mask;

>  }

>

>  /**

>   * Return the number of free entries in a ring.

>   */

> -unsigned odph_ring_free_count(const odph_ring_t *r)

> +unsigned _ring_free_count(const _ring_t *r)

>  {

>         uint32_t prod_tail = r->prod.tail;

>         uint32_t cons_tail = r->cons.tail;

> +

>         return (cons_tail - prod_tail - 1) & r->prod.mask;

>  }

>

>  /* dump the status of the ring on the console */

> -void odph_ring_dump(const odph_ring_t *r)

> +void _ring_dump(const _ring_t *r)

>  {

> -       ODPH_DBG("ring <%s>@%p\n", r->name, r);

> -       ODPH_DBG("  flags=%x\n", r->flags);

> -       ODPH_DBG("  size=%" PRIu32 "\n", r->prod.size);

> -       ODPH_DBG("  ct=%" PRIu32 "\n", r->cons.tail);

> -       ODPH_DBG("  ch=%" PRIu32 "\n", r->cons.head);

> -       ODPH_DBG("  pt=%" PRIu32 "\n", r->prod.tail);

> -       ODPH_DBG("  ph=%" PRIu32 "\n", r->prod.head);

> -       ODPH_DBG("  used=%u\n", odph_ring_count(r));

> -       ODPH_DBG("  avail=%u\n", odph_ring_free_count(r));

> +       ODP_DBG("ring <%s>@%p\n", r->name, r);

> +       ODP_DBG("  flags=%x\n", r->flags);

> +       ODP_DBG("  size=%" PRIu32 "\n", r->prod.size);

> +       ODP_DBG("  ct=%" PRIu32 "\n", r->cons.tail);

> +       ODP_DBG("  ch=%" PRIu32 "\n", r->cons.head);

> +       ODP_DBG("  pt=%" PRIu32 "\n", r->prod.tail);

> +       ODP_DBG("  ph=%" PRIu32 "\n", r->prod.head);

> +       ODP_DBG("  used=%u\n", _ring_count(r));

> +       ODP_DBG("  avail=%u\n", _ring_free_count(r));

>         if (r->prod.watermark == r->prod.size)

> -               ODPH_DBG("  watermark=0\n");

> +               ODP_DBG("  watermark=0\n");

>         else

> -               ODPH_DBG("  watermark=%" PRIu32 "\n", r->prod.watermark);

> +               ODP_DBG("  watermark=%" PRIu32 "\n", r->prod.watermark);

>  }

>

>  /* dump the status of all rings on the console */

> -void odph_ring_list_dump(void)

> +void _ring_list_dump(void)

>  {

> -       const odph_ring_t *mp = NULL;

> +       const _ring_t *mp = NULL;

>

>         odp_rwlock_read_lock(&qlock);

>

>         TAILQ_FOREACH(mp, &odp_ring_list, next) {

> -               odph_ring_dump(mp);

> +               _ring_dump(mp);

>         }

>

>         odp_rwlock_read_unlock(&qlock);

>  }

>

>  /* search a ring from its name */

> -odph_ring_t *odph_ring_lookup(const char *name)

> +_ring_t *_ring_lookup(const char *name)

>  {

> -       odph_ring_t *r;

> +       _ring_t *r;

>

>         odp_rwlock_read_lock(&qlock);

>         TAILQ_FOREACH(r, &odp_ring_list, next) {

> -               if (strncmp(name, r->name, ODPH_RING_NAMESIZE) == 0)

> +               if (strncmp(name, r->name, _RING_NAMESIZE) == 0)

>                         break;

>         }

>         odp_rwlock_read_unlock(&qlock);

> @@ -587,60 +584,60 @@ odph_ring_t *odph_ring_lookup(const char *name)

>  /**

>   * Enqueue several objects on the ring (multi-producers safe).

>   */

> -int odph_ring_mp_enqueue_burst(odph_ring_t *r, void * const *obj_table,

> -                             unsigned n)

> +int _ring_mp_enqueue_burst(_ring_t *r, void * const *obj_table,

> +                          unsigned n)

>  {

> -       return __odph_ring_mp_do_enqueue(r, obj_table, n,

> -                                        ODPH_RING_QUEUE_VARIABLE);

> +       return ___ring_mp_do_enqueue(r, obj_table, n,

> +                                        _RING_QUEUE_VARIABLE);

>  }

>

>  /**

>   * Enqueue several objects on a ring (NOT multi-producers safe).

>   */

> -int odph_ring_sp_enqueue_burst(odph_ring_t *r, void * const *obj_table,

> -                             unsigned n)

> +int _ring_sp_enqueue_burst(_ring_t *r, void * const *obj_table,

> +                          unsigned n)

>  {

> -       return __odph_ring_sp_do_enqueue(r, obj_table, n,

> -                                       ODPH_RING_QUEUE_VARIABLE);

> +       return ___ring_sp_do_enqueue(r, obj_table, n,

> +                                       _RING_QUEUE_VARIABLE);

>  }

>

>  /**

>   * Enqueue several objects on a ring.

>   */

> -int odph_ring_enqueue_burst(odph_ring_t *r, void * const *obj_table,

> -                          unsigned n)

> +int _ring_enqueue_burst(_ring_t *r, void * const *obj_table,

> +                       unsigned n)

>  {

>         if (r->prod.sp_enqueue)

> -               return odph_ring_sp_enqueue_burst(r, obj_table, n);

> +               return _ring_sp_enqueue_burst(r, obj_table, n);

>         else

> -               return odph_ring_mp_enqueue_burst(r, obj_table, n);

> +               return _ring_mp_enqueue_burst(r, obj_table, n);

>  }

>

>  /**

>   * Dequeue several objects from a ring (multi-consumers safe).

>   */

> -int odph_ring_mc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned

> n)

> +int _ring_mc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n)

>  {

> -       return __odph_ring_mc_do_dequeue(r, obj_table, n,

> -                                       ODPH_RING_QUEUE_VARIABLE);

> +       return ___ring_mc_do_dequeue(r, obj_table, n,

> +                                       _RING_QUEUE_VARIABLE);

>  }

>

>  /**

>   * Dequeue several objects from a ring (NOT multi-consumers safe).

>   */

> -int odph_ring_sc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned

> n)

> +int _ring_sc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n)

>  {

> -       return __odph_ring_sc_do_dequeue(r, obj_table, n,

> -                                        ODPH_RING_QUEUE_VARIABLE);

> +       return ___ring_sc_do_dequeue(r, obj_table, n,

> +                                        _RING_QUEUE_VARIABLE);

>  }

>

>  /**

>   * Dequeue multiple objects from a ring up to a maximum number.

>   */

> -int odph_ring_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n)

> +int _ring_dequeue_burst(_ring_t *r, void **obj_table, unsigned n)

>  {

>         if (r->cons.sc_dequeue)

> -               return odph_ring_sc_dequeue_burst(r, obj_table, n);

> +               return _ring_sc_dequeue_burst(r, obj_table, n);

>         else

> -               return odph_ring_mc_dequeue_burst(r, obj_table, n);

> +               return _ring_mc_dequeue_burst(r, obj_table, n);

>  }

> diff --git a/platform/linux-generic/test/Makefile.am

> b/platform/linux-generic/test/Makefile.am

> index 76d357a..a4d4dcd 100644

> --- a/platform/linux-generic/test/Makefile.am

> +++ b/platform/linux-generic/test/Makefile.am

> @@ -1,10 +1,11 @@

>  include $(top_srcdir)/test/Makefile.inc

>  TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/validation

>

> -ODP_MODULES = pktio

> +ODP_MODULES = pktio ring

>

>  if test_vald

>  TESTS = pktio/pktio_run \

> +       ring/ringtest$(EXEEXT) \

>         ${top_builddir}/test/validation/buffer/buffer_main$(EXEEXT) \

>

> ${top_builddir}/test/validation/classification/classification_main$(EXEEXT)

> \

>         ${top_builddir}/test/validation/config/config_main$(EXEEXT) \

> diff --git a/platform/linux-generic/test/ring/.gitignore

> b/platform/linux-generic/test/ring/.gitignore

> new file mode 100644

> index 0000000..4767f5e

> --- /dev/null

> +++ b/platform/linux-generic/test/ring/.gitignore

> @@ -0,0 +1 @@

> +ringtest

> diff --git a/platform/linux-generic/test/ring/Makefile.am

> b/platform/linux-generic/test/ring/Makefile.am

> new file mode 100644

> index 0000000..5a949d0

> --- /dev/null

> +++ b/platform/linux-generic/test/ring/Makefile.am

> @@ -0,0 +1,16 @@

> +include $(top_srcdir)/test/validation/Makefile.inc

> +

> +AM_CFLAGS += -I$(srcdir)/common

> +AM_CFLAGS += -I$(top_srcdir)/test/validation/common

> +AM_LDFLAGS += -static

> +

> +COMPILE_ONLY =

> +

> +TESTSCRIPTS =

> +

> +EXECUTABLES = ringtest$(EXEEXT)

> +

> +test_PROGRAMS = $(EXECUTABLES) $(COMPILE_ONLY)

> +

> +ringtest_SOURCES = ringtest.c

> +ringtest_LDADD = $(LIBCUNIT_COMMON) $(LIBODP)

> diff --git a/test/api_test/odp_ring_test.c

> b/platform/linux-generic/test/ring/ringtest.c

> similarity index 72%

> rename from test/api_test/odp_ring_test.c

> rename to platform/linux-generic/test/ring/ringtest.c

> index e8a962a..6e18863 100644

> --- a/test/api_test/odp_ring_test.c

> +++ b/platform/linux-generic/test/ring/ringtest.c

> @@ -37,7 +37,6 @@

>   *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

>   */

>

> -

>  /**

>   * @file

>   *

> @@ -48,86 +47,96 @@

>  #include <stdio.h>

>  #include <string.h>

>  #include <odp.h>

> -#include <odp_common.h>

> -#include <odp/helper/ring.h>

> +#include <odp/helper/linux.h>

> +#include <odp_packet_io_ring_internal.h>

>  #include <test_debug.h>

> +#include <odp_cunit_common.h>

>

>  #define RING_SIZE 4096

>  #define MAX_BULK 32

>

> -#define RING_TEST_BASIC

> +enum {

> +       ODP_RING_TEST_BASIC,

> +       ODP_RING_TEST_STRESS,

> +};

>

> -static int test_ring_basic(odph_ring_t *r)

> +/* local struct for ring_thread argument */

> +typedef struct {

> +       pthrd_arg thrdarg;

> +       int stress_type;

> +} ring_arg_t;

> +

> +static int test_ring_basic(_ring_t *r)

>  {

>         void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst =

> NULL;

>         int ret;

>         unsigned i, num_elems;

>

>         /* alloc dummy object pointers */

> -       src = malloc(RING_SIZE*2*sizeof(void *));

> +       src = malloc(RING_SIZE * 2 * sizeof(void *));

>         if (src == NULL) {

>                 LOG_ERR("failed to allocate test ring src memory\n");

>                 goto fail;

>         }

> -       for (i = 0; i < RING_SIZE*2; i++)

> +       for (i = 0; i < RING_SIZE * 2; i++)

>                 src[i] = (void *)(unsigned long)i;

>

>         cur_src = src;

>

>         /* alloc some room for copied objects */

> -       dst = malloc(RING_SIZE*2*sizeof(void *));

> +       dst = malloc(RING_SIZE * 2 * sizeof(void *));

>         if (dst == NULL) {

>                 LOG_ERR("failed to allocate test ring dst memory\n");

>                 goto fail;

>         }

>

> -       memset(dst, 0, RING_SIZE*2*sizeof(void *));

> +       memset(dst, 0, RING_SIZE * 2 * sizeof(void *));

>         cur_dst = dst;

>

>         printf("Test SP & SC basic functions\n");

>         printf("enqueue 1 obj\n");

> -       ret = odph_ring_sp_enqueue_burst(r, cur_src, 1);

> +       ret = _ring_sp_enqueue_burst(r, cur_src, 1);

>         cur_src += 1;

> -       if ((ret & ODPH_RING_SZ_MASK) != 1) {

> +       if ((ret & _RING_SZ_MASK) != 1) {

>                 LOG_ERR("sp_enq for 1 obj failed\n");

>                 goto fail;

>         }

>

>         printf("enqueue 2 objs\n");

> -       ret = odph_ring_sp_enqueue_burst(r, cur_src, 2);

> +       ret = _ring_sp_enqueue_burst(r, cur_src, 2);

>         cur_src += 2;

> -       if ((ret & ODPH_RING_SZ_MASK) != 2) {

> +       if ((ret & _RING_SZ_MASK) != 2) {

>                 LOG_ERR("sp_enq for 2 obj failed\n");

>                 goto fail;

>         }

>

>         printf("enqueue MAX_BULK objs\n");

> -       ret = odph_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);

> -       if ((ret & ODPH_RING_SZ_MASK) != MAX_BULK) {

> +       ret = _ring_sp_enqueue_burst(r, cur_src, MAX_BULK);

> +       if ((ret & _RING_SZ_MASK) != MAX_BULK) {

>                 LOG_ERR("sp_enq for %d obj failed\n", MAX_BULK);

>                 goto fail;

>         }

>

>         printf("dequeue 1 obj\n");

> -       ret = odph_ring_sc_dequeue_burst(r, cur_dst, 1);

> +       ret = _ring_sc_dequeue_burst(r, cur_dst, 1);

>         cur_dst += 1;

> -       if ((ret & ODPH_RING_SZ_MASK) != 1) {

> +       if ((ret & _RING_SZ_MASK) != 1) {

>                 LOG_ERR("sc_deq for 1 obj failed\n");

>                 goto fail;

>         }

>

>         printf("dequeue 2 objs\n");

> -       ret = odph_ring_sc_dequeue_burst(r, cur_dst, 2);

> +       ret = _ring_sc_dequeue_burst(r, cur_dst, 2);

>         cur_dst += 2;

> -       if ((ret & ODPH_RING_SZ_MASK) != 2) {

> +       if ((ret & _RING_SZ_MASK) != 2) {

>                 LOG_ERR("sc_deq for 2 obj failed\n");

>                 goto fail;

>         }

>

>         printf("dequeue MAX_BULK objs\n");

> -       ret = odph_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);

> +       ret = _ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);

>         cur_dst += MAX_BULK;

> -       if ((ret & ODPH_RING_SZ_MASK) != MAX_BULK) {

> +       if ((ret & _RING_SZ_MASK) != MAX_BULK) {

>                 LOG_ERR("sc_deq for %d obj failed\n", MAX_BULK);

>                 goto fail;

>         }

> @@ -144,41 +153,41 @@ static int test_ring_basic(odph_ring_t *r)

>         printf("Test MP & MC basic functions\n");

>

>         printf("enqueue 1 obj\n");

> -       ret = odph_ring_mp_enqueue_bulk(r, cur_src, 1);

> +       ret = _ring_mp_enqueue_bulk(r, cur_src, 1);

>         cur_src += 1;

>         if (ret != 0) {

>                 LOG_ERR("mp_enq for 1 obj failed\n");

>                 goto fail;

>         }

>         printf("enqueue 2 objs\n");

> -       ret = odph_ring_mp_enqueue_bulk(r, cur_src, 2);

> +       ret = _ring_mp_enqueue_bulk(r, cur_src, 2);

>         cur_src += 2;

>         if (ret != 0) {

>                 LOG_ERR("mp_enq for 2 obj failed\n");

>                 goto fail;

>         }

>         printf("enqueue MAX_BULK objs\n");

> -       ret = odph_ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);

> +       ret = _ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);

>         if (ret != 0) {

>                 LOG_ERR("mp_enq for %d obj failed\n", MAX_BULK);

>                 goto fail;

>         }

>         printf("dequeue 1 obj\n");

> -       ret = odph_ring_mc_dequeue_bulk(r, cur_dst, 1);

> +       ret = _ring_mc_dequeue_bulk(r, cur_dst, 1);

>         cur_dst += 1;

>         if (ret != 0) {

>                 LOG_ERR("mc_deq for 1 obj failed\n");

>                 goto fail;

>         }

>         printf("dequeue 2 objs\n");

> -       ret = odph_ring_mc_dequeue_bulk(r, cur_dst, 2);

> +       ret = _ring_mc_dequeue_bulk(r, cur_dst, 2);

>         cur_dst += 2;

>         if (ret != 0) {

>                 LOG_ERR("mc_deq for 2 obj failed\n");

>                 goto fail;

>         }

>         printf("dequeue MAX_BULK objs\n");

> -       ret = odph_ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);

> +       ret = _ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);

>         cur_dst += MAX_BULK;

>         if (ret != 0) {

>                 LOG_ERR("mc_deq for %d obj failed\n", MAX_BULK);

> @@ -191,30 +200,30 @@ static int test_ring_basic(odph_ring_t *r)

>         }

>

>         printf("test watermark and default bulk enqueue / dequeue\n");

> -       odph_ring_set_water_mark(r, 20);

> +       _ring_set_water_mark(r, 20);

>         num_elems = 16;

>

>         cur_src = src;

>         cur_dst = dst;

>

> -       ret = odph_ring_mp_enqueue_bulk(r, cur_src, num_elems);

> +       ret = _ring_mp_enqueue_bulk(r, cur_src, num_elems);

>         cur_src += num_elems;

>         if (ret != 0) {

>                 LOG_ERR("Cannot enqueue\n");

>                 goto fail;

>         }

> -       ret = odph_ring_mp_enqueue_bulk(r, cur_src, num_elems);

> +       ret = _ring_mp_enqueue_bulk(r, cur_src, num_elems);

>         if (ret != -EDQUOT) {

>                 LOG_ERR("Watermark not exceeded\n");

>                 goto fail;

>         }

> -       ret = odph_ring_mc_dequeue_bulk(r, cur_dst, num_elems);

> +       ret = _ring_mc_dequeue_bulk(r, cur_dst, num_elems);

>         cur_dst += num_elems;

>         if (ret != 0) {

>                 LOG_ERR("Cannot dequeue\n");

>                 goto fail;

>         }

> -       ret = odph_ring_mc_dequeue_bulk(r, cur_dst, num_elems);

> +       ret = _ring_mc_dequeue_bulk(r, cur_dst, num_elems);

>         cur_dst += num_elems;

>         if (ret != 0) {

>                 LOG_ERR("Cannot dequeue2\n");

> @@ -241,7 +250,7 @@ fail:

>  }

>

>  /* global shared ring used for stress testing */

> -static odph_ring_t *r_stress;

> +static _ring_t *r_stress;

>

>  /* Stress func for Multi producer only */

>  static int producer_fn(void)

> @@ -251,7 +260,7 @@ static int producer_fn(void)

>         void **src = NULL;

>

>         /* alloc dummy object pointers */

> -       src = malloc(MAX_BULK*2*sizeof(void *));

> +       src = malloc(MAX_BULK * 2 * sizeof(void *));

>         if (src == NULL) {

>                 LOG_ERR("failed to allocate producer memory.\n");

>                 return -1;

> @@ -260,7 +269,7 @@ static int producer_fn(void)

>                 src[i] = (void *)(unsigned long)i;

>

>         do {

> -               i = odph_ring_mp_enqueue_bulk(r_stress, src, MAX_BULK);

> +               i = _ring_mp_enqueue_bulk(r_stress, src, MAX_BULK);

>                 if (i == 0) {

>                         free(src);

>                         return 0;

> @@ -275,14 +284,14 @@ static int consumer_fn(void)

>         void **src = NULL;

>

>         /* alloc dummy object pointers */

> -       src = malloc(MAX_BULK*2*sizeof(void *));

> +       src = malloc(MAX_BULK * 2 * sizeof(void *));

>         if (src == NULL) {

>                 LOG_ERR("failed to allocate consumer memory.\n");

>                 return -1;

>         }

>

>         do {

> -               i = odph_ring_mc_dequeue_bulk(r_stress, src, MAX_BULK);

> +               i = _ring_mc_dequeue_bulk(r_stress, src, MAX_BULK);

>                 if (i == 0) {

>                         for (i = 0; i < MAX_BULK; i++) {

>                                 if (src[i] != (void *)(unsigned long)i) {

> @@ -298,7 +307,6 @@ static int consumer_fn(void)

>         } while (1);

>  }

>

> -

>  /*

>   * Note : make sure that both enqueue and dequeue

>   * operation starts at same time so to avoid data corruption

> @@ -319,24 +327,22 @@ typedef enum {

>  static void test_ring_stress(stress_type_t type)

>  {

>         int thr;

> +

>         thr = odp_thread_id();

>

>         switch (type) {

>         case one_enq_one_deq:

> -

>                 if (thr == 1)

>                         producer_fn();

>                 if (thr == 2)

>                         consumer_fn();

>                 break;

> -

>         case multi_enq_multi_deq:

> -               if (thr%2 == 0)

> +               if (thr % 2 == 0)

>                         producer_fn();

>                 else

>                         consumer_fn();

>                 break;

> -

>         case one_deq_rest_enq:

>         case one_enq_rest_deq:/*TBD*/

>         default:

> @@ -344,19 +350,12 @@ static void test_ring_stress(stress_type_t type)

>         }

>  }

>

> -/* local struct for ring_thread argument */

> -typedef struct {

> -       pthrd_arg thrdarg;

> -       int stress_type;

> -} ring_arg_t;

> -

> -

>  static void *test_ring(void *arg)

>  {

>         ring_arg_t *parg = (ring_arg_t *)arg;

>         int thr;

> -       char ring_name[ODPH_RING_NAMESIZE];

> -       odph_ring_t *r;

> +       char ring_name[_RING_NAMESIZE];

> +       _ring_t *r;

>         int result = 0;

>

>         thr = odp_thread_id();

> @@ -367,16 +366,16 @@ static void *test_ring(void *arg)

>         case ODP_RING_TEST_BASIC:

>                 snprintf(ring_name, sizeof(ring_name), "test_ring_%i",

> thr);

>

> -               r = odph_ring_create(ring_name, RING_SIZE,

> -                                   0 /* not used, alignement

> -                                        taken care inside func : todo */);

> +               r = _ring_create(ring_name, RING_SIZE,

> +                                0 /* not used, alignement

> +                                     taken care inside func : todo */);

>                 if (r == NULL) {

>                         LOG_ERR("ring create failed\n");

>                         result = -1;

>                         break;

>                 }

>                 /* lookup ring from its name */

> -               if (odph_ring_lookup(ring_name) != r) {

> +               if (_ring_lookup(ring_name) != r) {

>                         LOG_ERR("ring lookup failed\n");

>                         result = -1;

>                         break;

> @@ -388,16 +387,16 @@ static void *test_ring(void *arg)

>                         result = -1;

>                 }

>

> -               /* dump ring stats */

> -               odph_ring_list_dump();

> +               if (result)

> +                       _ring_list_dump();

>

>                 break;

>

>         case ODP_RING_TEST_STRESS:

>                 test_ring_stress(parg->stress_type);

>

> -               /* dump ring stats */

> -               odph_ring_list_dump();

> +               if (result)

> +                       _ring_list_dump();

>                 break;

>

>         default:

> @@ -417,54 +416,67 @@ static void *test_ring(void *arg)

>         return parg;

>  }

>

> -

> -int main(int argc __attribute__((__unused__)),

> -        char *argv[] __attribute__((__unused__)))

> +int main(int argc TEST_UNUSED, char *argv[] TEST_UNUSED)

>  {

>         ring_arg_t rarg;

> +       odph_linux_pthread_t thread_tbl[MAX_WORKERS];

> +       odp_cpumask_t cpu_mask;

> +       int num_workers;

> +       char ring_name[_RING_NAMESIZE];

>

> -       if (odp_test_global_init() != 0)

> -               return -1;

> +       if (odp_init_global(NULL, NULL)) {

> +               LOG_ERR("Error: ODP global init failed.\n");

> +               exit(EXIT_FAILURE);

> +       }

>

> -       odp_print_system_info();

> +       if (odp_init_local(ODP_THREAD_CONTROL)) {

> +               LOG_ERR("Error: ODP local init failed.\n");

> +               exit(EXIT_FAILURE);

> +       }

>

> -       odph_ring_tailq_init();

> +       _ring_tailq_init();

>

> -       rarg.thrdarg.numthrds = odp_cpu_count();

> +       num_workers = odp_cpumask_default_worker(&cpu_mask, MAX_WORKERS);

> +       rarg.thrdarg.numthrds = rarg.thrdarg.numthrds;

>

> -#ifdef RING_TEST_BASIC

>         rarg.thrdarg.testcase = ODP_RING_TEST_BASIC;

> -#else

> +       printf("starting stess test type : %d..\n", rarg.stress_type);

> +       odph_linux_pthread_create(&thread_tbl[0], &cpu_mask,

> +                                 test_ring, (void *)&rarg);

> +       odph_linux_pthread_join(thread_tbl, num_workers);

> +

>         rarg.thrdarg.testcase = ODP_RING_TEST_STRESS;

>         rarg.stress_type = one_enq_one_deq;

> -/*     rarg.stress_type = multi_enq_multi_deq;*/

> -       char ring_name[ODPH_RING_NAMESIZE];

>

>         printf("starting stess test type : %d..\n", rarg.stress_type);

> -       /* create a ring */

>         snprintf(ring_name, sizeof(ring_name), "test_ring_stress");

> -

> -       r_stress = odph_ring_create(ring_name, RING_SIZE,

> -                               0 /* not used, alignement

> -                                taken care inside func : todo */);

> +       r_stress = _ring_create(ring_name, RING_SIZE,

> +                               0/* not used, alignement

> +                                   taken care inside func : todo */);

>         if (r_stress == NULL) {

>                 LOG_ERR("ring create failed\n");

>                 goto fail;

>         }

>         /* lookup ring from its name */

> -       if (odph_ring_lookup(ring_name) != r_stress) {

> +       if (_ring_lookup(ring_name) != r_stress) {

>                 LOG_ERR("ring lookup failed\n");

>                 goto fail;

>         }

> -#endif

> -       odp_test_thread_create(test_ring, (pthrd_arg *)&rarg);

>

> -#ifndef RING_TEST_BASIC

> +       odph_linux_pthread_create(&thread_tbl[0], &cpu_mask,

> +                                 test_ring, (void *)&rarg);

> +       odph_linux_pthread_join(thread_tbl, num_workers);

> +

>  fail:

> -#endif

> +       if (odp_term_local()) {

> +               LOG_ERR("Error: ODP local term failed.\n");

> +               exit(EXIT_FAILURE);

> +       }

>

> -       odp_test_thread_exit(&rarg.thrdarg);

> +       if (odp_term_global()) {

> +               LOG_ERR("Error: ODP global term failed.\n");

> +               exit(EXIT_FAILURE);

> +       }

>

>         return 0;

>  }

> -

> diff --git a/test/Makefile.am b/test/Makefile.am

> index 2ba8008..4a75364 100644

> --- a/test/Makefile.am

> +++ b/test/Makefile.am

> @@ -1,4 +1,4 @@

> -SUBDIRS = api_test performance miscellaneous

> +SUBDIRS = performance miscellaneous

>

>  if cunit_support

>      SUBDIRS += validation

> diff --git a/test/api_test/.gitignore b/test/api_test/.gitignore

> deleted file mode 100644

> index 950f443..0000000

> --- a/test/api_test/.gitignore

> +++ /dev/null

> @@ -1,2 +0,0 @@

> -odp_ring

> -odp_shm

> diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am

> deleted file mode 100644

> index fcdba48..0000000

> --- a/test/api_test/Makefile.am

> +++ /dev/null

> @@ -1,13 +0,0 @@

> -include $(top_srcdir)/test/Makefile.inc

> -

> -bin_PROGRAMS = odp_ring$(EXEEXT)

> -

> -odp_ring_CFLAGS = $(AM_CFLAGS)

> -

> -odp_ring_LDFLAGS = $(AM_LDFLAGS) -static

> -

> -noinst_HEADERS = \

> -                 $(top_srcdir)/test/api_test/odp_common.h \

> -                 $(top_srcdir)/test/test_debug.h

> -

> -dist_odp_ring_SOURCES = odp_ring_test.c odp_common.c

> diff --git a/test/api_test/odp_common.c b/test/api_test/odp_common.c

> deleted file mode 100644

> index 681d915..0000000

> --- a/test/api_test/odp_common.c

> +++ /dev/null

> @@ -1,91 +0,0 @@

> -/* Copyright (c) 2013, Linaro Limited

> - * All rights reserved.

> - *

> - * SPDX-License-Identifier:     BSD-3-Clause

> - */

> -

> -/**

> - * @file

> - *

> - * ODP test application common

> - */

> -

> -#include <string.h>

> -#include <odp.h>

> -#include <odp/helper/linux.h>

> -#include <odp_common.h>

> -#include <test_debug.h>

> -

> -#define MAX_WORKERS           32            /**< Max worker threads */

> -

> -/* Globals */

> -static odph_linux_pthread_t thread_tbl[MAX_WORKERS]; /**< worker threads

> table*/

> -static int num_workers;                                    /**< number of

> workers      */

> -

> -/**

> - * Print system information

> - */

> -void odp_print_system_info(void)

> -{

> -       odp_cpumask_t cpumask;

> -       char str[ODP_CPUMASK_STR_SIZE];

> -

> -       memset(str, 1, sizeof(str));

> -

> -       odp_cpumask_zero(&cpumask);

> -

> -       odp_cpumask_from_str(&cpumask, "0x1");

> -       (void)odp_cpumask_to_str(&cpumask, str, sizeof(str));

> -

> -       printf("\n");

> -       printf("ODP system info\n");

> -       printf("---------------\n");

> -       printf("ODP API version: %s\n",        odp_version_api_str());

> -       printf("CPU model:       %s\n",        odp_sys_cpu_model_str());

> -       printf("CPU freq (hz):   %"PRIu64"\n", odp_sys_cpu_hz());

> -       printf("Cache line size: %i\n",        odp_sys_cache_line_size());

> -       printf("CPU count:       %i\n",        odp_cpu_count());

> -       printf("CPU mask:        %s\n",        str);

> -

> -       printf("\n");

> -}

> -

> -/** test init globals and call odp_init_global() */

> -int odp_test_global_init(void)

> -{

> -       memset(thread_tbl, 0, sizeof(thread_tbl));

> -

> -       if (odp_init_global(NULL, NULL)) {

> -               LOG_ERR("ODP global init failed.\n");

> -               return -1;

> -       }

> -

> -       num_workers = odp_cpu_count();

> -       /* force to max CPU count */

> -       if (num_workers > MAX_WORKERS)

> -               num_workers = MAX_WORKERS;

> -

> -       return 0;

> -}

> -

> -/** create test thread */

> -int odp_test_thread_create(void *func_ptr(void *), pthrd_arg *arg)

> -{

> -       odp_cpumask_t cpumask;

> -

> -       /* Create and init additional threads */

> -       odp_cpumask_default_worker(&cpumask, arg->numthrds);

> -       odph_linux_pthread_create(thread_tbl, &cpumask, func_ptr,

> -                                 (void *)arg);

> -

> -       return 0;

> -}

> -

> -/** exit from test thread */

> -int odp_test_thread_exit(pthrd_arg *arg)

> -{

> -       /* Wait for other threads to exit */

> -       odph_linux_pthread_join(thread_tbl, arg->numthrds);

> -

> -       return 0;

> -}

> diff --git a/test/api_test/odp_common.h b/test/api_test/odp_common.h

> deleted file mode 100644

> index f321b6b..0000000

> --- a/test/api_test/odp_common.h

> +++ /dev/null

> @@ -1,42 +0,0 @@

> -/* Copyright (c) 2013, Linaro Limited

> - * All rights reserved.

> - *

> - * SPDX-License-Identifier:     BSD-3-Clause

> - */

> -

> -/**

> - * @file

> - *

> - * ODP test application common headers

> - */

> -

> -#ifndef ODP_COMMON_H

> -#define ODP_COMMON_H

> -

> -#define MAX_WORKERS 32 /**< Maximum number of work threads */

> -

> -/** types of tests */

> -typedef enum {

> -       ODP_ATOMIC_TEST = 0,

> -       ODP_SHM_TEST,

> -       ODP_RING_TEST_BASIC,

> -       ODP_RING_TEST_STRESS,

> -       ODP_TIMER_PING_TEST,

> -       ODP_MAX_TEST

> -} odp_test_case_e;

> -

> -/**

> - * Thread argument

> - */

> -typedef struct {

> -       int testcase; /**< specifies which set of API's to exercise */

> -       int numthrds; /**< no of pthreads to create */

> -} pthrd_arg;

> -

> -extern void odp_print_system_info(void);

> -extern int odp_test_global_init(void);

> -/** create thread fro start_routine function */

> -extern int odp_test_thread_create(void *(*start_routine) (void *),

> pthrd_arg *);

> -extern int odp_test_thread_exit(pthrd_arg *);

> -

> -#endif /* ODP_COMMON_H */

> --

> 1.9.1

>

> _______________________________________________

> lng-odp mailing list

> lng-odp@lists.linaro.org

> https://lists.linaro.org/mailman/listinfo/lng-odp

>




-- 
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
diff mbox

Patch

diff --git a/configure.ac b/configure.ac
index 00a1415..bfaa3be 100644
--- a/configure.ac
+++ b/configure.ac
@@ -345,7 +345,6 @@  AC_CONFIG_FILES([Makefile
 		 pkgconfig/libodphelper.pc
 		 scripts/Makefile
 		 test/Makefile
-		 test/api_test/Makefile
 		 test/performance/Makefile
 		 test/validation/Makefile
 		 test/validation/buffer/Makefile
diff --git a/helper/Makefile.am b/helper/Makefile.am
index 9caaba0..0f4c09b 100644
--- a/helper/Makefile.am
+++ b/helper/Makefile.am
@@ -8,7 +8,6 @@  AM_CFLAGS += -I$(top_srcdir)/include
 
 helperincludedir = $(includedir)/odp/helper/
 helperinclude_HEADERS = \
-		  $(srcdir)/include/odp/helper/ring.h \
 		  $(srcdir)/include/odp/helper/linux.h \
 		  $(srcdir)/include/odp/helper/chksum.h\
 		  $(srcdir)/include/odp/helper/eth.h\
@@ -29,7 +28,6 @@  noinst_HEADERS = \
 
 __LIB__libodphelper_la_SOURCES = \
 					linux.c \
-					ring.c \
 					hashtable.c \
 					lineartable.c
 
diff --git a/helper/test/Makefile.am b/helper/test/Makefile.am
index 760dac1..a9c3016 100644
--- a/helper/test/Makefile.am
+++ b/helper/test/Makefile.am
@@ -1,6 +1,7 @@ 
 include $(top_srcdir)/test/Makefile.inc
 
 AM_CFLAGS += -I$(srcdir)/common
+AM_CFLAGS += -I$(top_srcdir)/test/validation/common
 AM_LDFLAGS += -static
 
 TESTS_ENVIRONMENT += TEST_DIR=${builddir}
@@ -28,5 +29,5 @@  dist_thread_SOURCES = thread.c
 thread_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la
 dist_process_SOURCES = process.c
 process_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la
-odph_pause_SOURCES = pause.c
-dist_odp_table_SOURCES = table.c
+dist_pause_SOURCES = pause.c
+dist_table_SOURCES = table.c
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index f71c0f2..1ed2ed7 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -91,6 +91,7 @@  noinst_HEADERS = \
 		  ${srcdir}/include/odp_packet_internal.h \
 		  ${srcdir}/include/odp_packet_io_internal.h \
 		  ${srcdir}/include/odp_packet_io_queue.h \
+		  ${srcdir}/include/odp_packet_io_ring_internal.h \
 		  ${srcdir}/include/odp_packet_netmap.h \
 		  ${srcdir}/include/odp_packet_socket.h \
 		  ${srcdir}/include/odp_pool_internal.h \
@@ -121,6 +122,7 @@  __LIB__libodp_la_SOURCES = \
 			   pktio/netmap.c \
 			   pktio/socket.c \
 			   pktio/socket_mmap.c \
+			   pktio/ring.c \
 			   odp_pool.c \
 			   odp_queue.c \
 			   odp_rwlock.c \
diff --git a/helper/include/odp/helper/ring.h b/platform/linux-generic/include/odp_packet_io_ring_internal.h
similarity index 87%
rename from helper/include/odp/helper/ring.h
rename to platform/linux-generic/include/odp_packet_io_ring_internal.h
index 541a466..f97c026 100644
--- a/helper/include/odp/helper/ring.h
+++ b/platform/linux-generic/include/odp_packet_io_ring_internal.h
@@ -89,29 +89,28 @@ 
  *
  */
 
-#ifndef ODPH_RING_H_
-#define ODPH_RING_H_
+#ifndef _RING_H_
+#define _RING_H_
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-
 #include <odp/std_types.h>
 #include <odp/hints.h>
 #include <odp/atomic.h>
 #include <errno.h>
 #include <sys/queue.h>
+#include <odp_debug_internal.h>
 
-enum odph_ring_queue_behavior {
-	ODPH_RING_QUEUE_FIXED = 0, /**< Enq/Deq a fixed number
+enum _ring_queue_behavior {
+	_RING_QUEUE_FIXED = 0, /**< Enq/Deq a fixed number
 				of items from a ring */
-	ODPH_RING_QUEUE_VARIABLE   /**< Enq/Deq as many items
+	_RING_QUEUE_VARIABLE   /**< Enq/Deq as many items
 				a possible from ring */
 };
 
-
-#define ODPH_RING_NAMESIZE 32 /**< The maximum length of a ring name. */
+#define _RING_NAMESIZE 32 /**< The maximum length of a ring name. */
 
 /**
  * An ODP ring structure.
@@ -123,12 +122,12 @@  enum odph_ring_queue_behavior {
  * values in a modulo-32bit base: that's why the overflow of the indexes is not
  * a problem.
  */
-typedef struct odph_ring {
+typedef struct _ring {
 	/** @private Next in list. */
-	TAILQ_ENTRY(odph_ring) next;
+	TAILQ_ENTRY(_ring) next;
 
 	/** @private Name of the ring. */
-	char name[ODPH_RING_NAMESIZE];
+	char name[_RING_NAMESIZE];
 	/** @private Flags supplied at creation. */
 	int flags;
 
@@ -153,21 +152,21 @@  typedef struct odph_ring {
 
 	/** @private Memory space of ring starts here. */
 	void *ring[0] ODP_ALIGNED_CACHE;
-} odph_ring_t;
+} _ring_t;
 
 /* The default enqueue is "single-producer".*/
-#define ODPH_RING_F_SP_ENQ (1 << 0)
+#define _RING_F_SP_ENQ (1 << 0)
 /* The default dequeue is "single-consumer".*/
-#define ODPH_RING_F_SC_DEQ (1 << 1)
+#define _RING_F_SC_DEQ (1 << 1)
 /* If set - ring is visible from different processes.
  * Default is thread visible.*/
-#define ODPH_RING_SHM_PROC (1 << 2)
+#define _RING_SHM_PROC (1 << 2)
  /* Do not link ring to linked list. */
-#define ODPH_RING_NO_LIST  (1 << 3)
+#define _RING_NO_LIST  (1 << 3)
 /* Quota exceed for burst ops */
-#define ODPH_RING_QUOT_EXCEED (1 << 31)
+#define _RING_QUOT_EXCEED (1 << 31)
 /* Ring size mask */
-#define ODPH_RING_SZ_MASK  (unsigned)(0x0fffffff)
+#define _RING_SZ_MASK  (unsigned)(0x0fffffff)
 
 /**
  * Create a new ring named *name* in memory.
@@ -198,9 +197,8 @@  typedef struct odph_ring {
  *    - EEXIST - a memzone with the same name already exists
  *    - ENOMEM - no appropriate memory area found in which to create memzone
  */
-odph_ring_t *odph_ring_create(const char *name, unsigned count,
-			    unsigned flags);
-
+_ring_t *_ring_create(const char *name, unsigned count,
+		      unsigned flags);
 
 /**
  * Change the high water mark.
@@ -217,14 +215,14 @@  odph_ring_t *odph_ring_create(const char *name, unsigned count,
  * @return 0: Success; water mark changed.
  *		-EINVAL: Invalid water mark value.
  */
-int odph_ring_set_water_mark(odph_ring_t *r, unsigned count);
+int _ring_set_water_mark(_ring_t *r, unsigned count);
 
 /**
  * Dump the status of the ring to the console.
  *
  * @param r A pointer to the ring structure.
  */
-void odph_ring_dump(const odph_ring_t *r);
+void _ring_dump(const _ring_t *r);
 
 /**
  * Enqueue several objects on the ring (multi-producers safe).
@@ -251,9 +249,9 @@  void odph_ring_dump(const odph_ring_t *r);
  *   if behavior = ODP_RING_QUEUE_VARIABLE
  *   - n: Actual number of objects enqueued.
  */
-int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,
-			      unsigned n,
-			      enum odph_ring_queue_behavior behavior);
+int ___ring_mp_do_enqueue(_ring_t *r, void * const *obj_table,
+			  unsigned n,
+			  enum _ring_queue_behavior behavior);
 
 /**
  * Enqueue several objects on a ring (NOT multi-producers safe).
@@ -277,9 +275,9 @@  int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,
  *   if behavior = ODP_RING_QUEUE_VARIABLE
  *   - n: Actual number of objects enqueued.
  */
-int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,
-			      unsigned n,
-			      enum odph_ring_queue_behavior behavior);
+int ___ring_sp_do_enqueue(_ring_t *r, void * const *obj_table,
+			  unsigned n,
+			  enum _ring_queue_behavior behavior);
 
 /**
  * Dequeue several objects from a ring (multi-consumers safe). When
@@ -308,9 +306,9 @@  int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,
  *   - n: Actual number of objects dequeued.
  */
 
-int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,
-			      unsigned n,
-			      enum odph_ring_queue_behavior behavior);
+int ___ring_mc_do_dequeue(_ring_t *r, void **obj_table,
+			  unsigned n,
+			  enum _ring_queue_behavior behavior);
 
 /**
  * Dequeue several objects from a ring (NOT multi-consumers safe).
@@ -335,9 +333,9 @@  int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,
  *   if behavior = ODP_RING_QUEUE_VARIABLE
  *   - n: Actual number of objects dequeued.
  */
-int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,
-			      unsigned n,
-			      enum odph_ring_queue_behavior behavior);
+int ___ring_sc_do_dequeue(_ring_t *r, void **obj_table,
+			  unsigned n,
+			  enum _ring_queue_behavior behavior);
 
 /**
  * Enqueue several objects on the ring (multi-producers safe).
@@ -357,8 +355,8 @@  int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,
  *     high water mark is exceeded.
  *   - -ENOBUFS: Not enough room in the ring to enqueue, no object is enqueued.
  */
-int odph_ring_mp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,
-			      unsigned n);
+int _ring_mp_enqueue_bulk(_ring_t *r, void * const *obj_table,
+			  unsigned n);
 
 /**
  * Enqueue several objects on a ring (NOT multi-producers safe).
@@ -375,8 +373,8 @@  int odph_ring_mp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,
  *     high water mark is exceeded.
  *   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.
  */
-int odph_ring_sp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,
-			      unsigned n);
+int _ring_sp_enqueue_bulk(_ring_t *r, void * const *obj_table,
+			  unsigned n);
 
 /**
  * Dequeue several objects from a ring (multi-consumers safe).
@@ -395,7 +393,7 @@  int odph_ring_sp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,
  *   - -ENOENT: Not enough entries in the ring to dequeue; no object is
  *     dequeued.
  */
-int odph_ring_mc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned n);
+int _ring_mc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n);
 
 /**
  * Dequeue several objects from a ring (NOT multi-consumers safe).
@@ -412,7 +410,7 @@  int odph_ring_mc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned n);
  *   - -ENOENT: Not enough entries in the ring to dequeue; no object is
  *     dequeued.
  */
-int odph_ring_sc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned n);
+int _ring_sc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n);
 
 /**
  * Test if a ring is full.
@@ -423,7 +421,7 @@  int odph_ring_sc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned n);
  *   - 1: The ring is full.
  *   - 0: The ring is not full.
  */
-int odph_ring_full(const odph_ring_t *r);
+int _ring_full(const _ring_t *r);
 
 /**
  * Test if a ring is empty.
@@ -434,7 +432,7 @@  int odph_ring_full(const odph_ring_t *r);
  *   - 1: The ring is empty.
  *   - 0: The ring is not empty.
  */
-int odph_ring_empty(const odph_ring_t *r);
+int _ring_empty(const _ring_t *r);
 
 /**
  * Return the number of entries in a ring.
@@ -444,7 +442,7 @@  int odph_ring_empty(const odph_ring_t *r);
  * @return
  *   The number of entries in the ring.
  */
-unsigned odph_ring_count(const odph_ring_t *r);
+unsigned _ring_count(const _ring_t *r);
 
 /**
  * Return the number of free entries in a ring.
@@ -454,14 +452,14 @@  unsigned odph_ring_count(const odph_ring_t *r);
  * @return
  *   The number of free entries in the ring.
  */
-unsigned odph_ring_free_count(const odph_ring_t *r);
+unsigned _ring_free_count(const _ring_t *r);
 
 /**
  * search ring by name
  * @param name	ring name to search
  * @return	pointer to ring otherwise NULL
  */
-odph_ring_t *odph_ring_lookup(const char *name);
+_ring_t *_ring_lookup(const char *name);
 
 /**
  * Enqueue several objects on the ring (multi-producers safe).
@@ -478,8 +476,8 @@  odph_ring_t *odph_ring_lookup(const char *name);
  * @return
  *   - n: Actual number of objects enqueued.
  */
-int odph_ring_mp_enqueue_burst(odph_ring_t *r, void * const *obj_table,
-			       unsigned n);
+int _ring_mp_enqueue_burst(_ring_t *r, void * const *obj_table,
+			   unsigned n);
 
 /**
  * Enqueue several objects on a ring (NOT multi-producers safe).
@@ -493,8 +491,8 @@  int odph_ring_mp_enqueue_burst(odph_ring_t *r, void * const *obj_table,
  * @return
  *   - n: Actual number of objects enqueued.
  */
-int odph_ring_sp_enqueue_burst(odph_ring_t *r, void * const *obj_table,
-			       unsigned n);
+int _ring_sp_enqueue_burst(_ring_t *r, void * const *obj_table,
+			   unsigned n);
 /**
  * Enqueue several objects on a ring.
  *
@@ -511,8 +509,8 @@  int odph_ring_sp_enqueue_burst(odph_ring_t *r, void * const *obj_table,
  * @return
  *   - n: Actual number of objects enqueued.
  */
-int odph_ring_enqueue_burst(odph_ring_t *r, void * const *obj_table,
-			    unsigned n);
+int _ring_enqueue_burst(_ring_t *r, void * const *obj_table,
+			unsigned n);
 
 /**
  * Dequeue several objects from a ring (multi-consumers safe). When the request
@@ -531,7 +529,7 @@  int odph_ring_enqueue_burst(odph_ring_t *r, void * const *obj_table,
  * @return
  *   - n: Actual number of objects dequeued, 0 if ring is empty
  */
-int odph_ring_mc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n);
+int _ring_mc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n);
 
 /**
  * Dequeue several objects from a ring (NOT multi-consumers safe).When the
@@ -547,7 +545,7 @@  int odph_ring_mc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n);
  * @return
  *   - n: Actual number of objects dequeued, 0 if ring is empty
  */
-int odph_ring_sc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n);
+int _ring_sc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n);
 
 /**
  * Dequeue multiple objects from a ring up to a maximum number.
@@ -565,17 +563,17 @@  int odph_ring_sc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n);
  * @return
  *   - Number of objects dequeued, or a negative error code on error
  */
-int odph_ring_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n);
+int _ring_dequeue_burst(_ring_t *r, void **obj_table, unsigned n);
 
 /**
  * dump the status of all rings on the console
  */
-void odph_ring_list_dump(void);
+void _ring_list_dump(void);
 
 /**
  * initialise ring tailq
  */
-void odph_ring_tailq_init(void);
+void _ring_tailq_init(void);
 
 #ifdef __cplusplus
 }
diff --git a/platform/linux-generic/m4/configure.m4 b/platform/linux-generic/m4/configure.m4
index df6dc64..6bb159f 100644
--- a/platform/linux-generic/m4/configure.m4
+++ b/platform/linux-generic/m4/configure.m4
@@ -23,4 +23,5 @@  m4_include([platform/linux-generic/m4/odp_pcap.m4])
 
 AC_CONFIG_FILES([platform/linux-generic/Makefile
 		 platform/linux-generic/test/Makefile
-		 platform/linux-generic/test/pktio/Makefile])
+		 platform/linux-generic/test/pktio/Makefile
+		 platform/linux-generic/test/ring/Makefile])
diff --git a/helper/ring.c b/platform/linux-generic/pktio/ring.c
similarity index 71%
rename from helper/ring.c
rename to platform/linux-generic/pktio/ring.c
index 6b233cc..9af11b7 100644
--- a/helper/ring.c
+++ b/platform/linux-generic/pktio/ring.c
@@ -78,9 +78,9 @@ 
 #include <string.h>
 #include "odph_debug.h"
 #include <odp/rwlock.h>
-#include <odp/helper/ring.h>
+#include <odp_packet_io_ring_internal.h>
 
-static TAILQ_HEAD(, odph_ring) odp_ring_list;
+static TAILQ_HEAD(, _ring) odp_ring_list;
 
 #define RING_VAL_IS_POWER_2(x) ((((x) - 1) & (x)) == 0)
 
@@ -93,9 +93,9 @@  static TAILQ_HEAD(, odph_ring) odp_ring_list;
 	if (odp_likely(idx + n < size)) { \
 		for (i = 0; i < (n & ((~(unsigned)0x3))); i += 4, idx += 4) { \
 			r->ring[idx] = obj_table[i]; \
-			r->ring[idx+1] = obj_table[i+1]; \
-			r->ring[idx+2] = obj_table[i+2]; \
-			r->ring[idx+3] = obj_table[i+3]; \
+			r->ring[idx + 1] = obj_table[i + 1]; \
+			r->ring[idx + 2] = obj_table[i + 2]; \
+			r->ring[idx + 3] = obj_table[i + 3]; \
 		} \
 		switch (n & 0x3) { \
 		case 3: \
@@ -122,9 +122,9 @@  static TAILQ_HEAD(, odph_ring) odp_ring_list;
 	if (odp_likely(idx + n < size)) { \
 		for (i = 0; i < (n & (~(unsigned)0x3)); i += 4, idx += 4) {\
 			obj_table[i] = r->ring[idx]; \
-			obj_table[i+1] = r->ring[idx+1]; \
-			obj_table[i+2] = r->ring[idx+2]; \
-			obj_table[i+3] = r->ring[idx+3]; \
+			obj_table[i + 1] = r->ring[idx + 1]; \
+			obj_table[i + 2] = r->ring[idx + 2]; \
+			obj_table[i + 3] = r->ring[idx + 3]; \
 		} \
 		switch (n & 0x3) { \
 		case 3: \
@@ -145,36 +145,37 @@  static TAILQ_HEAD(, odph_ring) odp_ring_list;
 static odp_rwlock_t	qlock;	/* rings tailq lock */
 
 /* init tailq_ring */
-void odph_ring_tailq_init(void)
+void _ring_tailq_init(void)
 {
 	TAILQ_INIT(&odp_ring_list);
 	odp_rwlock_init(&qlock);
 }
 
 /* create the ring */
-odph_ring_t *
-odph_ring_create(const char *name, unsigned count, unsigned flags)
+_ring_t *
+_ring_create(const char *name, unsigned count, unsigned flags)
 {
-	char ring_name[ODPH_RING_NAMESIZE];
-	odph_ring_t *r;
+	char ring_name[_RING_NAMESIZE];
+	_ring_t *r;
 	size_t ring_size;
 	uint32_t shm_flag;
 	odp_shm_t shm;
 
-	if (flags & ODPH_RING_SHM_PROC)
+	if (flags & _RING_SHM_PROC)
 		shm_flag = ODP_SHM_PROC;
 	else
 		shm_flag = 0;
 
 	/* count must be a power of 2 */
-	if (!RING_VAL_IS_POWER_2(count) || (count > ODPH_RING_SZ_MASK)) {
-		ODPH_ERR("Requested size is invalid, must be power of 2, and do not exceed the size limit %u\n",
-			 ODPH_RING_SZ_MASK);
+	if (!RING_VAL_IS_POWER_2(count) || (count > _RING_SZ_MASK)) {
+		ODPH_ERR("Requested size is invalid, must be power of 2,"
+			 "and do not exceed the size limit %u\n",
+			 _RING_SZ_MASK);
 		return NULL;
 	}
 
 	snprintf(ring_name, sizeof(ring_name), "%s", name);
-	ring_size = count*sizeof(void *)+sizeof(odph_ring_t);
+	ring_size = count * sizeof(void *) + sizeof(_ring_t);
 
 	odp_rwlock_write_lock(&qlock);
 	/* reserve a memory zone for this ring.*/
@@ -188,18 +189,18 @@  odph_ring_create(const char *name, unsigned count, unsigned flags)
 		snprintf(r->name, sizeof(r->name), "%s", name);
 		r->flags = flags;
 		r->prod.watermark = count;
-		r->prod.sp_enqueue = !!(flags & ODPH_RING_F_SP_ENQ);
-		r->cons.sc_dequeue = !!(flags & ODPH_RING_F_SC_DEQ);
+		r->prod.sp_enqueue = !!(flags & _RING_F_SP_ENQ);
+		r->cons.sc_dequeue = !!(flags & _RING_F_SC_DEQ);
 		r->prod.size = count;
 		r->cons.size = count;
-		r->prod.mask = count-1;
-		r->cons.mask = count-1;
+		r->prod.mask = count - 1;
+		r->cons.mask = count - 1;
 		r->prod.head = 0;
 		r->cons.head = 0;
 		r->prod.tail = 0;
 		r->cons.tail = 0;
 
-		if (!(flags & ODPH_RING_NO_LIST))
+		if (!(flags & _RING_NO_LIST))
 			TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
 	} else {
 		ODPH_ERR("Cannot reserve memory\n");
@@ -213,7 +214,7 @@  odph_ring_create(const char *name, unsigned count, unsigned flags)
  * change the high water mark. If *count* is 0, water marking is
  * disabled
  */
-int odph_ring_set_water_mark(odph_ring_t *r, unsigned count)
+int _ring_set_water_mark(_ring_t *r, unsigned count)
 {
 	if (count >= r->prod.size)
 		return -EINVAL;
@@ -229,8 +230,8 @@  int odph_ring_set_water_mark(odph_ring_t *r, unsigned count)
 /**
  * Enqueue several objects on the ring (multi-producers safe).
  */
-int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,
-			 unsigned n, enum odph_ring_queue_behavior behavior)
+int ___ring_mp_do_enqueue(_ring_t *r, void * const *obj_table,
+			  unsigned n, enum _ring_queue_behavior behavior)
 {
 	uint32_t prod_head, prod_next;
 	uint32_t cons_tail, free_entries;
@@ -255,24 +256,22 @@  int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,
 
 		/* check that we have enough room in ring */
 		if (odp_unlikely(n > free_entries)) {
-			if (behavior == ODPH_RING_QUEUE_FIXED) {
+			if (behavior == _RING_QUEUE_FIXED)
 				return -ENOBUFS;
-			} else {
-				/* No free entry available */
-				if (odp_unlikely(free_entries == 0))
-					return 0;
+			/* No free entry available */
+			if (odp_unlikely(free_entries == 0))
+				return 0;
 
-				n = free_entries;
-			}
+			n = free_entries;
 		}
 
 		prod_next = prod_head + n;
 		success = __atomic_compare_exchange_n(&r->prod.head,
-				&prod_head,
-				prod_next,
-				false/*strong*/,
-				__ATOMIC_ACQUIRE,
-				__ATOMIC_RELAXED);
+						      &prod_head,
+						      prod_next,
+						      false/*strong*/,
+						      __ATOMIC_ACQUIRE,
+						      __ATOMIC_RELAXED);
 	} while (odp_unlikely(success == 0));
 
 	/* write entries in ring */
@@ -280,10 +279,10 @@  int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,
 
 	/* if we exceed the watermark */
 	if (odp_unlikely(((mask + 1) - free_entries + n) > r->prod.watermark)) {
-		ret = (behavior == ODPH_RING_QUEUE_FIXED) ? -EDQUOT :
-				(int)(n | ODPH_RING_QUOT_EXCEED);
+		ret = (behavior == _RING_QUEUE_FIXED) ? -EDQUOT :
+				(int)(n | _RING_QUOT_EXCEED);
 	} else {
-		ret = (behavior == ODPH_RING_QUEUE_FIXED) ? 0 : n;
+		ret = (behavior == _RING_QUEUE_FIXED) ? 0 : n;
 	}
 
 	/*
@@ -302,8 +301,8 @@  int __odph_ring_mp_do_enqueue(odph_ring_t *r, void * const *obj_table,
 /**
  * Enqueue several objects on a ring (NOT multi-producers safe).
  */
-int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,
-			     unsigned n, enum odph_ring_queue_behavior behavior)
+int ___ring_sp_do_enqueue(_ring_t *r, void * const *obj_table,
+			  unsigned n, enum _ring_queue_behavior behavior)
 {
 	uint32_t prod_head, cons_tail;
 	uint32_t prod_next, free_entries;
@@ -321,15 +320,13 @@  int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,
 
 	/* check that we have enough room in ring */
 	if (odp_unlikely(n > free_entries)) {
-		if (behavior == ODPH_RING_QUEUE_FIXED) {
+		if (behavior == _RING_QUEUE_FIXED)
 			return -ENOBUFS;
-		} else {
-			/* No free entry available */
-			if (odp_unlikely(free_entries == 0))
-				return 0;
+		/* No free entry available */
+		if (odp_unlikely(free_entries == 0))
+			return 0;
 
-			n = free_entries;
-		}
+		n = free_entries;
 	}
 
 	prod_next = prod_head + n;
@@ -340,10 +337,10 @@  int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,
 
 	/* if we exceed the watermark */
 	if (odp_unlikely(((mask + 1) - free_entries + n) > r->prod.watermark)) {
-		ret = (behavior == ODPH_RING_QUEUE_FIXED) ? -EDQUOT :
-			(int)(n | ODPH_RING_QUOT_EXCEED);
+		ret = (behavior == _RING_QUEUE_FIXED) ? -EDQUOT :
+			(int)(n | _RING_QUOT_EXCEED);
 	} else {
-		ret = (behavior == ODPH_RING_QUEUE_FIXED) ? 0 : n;
+		ret = (behavior == _RING_QUEUE_FIXED) ? 0 : n;
 	}
 
 	/* Release our entries and the memory they refer to */
@@ -356,8 +353,8 @@  int __odph_ring_sp_do_enqueue(odph_ring_t *r, void * const *obj_table,
  * Dequeue several objects from a ring (multi-consumers safe).
  */
 
-int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,
-			 unsigned n, enum odph_ring_queue_behavior behavior)
+int ___ring_mc_do_dequeue(_ring_t *r, void **obj_table,
+			  unsigned n, enum _ring_queue_behavior behavior)
 {
 	uint32_t cons_head, prod_tail;
 	uint32_t cons_next, entries;
@@ -381,23 +378,21 @@  int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,
 
 		/* Set the actual entries for dequeue */
 		if (n > entries) {
-			if (behavior == ODPH_RING_QUEUE_FIXED) {
+			if (behavior == _RING_QUEUE_FIXED)
 				return -ENOENT;
-			} else {
-				if (odp_unlikely(entries == 0))
-					return 0;
+			if (odp_unlikely(entries == 0))
+				return 0;
 
-				n = entries;
-			}
+			n = entries;
 		}
 
 		cons_next = cons_head + n;
 		success = __atomic_compare_exchange_n(&r->cons.head,
-				&cons_head,
-				cons_next,
-				false/*strong*/,
-				__ATOMIC_ACQUIRE,
-				__ATOMIC_RELAXED);
+						      &cons_head,
+						      cons_next,
+						      false/*strong*/,
+						      __ATOMIC_ACQUIRE,
+						      __ATOMIC_RELAXED);
 	} while (odp_unlikely(success == 0));
 
 	/* copy in table */
@@ -414,14 +409,14 @@  int __odph_ring_mc_do_dequeue(odph_ring_t *r, void **obj_table,
 	__atomic_thread_fence(__ATOMIC_RELEASE);
 	r->cons.tail = cons_next;
 
-	return behavior == ODPH_RING_QUEUE_FIXED ? 0 : n;
+	return behavior == _RING_QUEUE_FIXED ? 0 : n;
 }
 
 /**
  * Dequeue several objects from a ring (NOT multi-consumers safe).
  */
-int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,
-			     unsigned n, enum odph_ring_queue_behavior behavior)
+int ___ring_sc_do_dequeue(_ring_t *r, void **obj_table,
+			  unsigned n, enum _ring_queue_behavior behavior)
 {
 	uint32_t cons_head, prod_tail;
 	uint32_t cons_next, entries;
@@ -437,14 +432,12 @@  int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,
 	entries = prod_tail - cons_head;
 
 	if (n > entries) {
-		if (behavior == ODPH_RING_QUEUE_FIXED) {
+		if (behavior == _RING_QUEUE_FIXED)
 			return -ENOENT;
-		} else {
-			if (odp_unlikely(entries == 0))
-				return 0;
+		if (odp_unlikely(entries == 0))
+			return 0;
 
-			n = entries;
-		}
+		n = entries;
 	}
 
 	cons_next = cons_head + n;
@@ -456,127 +449,131 @@  int __odph_ring_sc_do_dequeue(odph_ring_t *r, void **obj_table,
 	DEQUEUE_PTRS();
 
 	r->cons.tail = cons_next;
-	return behavior == ODPH_RING_QUEUE_FIXED ? 0 : n;
+	return behavior == _RING_QUEUE_FIXED ? 0 : n;
 }
 
 /**
  * Enqueue several objects on the ring (multi-producers safe).
  */
-int odph_ring_mp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,
-				unsigned n)
+int _ring_mp_enqueue_bulk(_ring_t *r, void * const *obj_table,
+			  unsigned n)
 {
-	return __odph_ring_mp_do_enqueue(r, obj_table, n,
-					 ODPH_RING_QUEUE_FIXED);
+	return ___ring_mp_do_enqueue(r, obj_table, n,
+					 _RING_QUEUE_FIXED);
 }
 
 /**
  * Enqueue several objects on a ring (NOT multi-producers safe).
  */
-int odph_ring_sp_enqueue_bulk(odph_ring_t *r, void * const *obj_table,
-			     unsigned n)
+int _ring_sp_enqueue_bulk(_ring_t *r, void * const *obj_table,
+			  unsigned n)
 {
-	return __odph_ring_sp_do_enqueue(r, obj_table, n,
-					 ODPH_RING_QUEUE_FIXED);
+	return ___ring_sp_do_enqueue(r, obj_table, n,
+					 _RING_QUEUE_FIXED);
 }
 
 /**
  * Dequeue several objects from a ring (multi-consumers safe).
  */
-int odph_ring_mc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned n)
+int _ring_mc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n)
 {
-	return __odph_ring_mc_do_dequeue(r, obj_table, n,
-					 ODPH_RING_QUEUE_FIXED);
+	return ___ring_mc_do_dequeue(r, obj_table, n,
+					 _RING_QUEUE_FIXED);
 }
 
 /**
  * Dequeue several objects from a ring (NOT multi-consumers safe).
  */
-int odph_ring_sc_dequeue_bulk(odph_ring_t *r, void **obj_table, unsigned n)
+int _ring_sc_dequeue_bulk(_ring_t *r, void **obj_table, unsigned n)
 {
-	return __odph_ring_sc_do_dequeue(r, obj_table, n,
-					 ODPH_RING_QUEUE_FIXED);
+	return ___ring_sc_do_dequeue(r, obj_table, n,
+					 _RING_QUEUE_FIXED);
 }
 
 /**
  * Test if a ring is full.
  */
-int odph_ring_full(const odph_ring_t *r)
+int _ring_full(const _ring_t *r)
 {
 	uint32_t prod_tail = r->prod.tail;
 	uint32_t cons_tail = r->cons.tail;
+
 	return (((cons_tail - prod_tail - 1) & r->prod.mask) == 0);
 }
 
 /**
  * Test if a ring is empty.
  */
-int odph_ring_empty(const odph_ring_t *r)
+int _ring_empty(const _ring_t *r)
 {
 	uint32_t prod_tail = r->prod.tail;
 	uint32_t cons_tail = r->cons.tail;
+
 	return !!(cons_tail == prod_tail);
 }
 
 /**
  * Return the number of entries in a ring.
  */
-unsigned odph_ring_count(const odph_ring_t *r)
+unsigned _ring_count(const _ring_t *r)
 {
 	uint32_t prod_tail = r->prod.tail;
 	uint32_t cons_tail = r->cons.tail;
+
 	return (prod_tail - cons_tail) & r->prod.mask;
 }
 
 /**
  * Return the number of free entries in a ring.
  */
-unsigned odph_ring_free_count(const odph_ring_t *r)
+unsigned _ring_free_count(const _ring_t *r)
 {
 	uint32_t prod_tail = r->prod.tail;
 	uint32_t cons_tail = r->cons.tail;
+
 	return (cons_tail - prod_tail - 1) & r->prod.mask;
 }
 
 /* dump the status of the ring on the console */
-void odph_ring_dump(const odph_ring_t *r)
+void _ring_dump(const _ring_t *r)
 {
-	ODPH_DBG("ring <%s>@%p\n", r->name, r);
-	ODPH_DBG("  flags=%x\n", r->flags);
-	ODPH_DBG("  size=%" PRIu32 "\n", r->prod.size);
-	ODPH_DBG("  ct=%" PRIu32 "\n", r->cons.tail);
-	ODPH_DBG("  ch=%" PRIu32 "\n", r->cons.head);
-	ODPH_DBG("  pt=%" PRIu32 "\n", r->prod.tail);
-	ODPH_DBG("  ph=%" PRIu32 "\n", r->prod.head);
-	ODPH_DBG("  used=%u\n", odph_ring_count(r));
-	ODPH_DBG("  avail=%u\n", odph_ring_free_count(r));
+	ODP_DBG("ring <%s>@%p\n", r->name, r);
+	ODP_DBG("  flags=%x\n", r->flags);
+	ODP_DBG("  size=%" PRIu32 "\n", r->prod.size);
+	ODP_DBG("  ct=%" PRIu32 "\n", r->cons.tail);
+	ODP_DBG("  ch=%" PRIu32 "\n", r->cons.head);
+	ODP_DBG("  pt=%" PRIu32 "\n", r->prod.tail);
+	ODP_DBG("  ph=%" PRIu32 "\n", r->prod.head);
+	ODP_DBG("  used=%u\n", _ring_count(r));
+	ODP_DBG("  avail=%u\n", _ring_free_count(r));
 	if (r->prod.watermark == r->prod.size)
-		ODPH_DBG("  watermark=0\n");
+		ODP_DBG("  watermark=0\n");
 	else
-		ODPH_DBG("  watermark=%" PRIu32 "\n", r->prod.watermark);
+		ODP_DBG("  watermark=%" PRIu32 "\n", r->prod.watermark);
 }
 
 /* dump the status of all rings on the console */
-void odph_ring_list_dump(void)
+void _ring_list_dump(void)
 {
-	const odph_ring_t *mp = NULL;
+	const _ring_t *mp = NULL;
 
 	odp_rwlock_read_lock(&qlock);
 
 	TAILQ_FOREACH(mp, &odp_ring_list, next) {
-		odph_ring_dump(mp);
+		_ring_dump(mp);
 	}
 
 	odp_rwlock_read_unlock(&qlock);
 }
 
 /* search a ring from its name */
-odph_ring_t *odph_ring_lookup(const char *name)
+_ring_t *_ring_lookup(const char *name)
 {
-	odph_ring_t *r;
+	_ring_t *r;
 
 	odp_rwlock_read_lock(&qlock);
 	TAILQ_FOREACH(r, &odp_ring_list, next) {
-		if (strncmp(name, r->name, ODPH_RING_NAMESIZE) == 0)
+		if (strncmp(name, r->name, _RING_NAMESIZE) == 0)
 			break;
 	}
 	odp_rwlock_read_unlock(&qlock);
@@ -587,60 +584,60 @@  odph_ring_t *odph_ring_lookup(const char *name)
 /**
  * Enqueue several objects on the ring (multi-producers safe).
  */
-int odph_ring_mp_enqueue_burst(odph_ring_t *r, void * const *obj_table,
-			      unsigned n)
+int _ring_mp_enqueue_burst(_ring_t *r, void * const *obj_table,
+			   unsigned n)
 {
-	return __odph_ring_mp_do_enqueue(r, obj_table, n,
-					 ODPH_RING_QUEUE_VARIABLE);
+	return ___ring_mp_do_enqueue(r, obj_table, n,
+					 _RING_QUEUE_VARIABLE);
 }
 
 /**
  * Enqueue several objects on a ring (NOT multi-producers safe).
  */
-int odph_ring_sp_enqueue_burst(odph_ring_t *r, void * const *obj_table,
-			      unsigned n)
+int _ring_sp_enqueue_burst(_ring_t *r, void * const *obj_table,
+			   unsigned n)
 {
-	return __odph_ring_sp_do_enqueue(r, obj_table, n,
-					ODPH_RING_QUEUE_VARIABLE);
+	return ___ring_sp_do_enqueue(r, obj_table, n,
+					_RING_QUEUE_VARIABLE);
 }
 
 /**
  * Enqueue several objects on a ring.
  */
-int odph_ring_enqueue_burst(odph_ring_t *r, void * const *obj_table,
-			   unsigned n)
+int _ring_enqueue_burst(_ring_t *r, void * const *obj_table,
+			unsigned n)
 {
 	if (r->prod.sp_enqueue)
-		return odph_ring_sp_enqueue_burst(r, obj_table, n);
+		return _ring_sp_enqueue_burst(r, obj_table, n);
 	else
-		return odph_ring_mp_enqueue_burst(r, obj_table, n);
+		return _ring_mp_enqueue_burst(r, obj_table, n);
 }
 
 /**
  * Dequeue several objects from a ring (multi-consumers safe).
  */
-int odph_ring_mc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n)
+int _ring_mc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n)
 {
-	return __odph_ring_mc_do_dequeue(r, obj_table, n,
-					ODPH_RING_QUEUE_VARIABLE);
+	return ___ring_mc_do_dequeue(r, obj_table, n,
+					_RING_QUEUE_VARIABLE);
 }
 
 /**
  * Dequeue several objects from a ring (NOT multi-consumers safe).
  */
-int odph_ring_sc_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n)
+int _ring_sc_dequeue_burst(_ring_t *r, void **obj_table, unsigned n)
 {
-	return __odph_ring_sc_do_dequeue(r, obj_table, n,
-					 ODPH_RING_QUEUE_VARIABLE);
+	return ___ring_sc_do_dequeue(r, obj_table, n,
+					 _RING_QUEUE_VARIABLE);
 }
 
 /**
  * Dequeue multiple objects from a ring up to a maximum number.
  */
-int odph_ring_dequeue_burst(odph_ring_t *r, void **obj_table, unsigned n)
+int _ring_dequeue_burst(_ring_t *r, void **obj_table, unsigned n)
 {
 	if (r->cons.sc_dequeue)
-		return odph_ring_sc_dequeue_burst(r, obj_table, n);
+		return _ring_sc_dequeue_burst(r, obj_table, n);
 	else
-		return odph_ring_mc_dequeue_burst(r, obj_table, n);
+		return _ring_mc_dequeue_burst(r, obj_table, n);
 }
diff --git a/platform/linux-generic/test/Makefile.am b/platform/linux-generic/test/Makefile.am
index 76d357a..a4d4dcd 100644
--- a/platform/linux-generic/test/Makefile.am
+++ b/platform/linux-generic/test/Makefile.am
@@ -1,10 +1,11 @@ 
 include $(top_srcdir)/test/Makefile.inc
 TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/validation
 
-ODP_MODULES = pktio
+ODP_MODULES = pktio ring
 
 if test_vald
 TESTS = pktio/pktio_run \
+	ring/ringtest$(EXEEXT) \
 	${top_builddir}/test/validation/buffer/buffer_main$(EXEEXT) \
 	${top_builddir}/test/validation/classification/classification_main$(EXEEXT) \
 	${top_builddir}/test/validation/config/config_main$(EXEEXT) \
diff --git a/platform/linux-generic/test/ring/.gitignore b/platform/linux-generic/test/ring/.gitignore
new file mode 100644
index 0000000..4767f5e
--- /dev/null
+++ b/platform/linux-generic/test/ring/.gitignore
@@ -0,0 +1 @@ 
+ringtest
diff --git a/platform/linux-generic/test/ring/Makefile.am b/platform/linux-generic/test/ring/Makefile.am
new file mode 100644
index 0000000..5a949d0
--- /dev/null
+++ b/platform/linux-generic/test/ring/Makefile.am
@@ -0,0 +1,16 @@ 
+include $(top_srcdir)/test/validation/Makefile.inc
+
+AM_CFLAGS += -I$(srcdir)/common
+AM_CFLAGS += -I$(top_srcdir)/test/validation/common
+AM_LDFLAGS += -static
+
+COMPILE_ONLY =
+
+TESTSCRIPTS =
+
+EXECUTABLES = ringtest$(EXEEXT)
+
+test_PROGRAMS = $(EXECUTABLES) $(COMPILE_ONLY)
+
+ringtest_SOURCES = ringtest.c
+ringtest_LDADD = $(LIBCUNIT_COMMON) $(LIBODP)
diff --git a/test/api_test/odp_ring_test.c b/platform/linux-generic/test/ring/ringtest.c
similarity index 72%
rename from test/api_test/odp_ring_test.c
rename to platform/linux-generic/test/ring/ringtest.c
index e8a962a..6e18863 100644
--- a/test/api_test/odp_ring_test.c
+++ b/platform/linux-generic/test/ring/ringtest.c
@@ -37,7 +37,6 @@ 
  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
 /**
  * @file
  *
@@ -48,86 +47,96 @@ 
 #include <stdio.h>
 #include <string.h>
 #include <odp.h>
-#include <odp_common.h>
-#include <odp/helper/ring.h>
+#include <odp/helper/linux.h>
+#include <odp_packet_io_ring_internal.h>
 #include <test_debug.h>
+#include <odp_cunit_common.h>
 
 #define RING_SIZE 4096
 #define MAX_BULK 32
 
-#define RING_TEST_BASIC
+enum {
+	ODP_RING_TEST_BASIC,
+	ODP_RING_TEST_STRESS,
+};
 
-static int test_ring_basic(odph_ring_t *r)
+/* local struct for ring_thread argument */
+typedef struct {
+	pthrd_arg thrdarg;
+	int stress_type;
+} ring_arg_t;
+
+static int test_ring_basic(_ring_t *r)
 {
 	void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
 	int ret;
 	unsigned i, num_elems;
 
 	/* alloc dummy object pointers */
-	src = malloc(RING_SIZE*2*sizeof(void *));
+	src = malloc(RING_SIZE * 2 * sizeof(void *));
 	if (src == NULL) {
 		LOG_ERR("failed to allocate test ring src memory\n");
 		goto fail;
 	}
-	for (i = 0; i < RING_SIZE*2; i++)
+	for (i = 0; i < RING_SIZE * 2; i++)
 		src[i] = (void *)(unsigned long)i;
 
 	cur_src = src;
 
 	/* alloc some room for copied objects */
-	dst = malloc(RING_SIZE*2*sizeof(void *));
+	dst = malloc(RING_SIZE * 2 * sizeof(void *));
 	if (dst == NULL) {
 		LOG_ERR("failed to allocate test ring dst memory\n");
 		goto fail;
 	}
 
-	memset(dst, 0, RING_SIZE*2*sizeof(void *));
+	memset(dst, 0, RING_SIZE * 2 * sizeof(void *));
 	cur_dst = dst;
 
 	printf("Test SP & SC basic functions\n");
 	printf("enqueue 1 obj\n");
-	ret = odph_ring_sp_enqueue_burst(r, cur_src, 1);
+	ret = _ring_sp_enqueue_burst(r, cur_src, 1);
 	cur_src += 1;
-	if ((ret & ODPH_RING_SZ_MASK) != 1) {
+	if ((ret & _RING_SZ_MASK) != 1) {
 		LOG_ERR("sp_enq for 1 obj failed\n");
 		goto fail;
 	}
 
 	printf("enqueue 2 objs\n");
-	ret = odph_ring_sp_enqueue_burst(r, cur_src, 2);
+	ret = _ring_sp_enqueue_burst(r, cur_src, 2);
 	cur_src += 2;
-	if ((ret & ODPH_RING_SZ_MASK) != 2) {
+	if ((ret & _RING_SZ_MASK) != 2) {
 		LOG_ERR("sp_enq for 2 obj failed\n");
 		goto fail;
 	}
 
 	printf("enqueue MAX_BULK objs\n");
-	ret = odph_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
-	if ((ret & ODPH_RING_SZ_MASK) != MAX_BULK) {
+	ret = _ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
+	if ((ret & _RING_SZ_MASK) != MAX_BULK) {
 		LOG_ERR("sp_enq for %d obj failed\n", MAX_BULK);
 		goto fail;
 	}
 
 	printf("dequeue 1 obj\n");
-	ret = odph_ring_sc_dequeue_burst(r, cur_dst, 1);
+	ret = _ring_sc_dequeue_burst(r, cur_dst, 1);
 	cur_dst += 1;
-	if ((ret & ODPH_RING_SZ_MASK) != 1) {
+	if ((ret & _RING_SZ_MASK) != 1) {
 		LOG_ERR("sc_deq for 1 obj failed\n");
 		goto fail;
 	}
 
 	printf("dequeue 2 objs\n");
-	ret = odph_ring_sc_dequeue_burst(r, cur_dst, 2);
+	ret = _ring_sc_dequeue_burst(r, cur_dst, 2);
 	cur_dst += 2;
-	if ((ret & ODPH_RING_SZ_MASK) != 2) {
+	if ((ret & _RING_SZ_MASK) != 2) {
 		LOG_ERR("sc_deq for 2 obj failed\n");
 		goto fail;
 	}
 
 	printf("dequeue MAX_BULK objs\n");
-	ret = odph_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
+	ret = _ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
 	cur_dst += MAX_BULK;
-	if ((ret & ODPH_RING_SZ_MASK) != MAX_BULK) {
+	if ((ret & _RING_SZ_MASK) != MAX_BULK) {
 		LOG_ERR("sc_deq for %d obj failed\n", MAX_BULK);
 		goto fail;
 	}
@@ -144,41 +153,41 @@  static int test_ring_basic(odph_ring_t *r)
 	printf("Test MP & MC basic functions\n");
 
 	printf("enqueue 1 obj\n");
-	ret = odph_ring_mp_enqueue_bulk(r, cur_src, 1);
+	ret = _ring_mp_enqueue_bulk(r, cur_src, 1);
 	cur_src += 1;
 	if (ret != 0) {
 		LOG_ERR("mp_enq for 1 obj failed\n");
 		goto fail;
 	}
 	printf("enqueue 2 objs\n");
-	ret = odph_ring_mp_enqueue_bulk(r, cur_src, 2);
+	ret = _ring_mp_enqueue_bulk(r, cur_src, 2);
 	cur_src += 2;
 	if (ret != 0) {
 		LOG_ERR("mp_enq for 2 obj failed\n");
 		goto fail;
 	}
 	printf("enqueue MAX_BULK objs\n");
-	ret = odph_ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);
+	ret = _ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);
 	if (ret != 0) {
 		LOG_ERR("mp_enq for %d obj failed\n", MAX_BULK);
 		goto fail;
 	}
 	printf("dequeue 1 obj\n");
-	ret = odph_ring_mc_dequeue_bulk(r, cur_dst, 1);
+	ret = _ring_mc_dequeue_bulk(r, cur_dst, 1);
 	cur_dst += 1;
 	if (ret != 0) {
 		LOG_ERR("mc_deq for 1 obj failed\n");
 		goto fail;
 	}
 	printf("dequeue 2 objs\n");
-	ret = odph_ring_mc_dequeue_bulk(r, cur_dst, 2);
+	ret = _ring_mc_dequeue_bulk(r, cur_dst, 2);
 	cur_dst += 2;
 	if (ret != 0) {
 		LOG_ERR("mc_deq for 2 obj failed\n");
 		goto fail;
 	}
 	printf("dequeue MAX_BULK objs\n");
-	ret = odph_ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);
+	ret = _ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);
 	cur_dst += MAX_BULK;
 	if (ret != 0) {
 		LOG_ERR("mc_deq for %d obj failed\n", MAX_BULK);
@@ -191,30 +200,30 @@  static int test_ring_basic(odph_ring_t *r)
 	}
 
 	printf("test watermark and default bulk enqueue / dequeue\n");
-	odph_ring_set_water_mark(r, 20);
+	_ring_set_water_mark(r, 20);
 	num_elems = 16;
 
 	cur_src = src;
 	cur_dst = dst;
 
-	ret = odph_ring_mp_enqueue_bulk(r, cur_src, num_elems);
+	ret = _ring_mp_enqueue_bulk(r, cur_src, num_elems);
 	cur_src += num_elems;
 	if (ret != 0) {
 		LOG_ERR("Cannot enqueue\n");
 		goto fail;
 	}
-	ret = odph_ring_mp_enqueue_bulk(r, cur_src, num_elems);
+	ret = _ring_mp_enqueue_bulk(r, cur_src, num_elems);
 	if (ret != -EDQUOT) {
 		LOG_ERR("Watermark not exceeded\n");
 		goto fail;
 	}
-	ret = odph_ring_mc_dequeue_bulk(r, cur_dst, num_elems);
+	ret = _ring_mc_dequeue_bulk(r, cur_dst, num_elems);
 	cur_dst += num_elems;
 	if (ret != 0) {
 		LOG_ERR("Cannot dequeue\n");
 		goto fail;
 	}
-	ret = odph_ring_mc_dequeue_bulk(r, cur_dst, num_elems);
+	ret = _ring_mc_dequeue_bulk(r, cur_dst, num_elems);
 	cur_dst += num_elems;
 	if (ret != 0) {
 		LOG_ERR("Cannot dequeue2\n");
@@ -241,7 +250,7 @@  fail:
 }
 
 /* global shared ring used for stress testing */
-static odph_ring_t *r_stress;
+static _ring_t *r_stress;
 
 /* Stress func for Multi producer only */
 static int producer_fn(void)
@@ -251,7 +260,7 @@  static int producer_fn(void)
 	void **src = NULL;
 
 	/* alloc dummy object pointers */
-	src = malloc(MAX_BULK*2*sizeof(void *));
+	src = malloc(MAX_BULK * 2 * sizeof(void *));
 	if (src == NULL) {
 		LOG_ERR("failed to allocate producer memory.\n");
 		return -1;
@@ -260,7 +269,7 @@  static int producer_fn(void)
 		src[i] = (void *)(unsigned long)i;
 
 	do {
-		i = odph_ring_mp_enqueue_bulk(r_stress, src, MAX_BULK);
+		i = _ring_mp_enqueue_bulk(r_stress, src, MAX_BULK);
 		if (i == 0) {
 			free(src);
 			return 0;
@@ -275,14 +284,14 @@  static int consumer_fn(void)
 	void **src = NULL;
 
 	/* alloc dummy object pointers */
-	src = malloc(MAX_BULK*2*sizeof(void *));
+	src = malloc(MAX_BULK * 2 * sizeof(void *));
 	if (src == NULL) {
 		LOG_ERR("failed to allocate consumer memory.\n");
 		return -1;
 	}
 
 	do {
-		i = odph_ring_mc_dequeue_bulk(r_stress, src, MAX_BULK);
+		i = _ring_mc_dequeue_bulk(r_stress, src, MAX_BULK);
 		if (i == 0) {
 			for (i = 0; i < MAX_BULK; i++) {
 				if (src[i] != (void *)(unsigned long)i) {
@@ -298,7 +307,6 @@  static int consumer_fn(void)
 	} while (1);
 }
 
-
 /*
  * Note : make sure that both enqueue and dequeue
  * operation starts at same time so to avoid data corruption
@@ -319,24 +327,22 @@  typedef enum {
 static void test_ring_stress(stress_type_t type)
 {
 	int thr;
+
 	thr = odp_thread_id();
 
 	switch (type) {
 	case one_enq_one_deq:
-
 		if (thr == 1)
 			producer_fn();
 		if (thr == 2)
 			consumer_fn();
 		break;
-
 	case multi_enq_multi_deq:
-		if (thr%2 == 0)
+		if (thr % 2 == 0)
 			producer_fn();
 		else
 			consumer_fn();
 		break;
-
 	case one_deq_rest_enq:
 	case one_enq_rest_deq:/*TBD*/
 	default:
@@ -344,19 +350,12 @@  static void test_ring_stress(stress_type_t type)
 	}
 }
 
-/* local struct for ring_thread argument */
-typedef struct {
-	pthrd_arg thrdarg;
-	int stress_type;
-} ring_arg_t;
-
-
 static void *test_ring(void *arg)
 {
 	ring_arg_t *parg = (ring_arg_t *)arg;
 	int thr;
-	char ring_name[ODPH_RING_NAMESIZE];
-	odph_ring_t *r;
+	char ring_name[_RING_NAMESIZE];
+	_ring_t *r;
 	int result = 0;
 
 	thr = odp_thread_id();
@@ -367,16 +366,16 @@  static void *test_ring(void *arg)
 	case ODP_RING_TEST_BASIC:
 		snprintf(ring_name, sizeof(ring_name), "test_ring_%i", thr);
 
-		r = odph_ring_create(ring_name, RING_SIZE,
-				    0 /* not used, alignement
-					 taken care inside func : todo */);
+		r = _ring_create(ring_name, RING_SIZE,
+				 0 /* not used, alignement
+				      taken care inside func : todo */);
 		if (r == NULL) {
 			LOG_ERR("ring create failed\n");
 			result = -1;
 			break;
 		}
 		/* lookup ring from its name */
-		if (odph_ring_lookup(ring_name) != r) {
+		if (_ring_lookup(ring_name) != r) {
 			LOG_ERR("ring lookup failed\n");
 			result = -1;
 			break;
@@ -388,16 +387,16 @@  static void *test_ring(void *arg)
 			result = -1;
 		}
 
-		/* dump ring stats */
-		odph_ring_list_dump();
+		if (result)
+			_ring_list_dump();
 
 		break;
 
 	case ODP_RING_TEST_STRESS:
 		test_ring_stress(parg->stress_type);
 
-		/* dump ring stats */
-		odph_ring_list_dump();
+		if (result)
+			_ring_list_dump();
 		break;
 
 	default:
@@ -417,54 +416,67 @@  static void *test_ring(void *arg)
 	return parg;
 }
 
-
-int main(int argc __attribute__((__unused__)),
-	 char *argv[] __attribute__((__unused__)))
+int main(int argc TEST_UNUSED, char *argv[] TEST_UNUSED)
 {
 	ring_arg_t rarg;
+	odph_linux_pthread_t thread_tbl[MAX_WORKERS];
+	odp_cpumask_t cpu_mask;
+	int num_workers;
+	char ring_name[_RING_NAMESIZE];
 
-	if (odp_test_global_init() != 0)
-		return -1;
+	if (odp_init_global(NULL, NULL)) {
+		LOG_ERR("Error: ODP global init failed.\n");
+		exit(EXIT_FAILURE);
+	}
 
-	odp_print_system_info();
+	if (odp_init_local(ODP_THREAD_CONTROL)) {
+		LOG_ERR("Error: ODP local init failed.\n");
+		exit(EXIT_FAILURE);
+	}
 
-	odph_ring_tailq_init();
+	_ring_tailq_init();
 
-	rarg.thrdarg.numthrds = odp_cpu_count();
+	num_workers = odp_cpumask_default_worker(&cpu_mask, MAX_WORKERS);
+	rarg.thrdarg.numthrds = rarg.thrdarg.numthrds;
 
-#ifdef RING_TEST_BASIC
 	rarg.thrdarg.testcase = ODP_RING_TEST_BASIC;
-#else
+	printf("starting stess test type : %d..\n", rarg.stress_type);
+	odph_linux_pthread_create(&thread_tbl[0], &cpu_mask,
+				  test_ring, (void *)&rarg);
+	odph_linux_pthread_join(thread_tbl, num_workers);
+
 	rarg.thrdarg.testcase = ODP_RING_TEST_STRESS;
 	rarg.stress_type = one_enq_one_deq;
-/*	rarg.stress_type = multi_enq_multi_deq;*/
-	char ring_name[ODPH_RING_NAMESIZE];
 
 	printf("starting stess test type : %d..\n", rarg.stress_type);
-	/* create a ring */
 	snprintf(ring_name, sizeof(ring_name), "test_ring_stress");
-
-	r_stress = odph_ring_create(ring_name, RING_SIZE,
-				0 /* not used, alignement
-				 taken care inside func : todo */);
+	r_stress = _ring_create(ring_name, RING_SIZE,
+				0/* not used, alignement
+				    taken care inside func : todo */);
 	if (r_stress == NULL) {
 		LOG_ERR("ring create failed\n");
 		goto fail;
 	}
 	/* lookup ring from its name */
-	if (odph_ring_lookup(ring_name) != r_stress) {
+	if (_ring_lookup(ring_name) != r_stress) {
 		LOG_ERR("ring lookup failed\n");
 		goto fail;
 	}
-#endif
-	odp_test_thread_create(test_ring, (pthrd_arg *)&rarg);
 
-#ifndef RING_TEST_BASIC
+	odph_linux_pthread_create(&thread_tbl[0], &cpu_mask,
+				  test_ring, (void *)&rarg);
+	odph_linux_pthread_join(thread_tbl, num_workers);
+
 fail:
-#endif
+	if (odp_term_local()) {
+		LOG_ERR("Error: ODP local term failed.\n");
+		exit(EXIT_FAILURE);
+	}
 
-	odp_test_thread_exit(&rarg.thrdarg);
+	if (odp_term_global()) {
+		LOG_ERR("Error: ODP global term failed.\n");
+		exit(EXIT_FAILURE);
+	}
 
 	return 0;
 }
-
diff --git a/test/Makefile.am b/test/Makefile.am
index 2ba8008..4a75364 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,4 +1,4 @@ 
-SUBDIRS = api_test performance miscellaneous
+SUBDIRS = performance miscellaneous
 
 if cunit_support
     SUBDIRS += validation
diff --git a/test/api_test/.gitignore b/test/api_test/.gitignore
deleted file mode 100644
index 950f443..0000000
--- a/test/api_test/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@ 
-odp_ring
-odp_shm
diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am
deleted file mode 100644
index fcdba48..0000000
--- a/test/api_test/Makefile.am
+++ /dev/null
@@ -1,13 +0,0 @@ 
-include $(top_srcdir)/test/Makefile.inc
-
-bin_PROGRAMS = odp_ring$(EXEEXT)
-
-odp_ring_CFLAGS = $(AM_CFLAGS)
-
-odp_ring_LDFLAGS = $(AM_LDFLAGS) -static
-
-noinst_HEADERS = \
-		  $(top_srcdir)/test/api_test/odp_common.h \
-		  $(top_srcdir)/test/test_debug.h
-
-dist_odp_ring_SOURCES = odp_ring_test.c odp_common.c
diff --git a/test/api_test/odp_common.c b/test/api_test/odp_common.c
deleted file mode 100644
index 681d915..0000000
--- a/test/api_test/odp_common.c
+++ /dev/null
@@ -1,91 +0,0 @@ 
-/* Copyright (c) 2013, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier:     BSD-3-Clause
- */
-
-/**
- * @file
- *
- * ODP test application common
- */
-
-#include <string.h>
-#include <odp.h>
-#include <odp/helper/linux.h>
-#include <odp_common.h>
-#include <test_debug.h>
-
-#define MAX_WORKERS           32            /**< Max worker threads */
-
-/* Globals */
-static odph_linux_pthread_t thread_tbl[MAX_WORKERS]; /**< worker threads table*/
-static int num_workers;				    /**< number of workers 	*/
-
-/**
- * Print system information
- */
-void odp_print_system_info(void)
-{
-	odp_cpumask_t cpumask;
-	char str[ODP_CPUMASK_STR_SIZE];
-
-	memset(str, 1, sizeof(str));
-
-	odp_cpumask_zero(&cpumask);
-
-	odp_cpumask_from_str(&cpumask, "0x1");
-	(void)odp_cpumask_to_str(&cpumask, str, sizeof(str));
-
-	printf("\n");
-	printf("ODP system info\n");
-	printf("---------------\n");
-	printf("ODP API version: %s\n",        odp_version_api_str());
-	printf("CPU model:       %s\n",        odp_sys_cpu_model_str());
-	printf("CPU freq (hz):   %"PRIu64"\n", odp_sys_cpu_hz());
-	printf("Cache line size: %i\n",        odp_sys_cache_line_size());
-	printf("CPU count:       %i\n",        odp_cpu_count());
-	printf("CPU mask:        %s\n",        str);
-
-	printf("\n");
-}
-
-/** test init globals and call odp_init_global() */
-int odp_test_global_init(void)
-{
-	memset(thread_tbl, 0, sizeof(thread_tbl));
-
-	if (odp_init_global(NULL, NULL)) {
-		LOG_ERR("ODP global init failed.\n");
-		return -1;
-	}
-
-	num_workers = odp_cpu_count();
-	/* force to max CPU count */
-	if (num_workers > MAX_WORKERS)
-		num_workers = MAX_WORKERS;
-
-	return 0;
-}
-
-/** create test thread */
-int odp_test_thread_create(void *func_ptr(void *), pthrd_arg *arg)
-{
-	odp_cpumask_t cpumask;
-
-	/* Create and init additional threads */
-	odp_cpumask_default_worker(&cpumask, arg->numthrds);
-	odph_linux_pthread_create(thread_tbl, &cpumask, func_ptr,
-				  (void *)arg);
-
-	return 0;
-}
-
-/** exit from test thread */
-int odp_test_thread_exit(pthrd_arg *arg)
-{
-	/* Wait for other threads to exit */
-	odph_linux_pthread_join(thread_tbl, arg->numthrds);
-
-	return 0;
-}
diff --git a/test/api_test/odp_common.h b/test/api_test/odp_common.h
deleted file mode 100644
index f321b6b..0000000
--- a/test/api_test/odp_common.h
+++ /dev/null
@@ -1,42 +0,0 @@ 
-/* Copyright (c) 2013, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier:     BSD-3-Clause
- */
-
-/**
- * @file
- *
- * ODP test application common headers
- */
-
-#ifndef ODP_COMMON_H
-#define ODP_COMMON_H
-
-#define MAX_WORKERS 32 /**< Maximum number of work threads */
-
-/** types of tests */
-typedef enum {
-	ODP_ATOMIC_TEST = 0,
-	ODP_SHM_TEST,
-	ODP_RING_TEST_BASIC,
-	ODP_RING_TEST_STRESS,
-	ODP_TIMER_PING_TEST,
-	ODP_MAX_TEST
-} odp_test_case_e;
-
-/**
- * Thread argument
- */
-typedef struct {
-	int testcase; /**< specifies which set of API's to exercise */
-	int numthrds; /**< no of pthreads to create */
-} pthrd_arg;
-
-extern void odp_print_system_info(void);
-extern int odp_test_global_init(void);
-/** create thread fro start_routine function */
-extern int odp_test_thread_create(void *(*start_routine) (void *), pthrd_arg *);
-extern int odp_test_thread_exit(pthrd_arg *);
-
-#endif /* ODP_COMMON_H */