This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, api-next has been updated via 65ea1213c75e323c4ff8ee2de48ce6dd84b1f7f2 (commit) via becb0250ea30f65f3beb02f0094197704f450352 (commit) via 90e456db5f983f3fff9126dd70f6fea907fed361 (commit) via e45799924207308fcac2928a64e6ecc3ca102a8c (commit) via a47f5fbb6ed8122a3453f5f5a3fabf53a98d7fdf (commit) from 414c4c75b0beb8cd4e4d2abe090921bcf058ec69 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 65ea1213c75e323c4ff8ee2de48ce6dd84b1f7f2 Author: Christophe Milard christophe.milard@linaro.org Date: Fri Jul 29 08:57:26 2016 +0200
test: validation: drv: atomic tests
Adding tests for atomic operations performed on the driver (drv) interface. Based on the north API tests.
Signed-off-by: Christophe Milard christophe.milard@linaro.org Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/common_plat/validation/drv/atomic/.gitignore b/test/common_plat/validation/drv/atomic/.gitignore new file mode 100644 index 0000000..610ffea --- /dev/null +++ b/test/common_plat/validation/drv/atomic/.gitignore @@ -0,0 +1 @@ +atomic_main diff --git a/test/common_plat/validation/drv/atomic/Makefile.am b/test/common_plat/validation/drv/atomic/Makefile.am index be48623..9b6bd63 100644 --- a/test/common_plat/validation/drv/atomic/Makefile.am +++ b/test/common_plat/validation/drv/atomic/Makefile.am @@ -1,4 +1,10 @@ include ../Makefile.inc
+noinst_LTLIBRARIES = libtestatomic.la +libtestatomic_la_SOURCES = atomic.c + test_PROGRAMS = atomic_main$(EXEEXT) dist_atomic_main_SOURCES = atomic_main.c +atomic_main_LDADD = libtestatomic.la $(LIBCUNIT_COMMON) $(LIBODP) + +EXTRA_DIST = atomic.h diff --git a/test/common_plat/validation/drv/atomic/atomic.c b/test/common_plat/validation/drv/atomic/atomic.c new file mode 100644 index 0000000..162f6e4 --- /dev/null +++ b/test/common_plat/validation/drv/atomic/atomic.c @@ -0,0 +1,892 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <malloc.h> +#include <odp_api.h> +#include <odp_drv.h> +#include <CUnit/Basic.h> +#include <odp_cunit_common.h> +#include <unistd.h> +#include "atomic.h" + +#define VERBOSE 0 +#define MAX_ITERATIONS 1000 + +#define ADD_SUB_CNT 5 + +#define CNT 10 +#define U32_INIT_VAL (1UL << 10) +#define U64_INIT_VAL (1ULL << 33) +#define U32_MAGIC 0xa23f65b2 +#define U64_MAGIC 0xf2e1c5430cb6a52e + +#define GLOBAL_SHM_NAME "GlobalLockTest" + +#define UNUSED __attribute__((__unused__)) + +#define CHECK_MAX_MIN (1 << 0) +#define CHECK_XCHG (1 << 2) + +static odpdrv_atomic_u32_t a32u; +static odpdrv_atomic_u64_t a64u; +static odpdrv_atomic_u32_t a32u_min; +static odpdrv_atomic_u32_t a32u_max; +static odpdrv_atomic_u64_t a64u_min; +static odpdrv_atomic_u64_t a64u_max; +static odpdrv_atomic_u32_t a32u_xchg; +static odpdrv_atomic_u64_t a64u_xchg; + +typedef __volatile uint32_t volatile_u32_t; +typedef __volatile uint64_t volatile_u64_t; + +typedef struct { + /* Global variables */ + uint32_t g_num_threads; + uint32_t g_iterations; + uint32_t g_verbose; + uint32_t g_max_num_cores; + + volatile_u32_t global_lock_owner; +} global_shared_mem_t; + +/* Per-thread memory */ +typedef struct { + global_shared_mem_t *global_mem; + + int thread_id; + int thread_core; + + volatile_u64_t delay_counter; +} per_thread_mem_t; + +static odp_shm_t global_shm; +static global_shared_mem_t *global_mem; + +/* Initialise per-thread memory */ +static per_thread_mem_t *thread_init(void) +{ + global_shared_mem_t *global_mem; + per_thread_mem_t *per_thread_mem; + odp_shm_t global_shm; + uint32_t per_thread_mem_len; + + per_thread_mem_len = sizeof(per_thread_mem_t); + per_thread_mem = malloc(per_thread_mem_len); + memset(per_thread_mem, 0, per_thread_mem_len); + + per_thread_mem->delay_counter = 1; + + per_thread_mem->thread_id = odp_thread_id(); + per_thread_mem->thread_core = odp_cpu_id(); + + global_shm = odp_shm_lookup(GLOBAL_SHM_NAME); + global_mem = odp_shm_addr(global_shm); + CU_ASSERT_PTR_NOT_NULL(global_mem); + + per_thread_mem->global_mem = global_mem; + + return per_thread_mem; +} + +static void thread_finalize(per_thread_mem_t *per_thread_mem) +{ + free(per_thread_mem); +} + +static void test_atomic_inc_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_inc_u32(&a32u); +} + +static void test_atomic_inc_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_inc_u64(&a64u); +} + +static void test_atomic_dec_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_dec_u32(&a32u); +} + +static void test_atomic_dec_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_dec_u64(&a64u); +} + +static void test_atomic_fetch_inc_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_inc_u32(&a32u); +} + +static void test_atomic_fetch_inc_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_inc_u64(&a64u); +} + +static void test_atomic_fetch_dec_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_dec_u32(&a32u); +} + +static void test_atomic_fetch_dec_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_dec_u64(&a64u); +} + +static void test_atomic_add_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_add_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_add_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_add_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_sub_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_sub_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_sub_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_sub_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_add_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_add_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_add_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_add_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_sub_32(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_sub_u32(&a32u, ADD_SUB_CNT); +} + +static void test_atomic_fetch_sub_64(void) +{ + int i; + + for (i = 0; i < CNT; i++) + odpdrv_atomic_fetch_sub_u64(&a64u, ADD_SUB_CNT); +} + +static void test_atomic_min_32(void) +{ + int i; + uint32_t tmp; + + for (i = 0; i < CNT; i++) { + tmp = odpdrv_atomic_fetch_dec_u32(&a32u); + odpdrv_atomic_min_u32(&a32u_min, tmp); + } +} + +static void test_atomic_min_64(void) +{ + int i; + uint64_t tmp; + + for (i = 0; i < CNT; i++) { + tmp = odpdrv_atomic_fetch_dec_u64(&a64u); + odpdrv_atomic_min_u64(&a64u_min, tmp); + } +} + +static void test_atomic_max_32(void) +{ + int i; + uint32_t tmp; + + for (i = 0; i < CNT; i++) { + tmp = odpdrv_atomic_fetch_inc_u32(&a32u); + odpdrv_atomic_max_u32(&a32u_max, tmp); + } +} + +static void test_atomic_max_64(void) +{ + int i; + uint64_t tmp; + + for (i = 0; i < CNT; i++) { + tmp = odpdrv_atomic_fetch_inc_u64(&a64u); + odpdrv_atomic_max_u64(&a64u_max, tmp); + } +} + +static void test_atomic_cas_inc_32(void) +{ + int i; + uint32_t old; + + for (i = 0; i < CNT; i++) { + old = odpdrv_atomic_load_u32(&a32u); + + while (odpdrv_atomic_cas_u32(&a32u, &old, old + 1) == 0) + ; + } +} + +static void test_atomic_cas_dec_32(void) +{ + int i; + uint32_t old; + + for (i = 0; i < CNT; i++) { + old = odpdrv_atomic_load_u32(&a32u); + + while (odpdrv_atomic_cas_u32(&a32u, &old, old - 1) == 0) + ; + } +} + +static void test_atomic_cas_inc_64(void) +{ + int i; + uint64_t old; + + for (i = 0; i < CNT; i++) { + old = odpdrv_atomic_load_u64(&a64u); + + while (odpdrv_atomic_cas_u64(&a64u, &old, old + 1) == 0) + ; + } +} + +static void test_atomic_cas_dec_64(void) +{ + int i; + uint64_t old; + + for (i = 0; i < CNT; i++) { + old = odpdrv_atomic_load_u64(&a64u); + + while (odpdrv_atomic_cas_u64(&a64u, &old, old - 1) == 0) + ; + } +} + +static void test_atomic_xchg_32(void) +{ + uint32_t old, new; + int i; + + for (i = 0; i < CNT; i++) { + new = odpdrv_atomic_fetch_inc_u32(&a32u); + old = odpdrv_atomic_xchg_u32(&a32u_xchg, new); + + if (old & 0x1) + odpdrv_atomic_xchg_u32(&a32u_xchg, 0); + else + odpdrv_atomic_xchg_u32(&a32u_xchg, 1); + } + + odpdrv_atomic_sub_u32(&a32u, CNT); + odpdrv_atomic_xchg_u32(&a32u_xchg, U32_MAGIC); +} + +static void test_atomic_xchg_64(void) +{ + uint64_t old, new; + int i; + + for (i = 0; i < CNT; i++) { + new = odpdrv_atomic_fetch_inc_u64(&a64u); + old = odpdrv_atomic_xchg_u64(&a64u_xchg, new); + + if (old & 0x1) + odpdrv_atomic_xchg_u64(&a64u_xchg, 0); + else + odpdrv_atomic_xchg_u64(&a64u_xchg, 1); + } + + odpdrv_atomic_sub_u64(&a64u, CNT); + odpdrv_atomic_xchg_u64(&a64u_xchg, U64_MAGIC); +} + +static void test_atomic_non_relaxed_32(void) +{ + int i; + uint32_t tmp; + + for (i = 0; i < CNT; i++) { + tmp = odpdrv_atomic_load_acq_u32(&a32u); + odpdrv_atomic_store_rel_u32(&a32u, tmp); + + tmp = odpdrv_atomic_load_acq_u32(&a32u_max); + odpdrv_atomic_add_rel_u32(&a32u_max, 1); + + tmp = odpdrv_atomic_load_acq_u32(&a32u_min); + odpdrv_atomic_sub_rel_u32(&a32u_min, 1); + + tmp = odpdrv_atomic_load_u32(&a32u_xchg); + while (odpdrv_atomic_cas_acq_u32(&a32u_xchg, &tmp, tmp + 1) + == 0) + ; + + tmp = odpdrv_atomic_load_u32(&a32u_xchg); + while (odpdrv_atomic_cas_rel_u32(&a32u_xchg, &tmp, tmp + 1) + == 0) + ; + + tmp = odpdrv_atomic_load_u32(&a32u_xchg); + /* finally set value for validation */ + while (odpdrv_atomic_cas_acq_rel_u32(&a32u_xchg, &tmp, + U32_MAGIC) + == 0) + ; + } +} + +static void test_atomic_non_relaxed_64(void) +{ + int i; + uint64_t tmp; + + for (i = 0; i < CNT; i++) { + tmp = odpdrv_atomic_load_acq_u64(&a64u); + odpdrv_atomic_store_rel_u64(&a64u, tmp); + + tmp = odpdrv_atomic_load_acq_u64(&a64u_max); + odpdrv_atomic_add_rel_u64(&a64u_max, 1); + + tmp = odpdrv_atomic_load_acq_u64(&a64u_min); + odpdrv_atomic_sub_rel_u64(&a64u_min, 1); + + tmp = odpdrv_atomic_load_u64(&a64u_xchg); + while (odpdrv_atomic_cas_acq_u64(&a64u_xchg, &tmp, tmp + 1) + == 0) + ; + + tmp = odpdrv_atomic_load_u64(&a64u_xchg); + while (odpdrv_atomic_cas_rel_u64(&a64u_xchg, &tmp, tmp + 1) + == 0) + ; + + tmp = odpdrv_atomic_load_u64(&a64u_xchg); + /* finally set value for validation */ + while (odpdrv_atomic_cas_acq_rel_u64(&a64u_xchg, &tmp, + U64_MAGIC) + == 0) + ; + } +} + +static void test_atomic_inc_dec_32(void) +{ + test_atomic_inc_32(); + test_atomic_dec_32(); +} + +static void test_atomic_inc_dec_64(void) +{ + test_atomic_inc_64(); + test_atomic_dec_64(); +} + +static void test_atomic_fetch_inc_dec_32(void) +{ + test_atomic_fetch_inc_32(); + test_atomic_fetch_dec_32(); +} + +static void test_atomic_fetch_inc_dec_64(void) +{ + test_atomic_fetch_inc_64(); + test_atomic_fetch_dec_64(); +} + +static void test_atomic_add_sub_32(void) +{ + test_atomic_add_32(); + test_atomic_sub_32(); +} + +static void test_atomic_add_sub_64(void) +{ + test_atomic_add_64(); + test_atomic_sub_64(); +} + +static void test_atomic_fetch_add_sub_32(void) +{ + test_atomic_fetch_add_32(); + test_atomic_fetch_sub_32(); +} + +static void test_atomic_fetch_add_sub_64(void) +{ + test_atomic_fetch_add_64(); + test_atomic_fetch_sub_64(); +} + +static void test_atomic_max_min_32(void) +{ + test_atomic_max_32(); + test_atomic_min_32(); +} + +static void test_atomic_max_min_64(void) +{ + test_atomic_max_64(); + test_atomic_min_64(); +} + +static void test_atomic_cas_inc_dec_32(void) +{ + test_atomic_cas_inc_32(); + test_atomic_cas_dec_32(); +} + +static void test_atomic_cas_inc_dec_64(void) +{ + test_atomic_cas_inc_64(); + test_atomic_cas_dec_64(); +} + +static void test_atomic_init(void) +{ + odpdrv_atomic_init_u32(&a32u, 0); + odpdrv_atomic_init_u64(&a64u, 0); + odpdrv_atomic_init_u32(&a32u_min, 0); + odpdrv_atomic_init_u32(&a32u_max, 0); + odpdrv_atomic_init_u64(&a64u_min, 0); + odpdrv_atomic_init_u64(&a64u_max, 0); + odpdrv_atomic_init_u32(&a32u_xchg, 0); + odpdrv_atomic_init_u64(&a64u_xchg, 0); +} + +static void test_atomic_store(void) +{ + odpdrv_atomic_store_u32(&a32u, U32_INIT_VAL); + odpdrv_atomic_store_u64(&a64u, U64_INIT_VAL); + odpdrv_atomic_store_u32(&a32u_min, U32_INIT_VAL); + odpdrv_atomic_store_u32(&a32u_max, U32_INIT_VAL); + odpdrv_atomic_store_u64(&a64u_min, U64_INIT_VAL); + odpdrv_atomic_store_u64(&a64u_max, U64_INIT_VAL); + odpdrv_atomic_store_u32(&a32u_xchg, U32_INIT_VAL); + odpdrv_atomic_store_u64(&a64u_xchg, U64_INIT_VAL); +} + +static void test_atomic_validate(int check) +{ + CU_ASSERT(U32_INIT_VAL == odpdrv_atomic_load_u32(&a32u)); + CU_ASSERT(U64_INIT_VAL == odpdrv_atomic_load_u64(&a64u)); + + if (check & CHECK_MAX_MIN) { + CU_ASSERT(odpdrv_atomic_load_u32(&a32u_max) > + odpdrv_atomic_load_u32(&a32u_min)); + + CU_ASSERT(odpdrv_atomic_load_u64(&a64u_max) > + odpdrv_atomic_load_u64(&a64u_min)); + } + + if (check & CHECK_XCHG) { + CU_ASSERT(odpdrv_atomic_load_u32(&a32u_xchg) == U32_MAGIC); + CU_ASSERT(odpdrv_atomic_load_u64(&a64u_xchg) == U64_MAGIC); + } +} + +int atomic_init(odp_instance_t *inst) +{ + uint32_t workers_count, max_threads; + int ret = 0; + odp_cpumask_t mask; + + if (0 != odp_init_global(inst, NULL, NULL)) { + fprintf(stderr, "error: odp_init_global() failed.\n"); + return -1; + } + if (0 != odp_init_local(*inst, ODP_THREAD_CONTROL)) { + fprintf(stderr, "error: odp_init_local() failed.\n"); + return -1; + } + + global_shm = odp_shm_reserve(GLOBAL_SHM_NAME, + sizeof(global_shared_mem_t), 64, + ODP_SHM_SW_ONLY); + if (ODP_SHM_INVALID == global_shm) { + fprintf(stderr, "Unable reserve memory for global_shm\n"); + return -1; + } + + global_mem = odp_shm_addr(global_shm); + memset(global_mem, 0, sizeof(global_shared_mem_t)); + + global_mem->g_num_threads = MAX_WORKERS; + global_mem->g_iterations = MAX_ITERATIONS; + global_mem->g_verbose = VERBOSE; + + workers_count = odp_cpumask_default_worker(&mask, 0); + + max_threads = (workers_count >= MAX_WORKERS) ? + MAX_WORKERS : workers_count; + + if (max_threads < global_mem->g_num_threads) { + printf("Requested num of threads is too large\n"); + printf("reducing from %" PRIu32 " to %" PRIu32 "\n", + global_mem->g_num_threads, + max_threads); + global_mem->g_num_threads = max_threads; + } + + printf("Num of threads used = %" PRIu32 "\n", + global_mem->g_num_threads); + + return ret; +} + +/* Atomic tests */ +static int test_atomic_inc_dec_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_inc_dec_32(); + test_atomic_inc_dec_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_add_sub_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_add_sub_32(); + test_atomic_add_sub_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_fetch_inc_dec_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_fetch_inc_dec_32(); + test_atomic_fetch_inc_dec_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_fetch_add_sub_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_fetch_add_sub_32(); + test_atomic_fetch_add_sub_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_max_min_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_max_min_32(); + test_atomic_max_min_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_cas_inc_dec_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_cas_inc_dec_32(); + test_atomic_cas_inc_dec_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_xchg_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_xchg_32(); + test_atomic_xchg_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static int test_atomic_non_relaxed_thread(void *arg UNUSED) +{ + per_thread_mem_t *per_thread_mem; + + per_thread_mem = thread_init(); + test_atomic_non_relaxed_32(); + test_atomic_non_relaxed_64(); + + thread_finalize(per_thread_mem); + + return CU_get_number_of_failures(); +} + +static void test_atomic_functional(int func_ptr(void *), int check) +{ + pthrd_arg arg; + + arg.numthrds = global_mem->g_num_threads; + test_atomic_init(); + test_atomic_store(); + odp_cunit_thread_create(func_ptr, &arg); + odp_cunit_thread_exit(&arg); + test_atomic_validate(check); +} + +void atomic_test_atomic_inc_dec(void) +{ + test_atomic_functional(test_atomic_inc_dec_thread, 0); +} + +void atomic_test_atomic_add_sub(void) +{ + test_atomic_functional(test_atomic_add_sub_thread, 0); +} + +void atomic_test_atomic_fetch_inc_dec(void) +{ + test_atomic_functional(test_atomic_fetch_inc_dec_thread, 0); +} + +void atomic_test_atomic_fetch_add_sub(void) +{ + test_atomic_functional(test_atomic_fetch_add_sub_thread, 0); +} + +void atomic_test_atomic_max_min(void) +{ + test_atomic_functional(test_atomic_max_min_thread, CHECK_MAX_MIN); +} + +void atomic_test_atomic_cas_inc_dec(void) +{ + test_atomic_functional(test_atomic_cas_inc_dec_thread, 0); +} + +void atomic_test_atomic_xchg(void) +{ + test_atomic_functional(test_atomic_xchg_thread, CHECK_XCHG); +} + +void atomic_test_atomic_non_relaxed(void) +{ + test_atomic_functional(test_atomic_non_relaxed_thread, + CHECK_MAX_MIN | CHECK_XCHG); +} + +void atomic_test_atomic_op_lock_free(void) +{ + odpdrv_atomic_op_t atomic_op; + int ret_null, ret; + + memset(&atomic_op, 0xff, sizeof(odpdrv_atomic_op_t)); + atomic_op.all_bits = 0; + + CU_ASSERT(atomic_op.all_bits == 0); + CU_ASSERT(atomic_op.op.init == 0); + CU_ASSERT(atomic_op.op.load == 0); + CU_ASSERT(atomic_op.op.store == 0); + CU_ASSERT(atomic_op.op.fetch_add == 0); + CU_ASSERT(atomic_op.op.add == 0); + CU_ASSERT(atomic_op.op.fetch_sub == 0); + CU_ASSERT(atomic_op.op.sub == 0); + CU_ASSERT(atomic_op.op.fetch_inc == 0); + CU_ASSERT(atomic_op.op.inc == 0); + CU_ASSERT(atomic_op.op.fetch_dec == 0); + CU_ASSERT(atomic_op.op.dec == 0); + CU_ASSERT(atomic_op.op.min == 0); + CU_ASSERT(atomic_op.op.max == 0); + CU_ASSERT(atomic_op.op.cas == 0); + CU_ASSERT(atomic_op.op.xchg == 0); + + /* Test setting first, last and couple of other bits */ + atomic_op.op.init = 1; + CU_ASSERT(atomic_op.op.init == 1); + CU_ASSERT(atomic_op.all_bits != 0); + atomic_op.op.init = 0; + CU_ASSERT(atomic_op.all_bits == 0); + + atomic_op.op.xchg = 1; + CU_ASSERT(atomic_op.op.xchg == 1); + CU_ASSERT(atomic_op.all_bits != 0); + atomic_op.op.xchg = 0; + CU_ASSERT(atomic_op.all_bits == 0); + + atomic_op.op.add = 1; + CU_ASSERT(atomic_op.op.add == 1); + CU_ASSERT(atomic_op.all_bits != 0); + atomic_op.op.add = 0; + CU_ASSERT(atomic_op.all_bits == 0); + + atomic_op.op.dec = 1; + CU_ASSERT(atomic_op.op.dec == 1); + CU_ASSERT(atomic_op.all_bits != 0); + atomic_op.op.dec = 0; + CU_ASSERT(atomic_op.all_bits == 0); + + memset(&atomic_op, 0xff, sizeof(odpdrv_atomic_op_t)); + ret = odpdrv_atomic_lock_free_u64(&atomic_op); + ret_null = odpdrv_atomic_lock_free_u64(NULL); + + CU_ASSERT(ret == ret_null); + + /* Init operation is not atomic by the spec. Call to + * odpdrv_atomic_lock_free_u64() zeros it but never sets it. */ + + if (ret == 0) { + /* none are lock free */ + CU_ASSERT(atomic_op.all_bits == 0); + CU_ASSERT(atomic_op.op.init == 0); + CU_ASSERT(atomic_op.op.load == 0); + CU_ASSERT(atomic_op.op.store == 0); + CU_ASSERT(atomic_op.op.fetch_add == 0); + CU_ASSERT(atomic_op.op.add == 0); + CU_ASSERT(atomic_op.op.fetch_sub == 0); + CU_ASSERT(atomic_op.op.sub == 0); + CU_ASSERT(atomic_op.op.fetch_inc == 0); + CU_ASSERT(atomic_op.op.inc == 0); + CU_ASSERT(atomic_op.op.fetch_dec == 0); + CU_ASSERT(atomic_op.op.dec == 0); + CU_ASSERT(atomic_op.op.min == 0); + CU_ASSERT(atomic_op.op.max == 0); + CU_ASSERT(atomic_op.op.cas == 0); + CU_ASSERT(atomic_op.op.xchg == 0); + } + + if (ret == 1) { + /* some are lock free */ + CU_ASSERT(atomic_op.all_bits != 0); + CU_ASSERT(atomic_op.op.init == 0); + } + + if (ret == 2) { + /* all are lock free */ + CU_ASSERT(atomic_op.all_bits != 0); + CU_ASSERT(atomic_op.op.init == 0); + CU_ASSERT(atomic_op.op.load == 1); + CU_ASSERT(atomic_op.op.store == 1); + CU_ASSERT(atomic_op.op.fetch_add == 1); + CU_ASSERT(atomic_op.op.add == 1); + CU_ASSERT(atomic_op.op.fetch_sub == 1); + CU_ASSERT(atomic_op.op.sub == 1); + CU_ASSERT(atomic_op.op.fetch_inc == 1); + CU_ASSERT(atomic_op.op.inc == 1); + CU_ASSERT(atomic_op.op.fetch_dec == 1); + CU_ASSERT(atomic_op.op.dec == 1); + CU_ASSERT(atomic_op.op.min == 1); + CU_ASSERT(atomic_op.op.max == 1); + CU_ASSERT(atomic_op.op.cas == 1); + CU_ASSERT(atomic_op.op.xchg == 1); + } +} + +odp_testinfo_t atomic_suite_atomic[] = { + ODP_TEST_INFO(atomic_test_atomic_inc_dec), + ODP_TEST_INFO(atomic_test_atomic_add_sub), + ODP_TEST_INFO(atomic_test_atomic_fetch_inc_dec), + ODP_TEST_INFO(atomic_test_atomic_fetch_add_sub), + ODP_TEST_INFO(atomic_test_atomic_max_min), + ODP_TEST_INFO(atomic_test_atomic_cas_inc_dec), + ODP_TEST_INFO(atomic_test_atomic_xchg), + ODP_TEST_INFO(atomic_test_atomic_non_relaxed), + ODP_TEST_INFO(atomic_test_atomic_op_lock_free), + ODP_TEST_INFO_NULL, +}; + +odp_suiteinfo_t atomic_suites[] = { + {"atomic", NULL, NULL, + atomic_suite_atomic}, + ODP_SUITE_INFO_NULL +}; + +int atomic_main(int argc, char *argv[]) +{ + int ret; + + /* parse common options: */ + if (odp_cunit_parse_options(argc, argv)) + return -1; + + odp_cunit_register_global_init(atomic_init); + + ret = odp_cunit_register(atomic_suites); + + if (ret == 0) + ret = odp_cunit_run(); + + return ret; +} diff --git a/test/common_plat/validation/drv/atomic/atomic.h b/test/common_plat/validation/drv/atomic/atomic.h new file mode 100644 index 0000000..438c0a3 --- /dev/null +++ b/test/common_plat/validation/drv/atomic/atomic.h @@ -0,0 +1,38 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _ODP_TEST_ATOMIC_H_ +#define _ODP_TEST_ATOMIC_H_ + +#include <odp_cunit_common.h> + +/* test functions: */ +void atomic_test_atomic_inc_dec(void); +void atomic_test_atomic_add_sub(void); +void atomic_test_atomic_fetch_inc_dec(void); +void atomic_test_atomic_fetch_add_sub(void); +void atomic_test_atomic_max_min(void); +void atomic_test_atomic_cas_inc_dec(void); +void atomic_test_atomic_xchg(void); +void atomic_test_atomic_non_relaxed(void); +void atomic_test_atomic_op_lock_free(void); + +/* test arrays: */ +extern odp_testinfo_t atomic_suite_atomic[]; + +/* test array init/term functions: */ +int atomic_suite_init(void); + +/* test registry: */ +extern odp_suiteinfo_t atomic_suites[]; + +/* executable init/term functions: */ +int atomic_init(odp_instance_t *inst); + +/* main test program: */ +int atomic_main(int argc, char *argv[]); + +#endif diff --git a/test/common_plat/validation/drv/atomic/atomic_main.c b/test/common_plat/validation/drv/atomic/atomic_main.c index 44fb710..b290087 100644 --- a/test/common_plat/validation/drv/atomic/atomic_main.c +++ b/test/common_plat/validation/drv/atomic/atomic_main.c @@ -4,7 +4,9 @@ * SPDX-License-Identifier: BSD-3-Clause */
-int main(void) +#include "atomic.h" + +int main(int argc, char *argv[]) { - return 0; + return atomic_main(argc, argv); }
commit becb0250ea30f65f3beb02f0094197704f450352 Author: Christophe Milard christophe.milard@linaro.org Date: Fri Jul 29 08:57:25 2016 +0200
test: validation: drv: adding the new drv interface
The new structure for validation tests aiming the drv interface of ODP is added (around a first DRV atomic test empty skeleton)
Signed-off-by: Christophe Milard christophe.milard@linaro.org Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/common_plat/m4/configure.m4 b/test/common_plat/m4/configure.m4 index be878bd..bfde6cb 100644 --- a/test/common_plat/m4/configure.m4 +++ b/test/common_plat/m4/configure.m4 @@ -7,6 +7,7 @@ AC_CONFIG_FILES([test/common_plat/Makefile test/common_plat/miscellaneous/Makefile test/common_plat/performance/Makefile test/common_plat/validation/Makefile + test/common_plat/validation/api/Makefile test/common_plat/validation/api/atomic/Makefile test/common_plat/validation/api/barrier/Makefile test/common_plat/validation/api/buffer/Makefile @@ -17,7 +18,6 @@ AC_CONFIG_FILES([test/common_plat/Makefile test/common_plat/validation/api/hash/Makefile test/common_plat/validation/api/init/Makefile test/common_plat/validation/api/lock/Makefile - test/common_plat/validation/api/Makefile test/common_plat/validation/api/packet/Makefile test/common_plat/validation/api/pktio/Makefile test/common_plat/validation/api/pool/Makefile @@ -30,4 +30,6 @@ AC_CONFIG_FILES([test/common_plat/Makefile test/common_plat/validation/api/thread/Makefile test/common_plat/validation/api/time/Makefile test/common_plat/validation/api/timer/Makefile - test/common_plat/validation/api/traffic_mngr/Makefile]) + test/common_plat/validation/api/traffic_mngr/Makefile + test/common_plat/validation/drv/Makefile + test/common_plat/validation/drv/atomic/Makefile]) diff --git a/test/common_plat/validation/Makefile.am b/test/common_plat/validation/Makefile.am index 5d525fb..ef58b25 100644 --- a/test/common_plat/validation/Makefile.am +++ b/test/common_plat/validation/Makefile.am @@ -1,3 +1,4 @@ if cunit_support - SUBDIRS = api + SUBDIRS = api \ + drv endif diff --git a/test/common_plat/validation/api/Makefile.inc b/test/common_plat/validation/Makefile.inc similarity index 100% copy from test/common_plat/validation/api/Makefile.inc copy to test/common_plat/validation/Makefile.inc diff --git a/test/common_plat/validation/api/Makefile.inc b/test/common_plat/validation/api/Makefile.inc index ffba620..757ccad 100644 --- a/test/common_plat/validation/api/Makefile.inc +++ b/test/common_plat/validation/api/Makefile.inc @@ -1,16 +1 @@ -include $(top_srcdir)/test/Makefile.inc - -COMMON_DIR = $(top_builddir)/test/common_plat/common - -#the following option ensure that option '-I.' is not passed to gcc, -#therefore distinguishing between '#include "X"' and '#include <X>'. -#It allows common filenames (such as 'errno.h') to be used locally. -AUTOMAKE_OPTIONS = nostdinc - -AM_CFLAGS += -I$(top_srcdir)/test/common_plat/common -AM_LDFLAGS += -static - -LIBCUNIT_COMMON = $(COMMON_DIR)/libcunit_common.la -LIBCPUMASK_COMMON = $(COMMON_DIR)/libcpumask_common.la -LIBTHRMASK_COMMON = $(COMMON_DIR)/libthrmask_common.la -LIBODP = $(LIB)/libodphelper-linux.la $(LIB)/libodp-linux.la +include $(top_srcdir)/test/common_plat/validation/Makefile.inc diff --git a/test/common_plat/validation/drv/.gitignore b/test/common_plat/validation/drv/.gitignore new file mode 100644 index 0000000..7e563b8 --- /dev/null +++ b/test/common_plat/validation/drv/.gitignore @@ -0,0 +1,2 @@ +*.log +*.trs diff --git a/test/common_plat/validation/drv/Makefile.am b/test/common_plat/validation/drv/Makefile.am new file mode 100644 index 0000000..0dae3c3 --- /dev/null +++ b/test/common_plat/validation/drv/Makefile.am @@ -0,0 +1,6 @@ +ODPDRV_MODULES = atomic + +SUBDIRS = $(ODPDRV_MODULES) + +#The tests will need to retain the deprecated test implementation +AM_CFLAGS += -Wno-deprecated-declarations diff --git a/test/common_plat/validation/drv/Makefile.inc b/test/common_plat/validation/drv/Makefile.inc new file mode 100644 index 0000000..757ccad --- /dev/null +++ b/test/common_plat/validation/drv/Makefile.inc @@ -0,0 +1 @@ +include $(top_srcdir)/test/common_plat/validation/Makefile.inc diff --git a/test/common_plat/validation/drv/README b/test/common_plat/validation/drv/README new file mode 100644 index 0000000..d1a9e6f --- /dev/null +++ b/test/common_plat/validation/drv/README @@ -0,0 +1,35 @@ +Copyright (c) 2016, Linaro Limited +All rights reserved. + +SPDX-License-Identifier: BSD-3-Clause + + +To add tests in here, please observe the rules listed below. This list +is a brief overview, for a more detailed explanation of the test +framework refer to the ODP Implementers' Guide, which can built as +follows: + + ./configure --enable-user-guides + make + +Output will be in doc/output/. If this fails, check the documentation +section of the DEPENDENCIES file. + +Rules for all tests under this tree: + +1. Tests must be placed in the directory of the module they belong to. + +2. Tests must be platform agnostic, i.e. + + - should be written in plain C only. + - may only use C standard library functions, CUnit functions and of + course ODP functions + - should be expected to pass on all ODP implementations + + Tests that do not follow these rules should be placed in the platform + specific test area (currently platform/<platform>/test/). + +3. If a new ODP DRV module is created, please update the Makefile.am. + +4. Symbols exported from test libraries must respect the naming + convention detailed in the ODP Implementers' Guide. diff --git a/test/common_plat/validation/drv/atomic/Makefile.am b/test/common_plat/validation/drv/atomic/Makefile.am new file mode 100644 index 0000000..be48623 --- /dev/null +++ b/test/common_plat/validation/drv/atomic/Makefile.am @@ -0,0 +1,4 @@ +include ../Makefile.inc + +test_PROGRAMS = atomic_main$(EXEEXT) +dist_atomic_main_SOURCES = atomic_main.c diff --git a/test/common_plat/validation/drv/atomic/atomic_main.c b/test/common_plat/validation/drv/atomic/atomic_main.c new file mode 100644 index 0000000..44fb710 --- /dev/null +++ b/test/common_plat/validation/drv/atomic/atomic_main.c @@ -0,0 +1,10 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +int main(void) +{ + return 0; +} diff --git a/test/linux-generic/Makefile.am b/test/linux-generic/Makefile.am index f5cc52d..1cee6e7 100644 --- a/test/linux-generic/Makefile.am +++ b/test/linux-generic/Makefile.am @@ -2,6 +2,7 @@ include $(top_srcdir)/test/Makefile.inc TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/common_plat/validation
ALL_API_VALIDATION_DIR = ${top_builddir}/test/common_plat/validation/api +ALL_DRV_VALIDATION_DIR = ${top_builddir}/test/common_plat/validation/drv
SUBDIRS =
@@ -33,6 +34,7 @@ TESTS = validation/api/pktio/pktio_run.sh \ $(ALL_API_VALIDATION_DIR)/traffic_mngr/traffic_mngr_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/shmem/shmem_main$(EXEEXT) \ $(ALL_API_VALIDATION_DIR)/system/system_main$(EXEEXT) \ + $(ALL_DRV_VALIDATION_DIR)/atomic/atomic_main$(EXEEXT) \ ring/ring_main$(EXEEXT)
SUBDIRS += validation/api/pktio\
commit 90e456db5f983f3fff9126dd70f6fea907fed361 Author: Christophe Milard christophe.milard@linaro.org Date: Fri Jul 29 08:57:24 2016 +0200
linux-generic: drv: fixed macro typo
Signed-off-by: Christophe Milard christophe.milard@linaro.org Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/include/odp/drv/byteorder.h b/platform/linux-generic/include/odp/drv/byteorder.h index 709a520..3991b26 100644 --- a/platform/linux-generic/include/odp/drv/byteorder.h +++ b/platform/linux-generic/include/odp/drv/byteorder.h @@ -10,8 +10,8 @@ * ODPDRV byteorder */
-#ifndef ODPDRVP_PLAT_BYTEORDER_H_ -#define ODPDRVP_PLAT_BYTEORDER_H_ +#ifndef ODPDRV_PLAT_BYTEORDER_H_ +#define ODPDRV_PLAT_BYTEORDER_H_
#ifdef __cplusplus extern "C" { @@ -27,7 +27,7 @@ extern "C" {
static inline uint16_t odpdrv_be_to_cpu_16(odpdrv_u16be_t be16) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return __odpdrv_builtin_bswap16((__odpdrv_force uint16_t)be16); #else return (__odpdrv_force uint16_t)be16; @@ -36,7 +36,7 @@ static inline uint16_t odpdrv_be_to_cpu_16(odpdrv_u16be_t be16)
static inline uint32_t odpdrv_be_to_cpu_32(odpdrv_u32be_t be32) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return __builtin_bswap32((__odpdrv_force uint32_t)be32); #else return (__odpdrv_force uint32_t)be32; @@ -45,7 +45,7 @@ static inline uint32_t odpdrv_be_to_cpu_32(odpdrv_u32be_t be32)
static inline uint64_t odpdrv_be_to_cpu_64(odpdrv_u64be_t be64) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return __builtin_bswap64((__odpdrv_force uint64_t)be64); #else return (__odpdrv_force uint64_t)be64; @@ -54,7 +54,7 @@ static inline uint64_t odpdrv_be_to_cpu_64(odpdrv_u64be_t be64)
static inline odpdrv_u16be_t odpdrv_cpu_to_be_16(uint16_t cpu16) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force odpdrv_u16be_t)__odpdrv_builtin_bswap16(cpu16); #else return (__odpdrv_force odpdrv_u16be_t)cpu16; @@ -63,7 +63,7 @@ static inline odpdrv_u16be_t odpdrv_cpu_to_be_16(uint16_t cpu16)
static inline odpdrv_u32be_t odpdrv_cpu_to_be_32(uint32_t cpu32) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force odpdrv_u32be_t)__builtin_bswap32(cpu32); #else return (__odpdrv_force odpdrv_u32be_t)cpu32; @@ -72,7 +72,7 @@ static inline odpdrv_u32be_t odpdrv_cpu_to_be_32(uint32_t cpu32)
static inline odpdrv_u64be_t odpdrv_cpu_to_be_64(uint64_t cpu64) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force odpdrv_u64be_t)__builtin_bswap64(cpu64); #else return (__odpdrv_force odpdrv_u64be_t)cpu64; @@ -81,7 +81,7 @@ static inline odpdrv_u64be_t odpdrv_cpu_to_be_64(uint64_t cpu64)
static inline uint16_t odpdrv_le_to_cpu_16(odpdrv_u16le_t le16) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force uint16_t)le16; #else return __odpdrv_builtin_bswap16((__odpdrv_force uint16_t)le16); @@ -90,7 +90,7 @@ static inline uint16_t odpdrv_le_to_cpu_16(odpdrv_u16le_t le16)
static inline uint32_t odpdrv_le_to_cpu_32(odpdrv_u32le_t le32) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force uint32_t)le32; #else return __builtin_bswap32((__odpdrv_force uint32_t)le32); @@ -99,7 +99,7 @@ static inline uint32_t odpdrv_le_to_cpu_32(odpdrv_u32le_t le32)
static inline uint64_t odpdrv_le_to_cpu_64(odpdrv_u64le_t le64) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force uint64_t)le64; #else return __builtin_bswap64((__odpdrv_force uint64_t)le64); @@ -108,7 +108,7 @@ static inline uint64_t odpdrv_le_to_cpu_64(odpdrv_u64le_t le64)
static inline odpdrv_u16le_t odpdrv_cpu_to_le_16(uint16_t cpu16) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force odpdrv_u16le_t)cpu16; #else return (__odpdrv_force odpdrv_u16le_t)__odpdrv_builtin_bswap16(cpu16); @@ -117,7 +117,7 @@ static inline odpdrv_u16le_t odpdrv_cpu_to_le_16(uint16_t cpu16)
static inline odpdrv_u32le_t odpdrv_cpu_to_le_32(uint32_t cpu32) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force odpdrv_u32le_t)cpu32; #else return (__odpdrv_force odpdrv_u32le_t)__builtin_bswap32(cpu32); @@ -126,7 +126,7 @@ static inline odpdrv_u32le_t odpdrv_cpu_to_le_32(uint32_t cpu32)
static inline odpdrv_u64le_t odpdrv_cpu_to_le_64(uint64_t cpu64) { -#if ODPDRVP_BYTE_ORDER == ODPDRVP_LITTLE_ENDIAN +#if ODPDRV_BYTE_ORDER == ODPDRV_LITTLE_ENDIAN return (__odpdrv_force odpdrv_u64le_t)cpu64; #else return (__odpdrv_force odpdrv_u64le_t)__builtin_bswap64(cpu64);
commit e45799924207308fcac2928a64e6ecc3ca102a8c Author: Christophe Milard christophe.milard@linaro.org Date: Fri Jul 29 08:57:23 2016 +0200
linux-generic: drv: fix align.h for new arch structure
The arch directory structure has been changed. The linux-generic DRV align.h file, which makes use of the cache line size defined in this arch directory is updated here to match this new structure.
Signed-off-by: Christophe Milard christophe.milard@linaro.org Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/include/odp/drv/align.h b/platform/linux-generic/include/odp/drv/align.h index eded2e3..7636f89 100644 --- a/platform/linux-generic/include/odp/drv/align.h +++ b/platform/linux-generic/include/odp/drv/align.h @@ -17,6 +17,8 @@ extern "C" { #endif
+#include <odp/api/cpu_arch.h> + /** @ingroup odpdrv_compiler_optim * @{ */ @@ -31,16 +33,12 @@ extern "C" {
#define ODPDRV_FIELD_SIZEOF(type, member) sizeof(((type *)0)->member)
-#if defined __arm__ || defined __aarch64__ - -#define ODPDRV_CACHE_LINE_SIZE 64 - -#endif - #else #error Non-gcc compatible compiler #endif
+#define ODPDRV_CACHE_LINE_SIZE _ODP_CACHE_LINE_SIZE + #define ODPDRV_PAGE_SIZE 4096
#define ODPDRV_ALIGNED_CACHE ODPDRV_ALIGNED(ODPDRV_CACHE_LINE_SIZE)
commit a47f5fbb6ed8122a3453f5f5a3fabf53a98d7fdf Author: Christophe Milard christophe.milard@linaro.org Date: Fri Jul 29 08:57:22 2016 +0200
linux-generic: make drv interface part of the distribution
Make sure that the file odp_drv.h is part if a distribution, as odp_api.h.
Signed-off-by: Christophe Milard christophe.milard@linaro.org Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index d3ab31b..747e96f 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -9,7 +9,8 @@ AM_CFLAGS += -I$(top_srcdir)/include
include_HEADERS = \ $(top_srcdir)/include/odp.h \ - $(top_srcdir)/include/odp_api.h + $(top_srcdir)/include/odp_api.h \ + $(top_srcdir)/include/odp_drv.h
odpincludedir= $(includedir)/odp odpinclude_HEADERS = \
-----------------------------------------------------------------------
Summary of changes: platform/linux-generic/Makefile.am | 3 +- platform/linux-generic/include/odp/drv/align.h | 10 +- platform/linux-generic/include/odp/drv/byteorder.h | 28 +-- test/common_plat/m4/configure.m4 | 6 +- test/common_plat/validation/Makefile.am | 3 +- test/common_plat/validation/{api => }/Makefile.inc | 0 test/common_plat/validation/api/Makefile.inc | 17 +- .../common_plat/validation/{api => drv}/.gitignore | 0 test/common_plat/validation/drv/Makefile.am | 6 + test/common_plat/validation/drv/Makefile.inc | 1 + test/common_plat/validation/{api => drv}/README | 4 +- .../validation/{api => drv}/atomic/.gitignore | 0 .../validation/{api => drv}/atomic/Makefile.am | 0 .../validation/{api => drv}/atomic/atomic.c | 221 +++++++++++---------- .../validation/{api => drv}/atomic/atomic.h | 2 +- .../validation/{api => drv}/atomic/atomic_main.c | 2 +- test/linux-generic/Makefile.am | 2 + 17 files changed, 154 insertions(+), 151 deletions(-) copy test/common_plat/validation/{api => }/Makefile.inc (100%) copy test/common_plat/validation/{api => drv}/.gitignore (100%) create mode 100644 test/common_plat/validation/drv/Makefile.am create mode 100644 test/common_plat/validation/drv/Makefile.inc copy test/common_plat/validation/{api => drv}/README (91%) copy test/common_plat/validation/{api => drv}/atomic/.gitignore (100%) copy test/common_plat/validation/{api => drv}/atomic/Makefile.am (100%) copy test/common_plat/validation/{api => drv}/atomic/atomic.c (74%) copy test/common_plat/validation/{api => drv}/atomic/atomic.h (95%) copy test/common_plat/validation/{api => drv}/atomic/atomic_main.c (81%)
hooks/post-receive