I am not able to reproduce a segfault, I will catch you on a HO to look for
clues.

On 23 March 2015 at 06:36, Maxim Uvarov <[email protected]> wrote:

> That patch segfaults:
>
> Core was generated by `./odp_synchronizers'.
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0  memset () at ../sysdeps/x86_64/memset.S:78
> 78    ../sysdeps/x86_64/memset.S: No such file or directory.
> (gdb) bt
> #0  memset () at ../sysdeps/x86_64/memset.S:78
> #1  0x00000000004039e5 in tests_global_init () at odp_synchronizers.c:1057
> #2  0x0000000000403ce5 in main () at common/odp_cunit_common.c:68
> (gdb) l
> 73    in ../sysdeps/x86_64/memset.S
> (gdb) up
> #1  0x00000000004039e5 in tests_global_init () at odp_synchronizers.c:1057
> 1057        memset(global_mem, 0, sizeof(global_shared_mem_t));
> (gdb) p global_mem
> $1 = (global_shared_mem_t *) 0x0


I am not able to reproduce a segfault, I will catch you on a HO to look for
clues.


>
>
> On 03/20/15 21:23, Bill Fischofer wrote:
>
>> Fix typo in Maxim's e-mail address.
>>
>> On Fri, Mar 20, 2015 at 1:22 PM, Bill Fischofer <
>> [email protected] <mailto:[email protected]>> wrote:
>>
>>
>>
>>     On Fri, Mar 20, 2015 at 1:19 PM, Mike Holmes
>>     <[email protected] <mailto:[email protected]>> wrote:
>>
>>         The api_test directory is being deleted, any test with value
>>         needs to migrate
>>         Moved this test to performance because it can be used to gauge the
>>         ability of the atomics to scale with core count.
>>         The move required that odp_atomic run all tests by default
>>
>>         Signed-off-by: Mike Holmes <[email protected]
>>         <mailto:[email protected]>>
>>
>>
>>     Reviewed-by: Bill Fischofer <[email protected]
>>     <mailto:[email protected]>>
>>
>>
>>         ---
>>          test/api_test/.gitignore    |   1 -
>>          test/api_test/Makefile.am     |   6 +-
>>          test/api_test/odp_atomic_test.h     |  51 --------
>>          test/api_test/odp_common.c    |   2 +-
>>          test/performance/.gitignore     |   1 +
>>          test/performance/Makefile.am    |   5 +-
>>          .../odp_atomic_test.c => performance/odp_atomic.c} | 136
>>         ++++++++++++++++++++-
>>          7 files changed, 138 insertions(+), 64 deletions(-)
>>          delete mode 100644 test/api_test/odp_atomic_test.h
>>          rename test/{api_test/odp_atomic_test.c =>
>>         performance/odp_atomic.c} (63%)
>>
>>         diff --git a/test/api_test/.gitignore b/test/api_test/.gitignore
>>         index 84159e1..950f443 100644
>>         --- a/test/api_test/.gitignore
>>         +++ b/test/api_test/.gitignore
>>         @@ -1,3 +1,2 @@
>>         -odp_atomic
>>          odp_ring
>>          odp_shm
>>         diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am
>>         index 86e1bc2..f231fee 100644
>>         --- a/test/api_test/Makefile.am
>>         +++ b/test/api_test/Makefile.am
>>         @@ -1,21 +1,17 @@
>>          include $(top_srcdir)/test/Makefile.inc
>>
>>         -bin_PROGRAMS = odp_atomic odp_shm odp_ring
>>         +bin_PROGRAMS = odp_shm odp_ring
>>
>>         -odp_atomic_CFLAGS = $(AM_CFLAGS)
>>          odp_shm_CFLAGS = $(AM_CFLAGS)
>>          odp_ring_CFLAGS = $(AM_CFLAGS)
>>
>>         -odp_atomic_LDFLAGS = $(AM_LDFLAGS) -static
>>          odp_shm_LDFLAGS = $(AM_LDFLAGS) -static
>>          odp_ring_LDFLAGS = $(AM_LDFLAGS) -static
>>
>>          noinst_HEADERS = \
>>         -  $(top_srcdir)/test/api_test/odp_atomic_test.h \
>>         $(top_srcdir)/test/api_test/odp_common.h \
>>         $(top_srcdir)/test/api_test/odp_shm_test.h \
>>         $(top_srcdir)/test/test_debug.h
>>
>>         -dist_odp_atomic_SOURCES = odp_atomic_test.c odp_common.c
>>          dist_odp_shm_SOURCES = odp_shm_test.c odp_common.c
>>          dist_odp_ring_SOURCES = odp_ring_test.c odp_common.c
>>         diff --git a/test/api_test/odp_atomic_test.h
>>         b/test/api_test/odp_atomic_test.h
>>         deleted file mode 100644
>>         index 89e7748..0000000
>>         --- a/test/api_test/odp_atomic_test.h
>>         +++ /dev/null
>>         @@ -1,51 +0,0 @@
>>         -/* Copyright (c) 2013, Linaro Limited
>>         - * All rights reserved.
>>         - *
>>         - * SPDX-License-Identifier:     BSD-3-Clause
>>         - */
>>         -
>>         -#ifndef ODP_ATOMIC_TEST_H_
>>         -#define ODP_ATOMIC_TEST_H_
>>         -
>>         -#include <odp.h>
>>         -#include <odp/helper/linux.h>
>>         -
>>         -/**
>>         - * add_sub_cnt could be any valid value
>>         - * so to excercise explicit atomic_add/sub
>>         - * ops. For now using 5..
>>         - */
>>         -#define ADD_SUB_CNT    5
>>         -
>>         -#define        CNT 500000
>>         -#define        U32_INIT_VAL    (1UL << 10)
>>         -#define        U64_INIT_VAL    (1ULL << 33)
>>         -
>>         -typedef enum {
>>         -       TEST_MIX = 1, /* Must be first test case num */
>>         -       TEST_INC_DEC_U32,
>>         -       TEST_ADD_SUB_U32,
>>         -       TEST_INC_DEC_64,
>>         -       TEST_ADD_SUB_64,
>>         -       TEST_MAX,
>>         -} odp_test_atomic_t;
>>         -
>>         -
>>         -void test_atomic_inc_dec_u32(void);
>>         -void test_atomic_add_sub_u32(void);
>>         -void test_atomic_inc_dec_64(void);
>>         -void test_atomic_add_sub_64(void);
>>         -void test_atomic_inc_u32(void);
>>         -void test_atomic_dec_u32(void);
>>         -void test_atomic_add_u32(void);
>>         -void test_atomic_sub_u32(void);
>>         -void test_atomic_inc_64(void);
>>         -void test_atomic_dec_64(void);
>>         -void test_atomic_add_64(void);
>>         -void test_atomic_sub_64(void);
>>         -void test_atomic_init(void);
>>         -void test_atomic_basic(void);
>>         -void test_atomic_store(void);
>>         -int test_atomic_validate(void);
>>         -
>>         -#endif /* ODP_ATOMIC_TEST_H_ */
>>         diff --git a/test/api_test/odp_common.c
>>         b/test/api_test/odp_common.c
>>         index 5158d87..18b365e 100644
>>         --- a/test/api_test/odp_common.c
>>         +++ b/test/api_test/odp_common.c
>>         @@ -14,10 +14,10 @@
>>          #include <odp.h>
>>          #include <odp/helper/linux.h>
>>          #include <odp_common.h>
>>         -#include <odp_atomic_test.h>
>>          #include <odp_shm_test.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*/
>>         diff --git a/test/performance/.gitignore
>>         b/test/performance/.gitignore
>>         index 9ccb102..1bdb90d 100644
>>         --- a/test/performance/.gitignore
>>         +++ b/test/performance/.gitignore
>>         @@ -1,3 +1,4 @@
>>          *.log
>>          *.trs
>>          odp_scheduling
>>         +odp_atomic
>>         diff --git a/test/performance/Makefile.am
>>         b/test/performance/Makefile.am
>>         index 54cf529..b0f7457 100644
>>         --- a/test/performance/Makefile.am
>>         +++ b/test/performance/Makefile.am
>>         @@ -2,7 +2,7 @@ include $(top_srcdir)/test/Makefile.inc
>>
>>          TESTS_ENVIRONMENT = TEST_DIR=${builddir}
>>
>>         -EXECUTABLES =
>>         +EXECUTABLES = odp_atomic
>>
>>          COMPILE_ONLY = odp_scheduling
>>
>>         @@ -14,10 +14,13 @@ endif
>>
>>          bin_PROGRAMS = $(EXECUTABLES) $(COMPILE_ONLY)
>>
>>         +odp_atomic_LDFLAGS = $(AM_LDFLAGS) -static
>>         +odp_atomic_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test
>>          odp_scheduling_LDFLAGS = $(AM_LDFLAGS) -static
>>          odp_scheduling_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test
>>
>>          noinst_HEADERS = \
>>         $(top_srcdir)/test/test_debug.h
>>
>>         +dist_odp_atomic_SOURCES = odp_atomic.c
>>          dist_odp_scheduling_SOURCES = odp_scheduling.c
>>         diff --git a/test/api_test/odp_atomic_test.c
>>         b/test/performance/odp_atomic.c
>>         similarity index 63%
>>         rename from test/api_test/odp_atomic_test.c
>>         rename to test/performance/odp_atomic.c
>>         index 6ccdc35..241295c 100644
>>         --- a/test/api_test/odp_atomic_test.c
>>         +++ b/test/performance/odp_atomic.c
>>         @@ -6,14 +6,68 @@
>>
>>          #include <string.h>
>>          #include <sys/time.h>
>>         -#include <odp_common.h>
>>         -#include <odp_atomic_test.h>
>>          #include <test_debug.h>
>>
>>         +#include <odp.h>
>>         +#include <odp/helper/linux.h>
>>         +
>>         +static void test_atomic_inc_dec_u32(void);
>>         +static void test_atomic_add_sub_u32(void);
>>         +static void test_atomic_inc_dec_64(void);
>>         +static void test_atomic_add_sub_64(void);
>>         +static void test_atomic_inc_u32(void);
>>         +static void test_atomic_dec_u32(void);
>>         +static void test_atomic_add_u32(void);
>>         +static void test_atomic_sub_u32(void);
>>         +static void test_atomic_inc_64(void);
>>         +static void test_atomic_dec_64(void);
>>         +static void test_atomic_add_64(void);
>>         +static void test_atomic_sub_64(void);
>>         +static void test_atomic_init(void);
>>         +static void test_atomic_basic(void);
>>         +static void test_atomic_store(void);
>>         +static int test_atomic_validate(void);
>>         +static int odp_test_global_init(void);
>>         +static void odp_print_system_info(void);
>>         +
>>         +/**
>>         + * Thread argument
>>         + */
>>         +typedef struct {
>>         +       int testcase; /**< specifies which set of API's to
>>         exercise */
>>         +       int numthrds; /**< no of pthreads to create */
>>         +} pthrd_arg;
>>         +
>>         +static int odp_test_thread_create(void *(*start_routine)
>>         (void *), pthrd_arg *);
>>         +static int odp_test_thread_exit(pthrd_arg *);
>>         +
>>         +#define MAX_WORKERS           32 /**< Max worker threads */
>>         +/**
>>         + * add_sub_cnt could be any valid value
>>         + * so to excercise explicit atomic_add/sub
>>         + * ops. For now using 5..
>>         + */
>>         +#define ADD_SUB_CNT    5
>>         +#define        CNT 500000
>>         +#define        U32_INIT_VAL    (1UL << 10)
>>         +#define        U64_INIT_VAL    (1ULL << 33)
>>         +
>>         +typedef enum {
>>         +       TEST_MIX = 1, /* Must be first test case num */
>>         +       TEST_INC_DEC_U32,
>>         +       TEST_ADD_SUB_U32,
>>         +       TEST_INC_DEC_64,
>>         +       TEST_ADD_SUB_64,
>>         +       TEST_MAX,
>>         +} odp_test_atomic_t;
>>         +
>>          static odp_atomic_u32_t a32u;
>>          static odp_atomic_u64_t a64u;
>>         -
>>          static odp_barrier_t barrier;
>>         +static odph_linux_pthread_t thread_tbl[MAX_WORKERS]; /**<
>>         worker threads table*/
>>         +static int num_workers; /**< number of workers >----*/
>>         +
>>         +
>>
>>          static const char * const test_name[] = {
>>                 "dummy",
>>         @@ -224,17 +278,87 @@ static void *run_thread(void *arg)
>>                 return parg;
>>          }
>>
>>         +/** create test thread */
>>         +int odp_test_thread_create(void *func_ptr(void *), pthrd_arg
>>         *arg)
>>         +{
>>         +       odp_cpumask_t cpumask;
>>         +
>>         +       /* Create and init additional threads */
>>         +       odph_linux_cpumask_default(&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;
>>         +}
>>         +
>>         +/** 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;
>>         +}
>>         +
>>         +/**
>>         + * 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");
>>         +}
>>         +
>>         +
>>          int main(int argc, char *argv[])
>>          {
>>                 pthrd_arg thrdarg;
>>         -       int test_type = 0, pthrdnum = 0, i = 0, cnt = argc - 1;
>>         +       int test_type = 1, pthrdnum = 0, i = 0, cnt = argc - 1;
>>                 char c;
>>                 int result;
>>
>>         -       if (argc == 1 || argc % 2 == 0) {
>>         +       if (argc == 0 || argc % 2 == 0) {
>>                         usage();
>>                         goto err_exit;
>>                 }
>>         +
>>                 if (odp_test_global_init() != 0)
>>                         goto err_exit;
>>                 odp_print_system_info();
>>         @@ -297,3 +421,5 @@ int main(int argc, char *argv[])
>>          err_exit:
>>                 return -1;
>>          }
>>         +
>>         +
>>         --
>>         2.1.0
>>
>>
>>         _______________________________________________
>>         lng-odp mailing list
>>         [email protected] <mailto:[email protected]>
>>         http://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
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to