cleanup dead code caused by the removal of the --with-threads configure option
Этот коммит содержится в:
родитель
7a55d49ca7
Коммит
661c35ca67
@ -81,21 +81,6 @@ AC_DEFUN([OPAL_CHECK_OPENFABRICS],[
|
||||
ompi_check_openib_$1_save_LDFLAGS="$LDFLAGS"
|
||||
ompi_check_openib_$1_save_LIBS="$LIBS"
|
||||
|
||||
AS_IF([test "$ompi_check_openib_happy" = "yes"],
|
||||
[AS_IF([test "$THREAD_TYPE" != "posix" -a "$memory_ptmalloc2_happy" = "yes"],
|
||||
[AS_IF([test "$enable_ptmalloc2_internal" = "yes"],
|
||||
[AC_MSG_WARN([POSIX threads are disabled, but])
|
||||
AC_MSG_WARN([--enable-ptmalloc2-internal was specified. This will])
|
||||
AC_MSG_WARN([cause memory corruption with OpenFabrics.])
|
||||
AC_MSG_WARN([Not building component.])
|
||||
ompi_check_openib_happy="no"],
|
||||
[AC_MSG_WARN([POSIX threads are disabled, but the ptmalloc2 memory])
|
||||
AC_MSG_WARN([manager is being built. Compiling MPI applications with])
|
||||
AC_MSG_WARN([-lopenmpi-malloc will result in memory corruption; Open])
|
||||
AC_MSG_WARN([MPI will disable the openib BTL at run-time if such a])
|
||||
AC_MSG_WARN([combination is detected.])
|
||||
AC_MSG_WARN([You have been warned.])])])])
|
||||
|
||||
AS_IF([test "$ompi_check_openib_happy" = "yes"],
|
||||
[AC_CHECK_HEADERS(
|
||||
fcntl.h sys/poll.h,
|
||||
|
@ -33,12 +33,8 @@ AC_DEFUN([OPAL_CONFIG_THREADS],[
|
||||
# configure threads
|
||||
#
|
||||
|
||||
# create templates
|
||||
AH_TEMPLATE([OPAL_HAVE_POSIX_THREADS],
|
||||
[Do we have POSIX threads])
|
||||
|
||||
#
|
||||
# Check for thread types - add your type here...
|
||||
# Check we have POSIX threads
|
||||
#
|
||||
OPAL_CONFIG_POSIX_THREADS(HAVE_POSIX_THREADS=1, HAVE_POSIX_THREADS=0)
|
||||
AC_MSG_CHECKING([for working POSIX threads package])
|
||||
@ -59,8 +55,6 @@ if test "$HAVE_POSIX_THREADS" = "0"; then
|
||||
AC_MSG_ERROR(["*** Can not continue"])
|
||||
fi
|
||||
|
||||
AC_DEFINE(OPAL_HAVE_POSIX_THREADS, 1)
|
||||
|
||||
THREAD_CFLAGS="$PTHREAD_CFLAGS"
|
||||
THREAD_FCFLAGS="$PTHREAD_FCFLAGS"
|
||||
THREAD_CXXFLAGS="$PTHREAD_CXXFLAGS"
|
||||
@ -71,9 +65,6 @@ THREAD_LIBS="$PTHREAD_LIBS"
|
||||
|
||||
OPAL_CHECK_PTHREAD_PIDS
|
||||
|
||||
THREAD_TYPE = "posix"
|
||||
AM_CONDITIONAL(OPAL_HAVE_POSIX_THREADS, 1)
|
||||
|
||||
AC_DEFINE_UNQUOTED([OPAL_ENABLE_MULTI_THREADS], [1],
|
||||
[Whether we should enable thread support within the OPAL code base])
|
||||
|
||||
|
@ -6,6 +6,8 @@
|
||||
* reserved.
|
||||
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2012-2013 Inria. All rights reserved.
|
||||
* Copyright (c) 2014-2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Intel, Inc. All rights reserved.
|
||||
*
|
||||
* $COPYRIGHT$
|
||||
@ -185,7 +187,6 @@ static inline int memchecker_comm(MPI_Comm comm)
|
||||
opal_memchecker_base_isdefined (&comm->c_lock.super.cls_init_file_name, sizeof(const char *));
|
||||
opal_memchecker_base_isdefined (&comm->c_lock.super.cls_init_lineno, sizeof(int));
|
||||
#endif
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
/*
|
||||
opal_memchecker_base_isdefined (&comm->c_lock.m_lock_pthread.__m_reserved, sizeof(int));
|
||||
opal_memchecker_base_isdefined (&comm->c_lock.m_lock_pthread.__m_count, sizeof(int));
|
||||
@ -194,7 +195,6 @@ static inline int memchecker_comm(MPI_Comm comm)
|
||||
opal_memchecker_base_isdefined (&comm->c_lock.m_lock_pthread.__m_lock.__status, sizeof(long int));
|
||||
opal_memchecker_base_isdefined (&comm->c_lock.m_lock_pthread.__m_lock.__spinlock, sizeof(int));
|
||||
*/
|
||||
#endif
|
||||
/*
|
||||
* The storage of a union has the size of the initialized member.
|
||||
* Here we check the whole union.
|
||||
|
@ -3,6 +3,8 @@
|
||||
* Copyright (c) 2012 Sandia National Laboratories. All rights reserved.
|
||||
* Copyright (c) 2014 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -20,13 +22,11 @@
|
||||
struct ompi_osc_sm_global_state_t {
|
||||
int use_barrier_for_fence;
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
pthread_mutex_t mtx;
|
||||
pthread_cond_t cond;
|
||||
|
||||
int sense;
|
||||
int32_t count;
|
||||
#endif
|
||||
};
|
||||
typedef struct ompi_osc_sm_global_state_t ompi_osc_sm_global_state_t;
|
||||
|
||||
@ -74,9 +74,7 @@ struct ompi_osc_sm_module_t {
|
||||
ompi_group_t *start_group;
|
||||
ompi_group_t *post_group;
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
int my_sense;
|
||||
#endif
|
||||
|
||||
enum ompi_osc_sm_locktype_t *outstanding_locks;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007-2014 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2014 Research Organization for Information Science
|
||||
* Copyright (c) 2014-2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
@ -288,23 +288,19 @@ void ompi_info_do_config(bool want_all)
|
||||
fortran_have_ignore_tkr = strdup("no");
|
||||
}
|
||||
|
||||
if (OPAL_HAVE_POSIX_THREADS) { /* should just test OPAL_HAVE_THREADS */
|
||||
#if OMPI_RTE_ORTE
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
|
||||
(OPAL_HAVE_POSIX_THREADS ? "posix" : "type unknown"), /* "type unknown" can presumably never happen */
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
|
||||
"posix",
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
#else
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, Event lib: yes)",
|
||||
(OPAL_HAVE_POSIX_THREADS ? "posix" : "type unknown"), /* "type unknown" can presumably never happen */
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, Event lib: yes)",
|
||||
"posix",
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
#endif
|
||||
} else {
|
||||
threads = strdup("no");
|
||||
}
|
||||
|
||||
(void)asprintf(&ft_support, "%s (checkpoint thread: %s)",
|
||||
OPAL_ENABLE_FT ? "yes" : "no", OPAL_ENABLE_FT_THREAD ? "yes" : "no");
|
||||
|
@ -13,6 +13,8 @@
|
||||
* Copyright (c) 2009-2013 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2013 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -68,9 +70,6 @@
|
||||
*
|
||||
**********************************************************************/
|
||||
|
||||
/* Do we have posix or solaris thread lib */
|
||||
#define OPAL_HAVE_THREADS (OPAL_HAVE_POSIX_THREADS)
|
||||
|
||||
/*
|
||||
* BEGIN_C_DECLS should be used at the beginning of your declarations,
|
||||
* so that C++ compilers don't mangle their names. Use END_C_DECLS at
|
||||
|
@ -358,7 +358,6 @@ static int create_srq(mca_btl_openib_module_t *openib_btl)
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
{
|
||||
opal_mutex_t *lock = &mca_btl_openib_component.srq_manager.lock;
|
||||
opal_hash_table_t *srq_addr_table = &mca_btl_openib_component.srq_manager.srq_addr_table;
|
||||
@ -375,7 +374,6 @@ static int create_srq(mca_btl_openib_module_t *openib_btl)
|
||||
}
|
||||
opal_mutex_unlock(lock);
|
||||
}
|
||||
#endif
|
||||
rd_num = mca_btl_openib_component.qp_infos[qp].rd_num;
|
||||
rd_curr_num = openib_btl->qps[qp].u.srq_qp.rd_curr_num = mca_btl_openib_component.qp_infos[qp].u.srq_qp.rd_init;
|
||||
|
||||
@ -632,7 +630,6 @@ static int prepare_device_for_use (mca_btl_openib_device_t *device)
|
||||
OBJ_CONSTRUCT(&device->qps[qp_index].recv_free, ompi_free_list_t);
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
if(mca_btl_openib_component.use_async_event_thread) {
|
||||
mca_btl_openib_async_cmd_t async_command;
|
||||
|
||||
@ -662,7 +659,6 @@ static int prepare_device_for_use (mca_btl_openib_device_t *device)
|
||||
device->thread.t_arg = device;
|
||||
device->progress = false;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAVE_XRC
|
||||
/* if user configured to run with XRC qp and the device doesn't
|
||||
@ -1617,7 +1613,6 @@ static int mca_btl_openib_finalize_resources(struct mca_btl_base_module_t* btl)
|
||||
MCA_BTL_OPENIB_CLEAN_PENDING_FRAGS(
|
||||
&openib_btl->qps[qp].u.srq_qp.pending_frags[1]);
|
||||
if (NULL != openib_btl->qps[qp].u.srq_qp.srq) {
|
||||
#if OPAL_HAVE_THREADS
|
||||
opal_mutex_t *lock =
|
||||
&mca_btl_openib_component.srq_manager.lock;
|
||||
|
||||
@ -1633,7 +1628,6 @@ static int mca_btl_openib_finalize_resources(struct mca_btl_base_module_t* btl)
|
||||
rc = OPAL_ERROR;
|
||||
}
|
||||
opal_mutex_unlock(lock);
|
||||
#endif
|
||||
if (0 != ibv_destroy_srq(openib_btl->qps[qp].u.srq_qp.srq)) {
|
||||
BTL_VERBOSE(("Failed to close SRQ %d", qp));
|
||||
rc = OPAL_ERROR;
|
||||
|
@ -138,7 +138,6 @@ typedef enum {
|
||||
BTL_OPENIB_DT_ALL
|
||||
} btl_openib_device_type_t;
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
/* The structer for manage all BTL SRQs */
|
||||
typedef struct mca_btl_openib_srq_manager_t {
|
||||
opal_mutex_t lock;
|
||||
@ -147,7 +146,6 @@ typedef struct mca_btl_openib_srq_manager_t {
|
||||
pointers that associated with these SRQs */
|
||||
opal_hash_table_t srq_addr_table;
|
||||
} mca_btl_openib_srq_manager_t;
|
||||
#endif
|
||||
|
||||
struct mca_btl_openib_component_t {
|
||||
mca_btl_base_component_2_0_0_t super; /**< base BTL component */
|
||||
@ -228,7 +226,6 @@ struct mca_btl_openib_component_t {
|
||||
int apm_lmc;
|
||||
int apm_ports;
|
||||
unsigned int buffer_alignment; /**< Preferred communication buffer alignment in Bytes (must be power of two) */
|
||||
#if OPAL_HAVE_THREADS
|
||||
int32_t error_counter; /**< Counts number on error events that we got on all devices */
|
||||
int async_pipe[2]; /**< Pipe for comunication with async event thread */
|
||||
int async_comp_pipe[2]; /**< Pipe for async thread comunication with main thread */
|
||||
@ -237,7 +234,6 @@ struct mca_btl_openib_component_t {
|
||||
mca_btl_openib_srq_manager_t srq_manager; /**< Hash table for all BTL SRQs */
|
||||
#if BTL_OPENIB_FAILOVER_ENABLED
|
||||
bool port_error_failover; /**< Report port errors to speed up failover */
|
||||
#endif
|
||||
#endif
|
||||
/* declare as an int instead of btl_openib_device_type_t since there is no
|
||||
guarantee about the size of an enum. this value will be registered as an
|
||||
@ -393,10 +389,8 @@ typedef struct mca_btl_openib_device_t {
|
||||
uint16_t hp_cq_polls;
|
||||
uint16_t eager_rdma_polls;
|
||||
bool pollme;
|
||||
#if OPAL_HAVE_THREADS
|
||||
volatile bool got_fatal_event;
|
||||
volatile bool got_port_event;
|
||||
#endif
|
||||
#if HAVE_XRC
|
||||
#if OPAL_HAVE_CONNECTX_XRC_DOMAINS
|
||||
struct ibv_xrcd *xrcd;
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
#include "opal_config.h"
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
#include <infiniband/verbs.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/poll.h>
|
||||
@ -720,5 +719,3 @@ int start_async_event_thread(void)
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -101,9 +101,7 @@
|
||||
#if BTL_OPENIB_FAILOVER_ENABLED
|
||||
#include "btl_openib_failover.h"
|
||||
#endif
|
||||
#if OPAL_HAVE_THREADS
|
||||
#include "btl_openib_async.h"
|
||||
#endif
|
||||
#include "connect/base.h"
|
||||
#include "btl_openib_ip.h"
|
||||
|
||||
@ -206,14 +204,12 @@ static int btl_openib_component_register(void)
|
||||
*/
|
||||
static int btl_openib_component_open(void)
|
||||
{
|
||||
#if OPAL_HAVE_THREADS
|
||||
opal_mutex_t *lock = &mca_btl_openib_component.srq_manager.lock;
|
||||
opal_hash_table_t *srq_addr_table = &mca_btl_openib_component.srq_manager.srq_addr_table;
|
||||
|
||||
/* Construct hash table that stores pointers to SRQs */
|
||||
OBJ_CONSTRUCT(lock, opal_mutex_t);
|
||||
OBJ_CONSTRUCT(srq_addr_table, opal_hash_table_t);
|
||||
#endif
|
||||
|
||||
/* initialize state */
|
||||
mca_btl_openib_component.ib_num_btls = 0;
|
||||
@ -241,7 +237,6 @@ static int btl_openib_component_close(void)
|
||||
{
|
||||
int rc = OPAL_SUCCESS;
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
/* Tell the async thread to shutdown */
|
||||
if (mca_btl_openib_component.use_async_event_thread &&
|
||||
0 != mca_btl_openib_component.async_thread) {
|
||||
@ -265,7 +260,6 @@ static int btl_openib_component_close(void)
|
||||
|
||||
OBJ_DESTRUCT(&mca_btl_openib_component.srq_manager.lock);
|
||||
OBJ_DESTRUCT(&mca_btl_openib_component.srq_manager.srq_addr_table);
|
||||
#endif
|
||||
|
||||
opal_btl_openib_connect_base_finalize();
|
||||
opal_btl_openib_fd_finalize();
|
||||
@ -748,7 +742,6 @@ static int init_one_port(opal_list_t *btl_list, mca_btl_openib_device_t *device,
|
||||
lmc = mca_btl_openib_component.max_lmc;
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
/* APM support -- only meaningful if async event support is
|
||||
enabled. If async events are not enabled, then there's nothing
|
||||
to listen for the APM event to load the new path, so it's not
|
||||
@ -771,7 +764,6 @@ static int init_one_port(opal_list_t *btl_list, mca_btl_openib_device_t *device,
|
||||
opal_show_help("help-mpi-btl-openib.txt", "apm without lmc",true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
for(lid = ib_port_attr->lid;
|
||||
lid < ib_port_attr->lid + lmc; lid += lmc_step){
|
||||
@ -892,12 +884,10 @@ static void device_construct(mca_btl_openib_device_t *device)
|
||||
device->xrc_fd = -1;
|
||||
#endif
|
||||
device->qps = NULL;
|
||||
#if OPAL_HAVE_THREADS
|
||||
mca_btl_openib_component.async_pipe[0] =
|
||||
mca_btl_openib_component.async_pipe[1] = -1;
|
||||
mca_btl_openib_component.async_comp_pipe[0] =
|
||||
mca_btl_openib_component.async_comp_pipe[1] = -1;
|
||||
#endif
|
||||
OBJ_CONSTRUCT(&device->device_lock, opal_mutex_t);
|
||||
OBJ_CONSTRUCT(&device->send_free_control, ompi_free_list_t);
|
||||
device->max_inline_data = 0;
|
||||
@ -908,7 +898,6 @@ static void device_destruct(mca_btl_openib_device_t *device)
|
||||
{
|
||||
int i;
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
#if OPAL_ENABLE_PROGRESS_THREADS
|
||||
if(device->progress) {
|
||||
device->progress = false;
|
||||
@ -939,7 +928,6 @@ static void device_destruct(mca_btl_openib_device_t *device)
|
||||
goto device_error;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(device->eager_rdma_buffers) {
|
||||
int i;
|
||||
@ -2517,15 +2505,6 @@ btl_openib_component_init(int *num_btl_modules,
|
||||
OS's that support OpenFabrics that provide both FREE and MUNMAP
|
||||
support, so the following test is [currently] good enough... */
|
||||
value = opal_mem_hooks_support_level();
|
||||
#if !OPAL_HAVE_THREADS
|
||||
if ((OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT) ==
|
||||
((OPAL_MEMORY_FREE_SUPPORT | OPAL_MEMORY_MUNMAP_SUPPORT) & value)) {
|
||||
opal_show_help("help-mpi-btl-openib.txt",
|
||||
"ptmalloc2 with no threads", true,
|
||||
opal_process_info.nodename);
|
||||
goto no_btls;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If we have a memory manager available, and
|
||||
opal_leave_pinned==-1, then unless the user explicitly set
|
||||
@ -2698,9 +2677,7 @@ btl_openib_component_init(int *num_btl_modules,
|
||||
|
||||
OBJ_CONSTRUCT(&btl_list, opal_list_t);
|
||||
OBJ_CONSTRUCT(&mca_btl_openib_component.ib_lock, opal_mutex_t);
|
||||
#if OPAL_HAVE_THREADS
|
||||
mca_btl_openib_component.async_thread = 0;
|
||||
#endif
|
||||
distance = dev_sorted[0].distance;
|
||||
for (found = false, i = 0;
|
||||
i < num_devs && (-1 == mca_btl_openib_component.ib_max_btls ||
|
||||
@ -2795,7 +2772,6 @@ btl_openib_component_init(int *num_btl_modules,
|
||||
if (OPAL_SUCCESS != setup_qps()) {
|
||||
goto no_btls;
|
||||
}
|
||||
#if OPAL_HAVE_THREADS
|
||||
if (mca_btl_openib_component.num_srq_qps > 0 ||
|
||||
mca_btl_openib_component.num_xrc_qps > 0) {
|
||||
opal_hash_table_t *srq_addr_table = &mca_btl_openib_component.srq_manager.srq_addr_table;
|
||||
@ -2807,7 +2783,6 @@ btl_openib_component_init(int *num_btl_modules,
|
||||
goto no_btls;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* For XRC:
|
||||
* from this point we know if MCA_BTL_XRC_ENABLED it true or false */
|
||||
@ -3713,12 +3688,10 @@ static int btl_openib_component_progress(void)
|
||||
int i;
|
||||
int count = 0;
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
if(OPAL_UNLIKELY(mca_btl_openib_component.use_async_event_thread &&
|
||||
mca_btl_openib_component.error_counter)) {
|
||||
goto error;
|
||||
}
|
||||
#endif
|
||||
|
||||
for(i = 0; i < mca_btl_openib_component.devices_count; i++) {
|
||||
mca_btl_openib_device_t *device =
|
||||
@ -3749,7 +3722,6 @@ static int btl_openib_component_progress(void)
|
||||
|
||||
return count;
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
error:
|
||||
/* Set the fatal counter to zero */
|
||||
mca_btl_openib_component.error_counter = 0;
|
||||
@ -3770,7 +3742,6 @@ error:
|
||||
}
|
||||
}
|
||||
return count;
|
||||
#endif
|
||||
}
|
||||
|
||||
int mca_btl_openib_post_srr(mca_btl_openib_module_t* openib_btl, const int qp)
|
||||
|
@ -592,7 +592,6 @@ void mca_btl_openib_endpoint_connected(mca_btl_openib_endpoint_t *endpoint)
|
||||
}
|
||||
|
||||
/* Run over all qps and load alternative path */
|
||||
#if OPAL_HAVE_THREADS
|
||||
if (APM_ENABLED) {
|
||||
int i;
|
||||
if (MCA_BTL_XRC_ENABLED) {
|
||||
@ -605,7 +604,6 @@ void mca_btl_openib_endpoint_connected(mca_btl_openib_endpoint_t *endpoint)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
endpoint->endpoint_state = MCA_BTL_IB_CONNECTED;
|
||||
endpoint->endpoint_btl->device->non_eager_rdma_endpoints++;
|
||||
|
@ -1,6 +1,8 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2013 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2009 Sandia National Laboratories. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
*
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
@ -10,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Note: this file is a little fast-n-loose with OPAL_HAVE_THREADS --
|
||||
* Note: this file is a little fast-n-loose --
|
||||
* it uses this value in run-time "if" conditionals (vs. compile-time
|
||||
* #if conditionals). We also don't protect including <pthread.h>.
|
||||
* That's because this component currently only compiles on Linux and
|
||||
@ -487,36 +489,34 @@ int opal_btl_openib_fd_init(void)
|
||||
/* Calculate the real size of the cmd struct */
|
||||
cmd_size = (int) (&(bogus.end) - ((char*) &bogus));
|
||||
|
||||
if (OPAL_HAVE_THREADS) {
|
||||
OBJ_CONSTRUCT(&pending_to_main_thread, opal_list_t);
|
||||
OBJ_CONSTRUCT(&pending_to_main_thread, opal_list_t);
|
||||
|
||||
/* Create pipes to communicate between the two threads */
|
||||
if (0 != pipe(pipe_to_service_thread)) {
|
||||
return OPAL_ERR_IN_ERRNO;
|
||||
}
|
||||
if (0 != pipe(pipe_to_main_thread)) {
|
||||
return OPAL_ERR_IN_ERRNO;
|
||||
}
|
||||
/* Create pipes to communicate between the two threads */
|
||||
if (0 != pipe(pipe_to_service_thread)) {
|
||||
return OPAL_ERR_IN_ERRNO;
|
||||
}
|
||||
if (0 != pipe(pipe_to_main_thread)) {
|
||||
return OPAL_ERR_IN_ERRNO;
|
||||
}
|
||||
|
||||
/* Create a libevent event that is used in the main thread
|
||||
to watch its pipe */
|
||||
opal_event_set(opal_event_base, &main_thread_event, pipe_to_main_thread[0],
|
||||
OPAL_EV_READ | OPAL_EV_PERSIST,
|
||||
main_thread_event_callback, NULL);
|
||||
opal_event_add(&main_thread_event, 0);
|
||||
/* Create a libevent event that is used in the main thread
|
||||
to watch its pipe */
|
||||
opal_event_set(opal_event_base, &main_thread_event, pipe_to_main_thread[0],
|
||||
OPAL_EV_READ | OPAL_EV_PERSIST,
|
||||
main_thread_event_callback, NULL);
|
||||
opal_event_add(&main_thread_event, 0);
|
||||
|
||||
/* Start the service thread */
|
||||
if (0 != pthread_create(&thread, NULL, service_thread_start,
|
||||
NULL)) {
|
||||
int errno_save = errno;
|
||||
opal_event_del(&main_thread_event);
|
||||
close(pipe_to_service_thread[0]);
|
||||
close(pipe_to_service_thread[1]);
|
||||
close(pipe_to_main_thread[0]);
|
||||
close(pipe_to_main_thread[1]);
|
||||
errno = errno_save;
|
||||
return OPAL_ERR_IN_ERRNO;
|
||||
}
|
||||
/* Start the service thread */
|
||||
if (0 != pthread_create(&thread, NULL, service_thread_start,
|
||||
NULL)) {
|
||||
int errno_save = errno;
|
||||
opal_event_del(&main_thread_event);
|
||||
close(pipe_to_service_thread[0]);
|
||||
close(pipe_to_service_thread[1]);
|
||||
close(pipe_to_main_thread[0]);
|
||||
close(pipe_to_main_thread[1]);
|
||||
errno = errno_save;
|
||||
return OPAL_ERR_IN_ERRNO;
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
@ -545,14 +545,9 @@ int opal_btl_openib_fd_monitor(int fd, int flags,
|
||||
cmd.pc_flags = flags;
|
||||
cmd.pc_fn.event = callback;
|
||||
cmd.pc_context = context;
|
||||
if (OPAL_HAVE_THREADS) {
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
OPAL_OUTPUT((-1, "main thread sending monitor fd %d", fd));
|
||||
opal_fd_write(pipe_to_service_thread[1], cmd_size, &cmd);
|
||||
} else {
|
||||
/* Otherwise, add it directly */
|
||||
service_pipe_cmd_add_fd(true, &cmd);
|
||||
}
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
OPAL_OUTPUT((-1, "main thread sending monitor fd %d", fd));
|
||||
opal_fd_write(pipe_to_service_thread[1], cmd_size, &cmd);
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
@ -578,14 +573,9 @@ int opal_btl_openib_fd_unmonitor(int fd,
|
||||
cmd.pc_flags = 0;
|
||||
cmd.pc_fn.event = callback;
|
||||
cmd.pc_context = context;
|
||||
if (OPAL_HAVE_THREADS) {
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
OPAL_OUTPUT((-1, "main thread sending unmonitor fd %d", fd));
|
||||
opal_fd_write(pipe_to_service_thread[1], cmd_size, &cmd);
|
||||
} else {
|
||||
/* Otherwise, remove it directly */
|
||||
service_pipe_cmd_remove_fd(&cmd);
|
||||
}
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
OPAL_OUTPUT((-1, "main thread sending unmonitor fd %d", fd));
|
||||
opal_fd_write(pipe_to_service_thread[1], cmd_size, &cmd);
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
@ -604,14 +594,9 @@ int opal_btl_openib_fd_run_in_service(opal_btl_openib_fd_main_callback_fn_t *cal
|
||||
cmd.pc_flags = 0;
|
||||
cmd.pc_fn.main = callback;
|
||||
cmd.pc_context = context;
|
||||
if (OPAL_HAVE_THREADS) {
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
OPAL_OUTPUT((-1, "main thread sending 'run in service'"));
|
||||
opal_fd_write(pipe_to_service_thread[1], cmd_size, &cmd);
|
||||
} else {
|
||||
/* Otherwise, run it directly */
|
||||
callback(context);
|
||||
}
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
OPAL_OUTPUT((-1, "main thread sending 'run in service'"));
|
||||
opal_fd_write(pipe_to_service_thread[1], cmd_size, &cmd);
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
@ -623,22 +608,16 @@ int opal_btl_openib_fd_run_in_service(opal_btl_openib_fd_main_callback_fn_t *cal
|
||||
int opal_btl_openib_fd_run_in_main(opal_btl_openib_fd_main_callback_fn_t *callback,
|
||||
void *context)
|
||||
{
|
||||
if (OPAL_HAVE_THREADS) {
|
||||
cmd_t cmd;
|
||||
cmd_t cmd;
|
||||
|
||||
OPAL_OUTPUT((-1, "run in main -- sending command"));
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
cmd.pc_cmd = CMD_CALL_FUNCTION;
|
||||
cmd.pc_fd = -1;
|
||||
cmd.pc_flags = 0;
|
||||
cmd.pc_fn.main = callback;
|
||||
cmd.pc_context = context;
|
||||
write_to_main_thread(&cmd);
|
||||
} else {
|
||||
/* Otherwise, call it directly */
|
||||
OPAL_OUTPUT((-1, "run in main -- calling now!"));
|
||||
callback(context);
|
||||
}
|
||||
OPAL_OUTPUT((-1, "run in main -- sending command"));
|
||||
/* For the threaded version, write a command down the pipe */
|
||||
cmd.pc_cmd = CMD_CALL_FUNCTION;
|
||||
cmd.pc_fd = -1;
|
||||
cmd.pc_flags = 0;
|
||||
cmd.pc_fn.main = callback;
|
||||
cmd.pc_context = context;
|
||||
write_to_main_thread(&cmd);
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
@ -677,37 +656,35 @@ opal_btl_openib_fd_main_thread_drain(void)
|
||||
int opal_btl_openib_fd_finalize(void)
|
||||
{
|
||||
if (initialized) {
|
||||
if (OPAL_HAVE_THREADS) {
|
||||
/* For the threaded version, send a command down the pipe */
|
||||
cmd_t cmd;
|
||||
OPAL_OUTPUT((-1, "shutting down openib fd"));
|
||||
/* Check if the thread exists before asking it to quit */
|
||||
if (ESRCH != pthread_kill(thread, 0)) {
|
||||
memset(&cmd, 0, cmd_size);
|
||||
cmd.pc_cmd = CMD_TIME_TO_QUIT;
|
||||
if (OPAL_SUCCESS != opal_fd_write(pipe_to_service_thread[1],
|
||||
cmd_size, &cmd)) {
|
||||
/* We cancel the thread if there's an error
|
||||
* sending the "quit" cmd. This only ever happens on
|
||||
* a "restart" which could result in dangling
|
||||
* fds. OMPI must not rely on the checkpointer to
|
||||
* save/restore any fds or connections
|
||||
*/
|
||||
pthread_cancel(thread);
|
||||
}
|
||||
|
||||
pthread_join(thread, NULL);
|
||||
opal_atomic_rmb();
|
||||
/* For the threaded version, send a command down the pipe */
|
||||
cmd_t cmd;
|
||||
OPAL_OUTPUT((-1, "shutting down openib fd"));
|
||||
/* Check if the thread exists before asking it to quit */
|
||||
if (ESRCH != pthread_kill(thread, 0)) {
|
||||
memset(&cmd, 0, cmd_size);
|
||||
cmd.pc_cmd = CMD_TIME_TO_QUIT;
|
||||
if (OPAL_SUCCESS != opal_fd_write(pipe_to_service_thread[1],
|
||||
cmd_size, &cmd)) {
|
||||
/* We cancel the thread if there's an error
|
||||
* sending the "quit" cmd. This only ever happens on
|
||||
* a "restart" which could result in dangling
|
||||
* fds. OMPI must not rely on the checkpointer to
|
||||
* save/restore any fds or connections
|
||||
*/
|
||||
pthread_cancel(thread);
|
||||
}
|
||||
|
||||
opal_event_del(&main_thread_event);
|
||||
|
||||
close(pipe_to_service_thread[0]);
|
||||
close(pipe_to_service_thread[1]);
|
||||
close(pipe_to_main_thread[0]);
|
||||
close(pipe_to_main_thread[1]);
|
||||
OBJ_DESTRUCT(&pending_to_main_thread);
|
||||
pthread_join(thread, NULL);
|
||||
opal_atomic_rmb();
|
||||
}
|
||||
|
||||
opal_event_del(&main_thread_event);
|
||||
|
||||
close(pipe_to_service_thread[0]);
|
||||
close(pipe_to_service_thread[1]);
|
||||
close(pipe_to_main_thread[0]);
|
||||
close(pipe_to_main_thread[1]);
|
||||
OBJ_DESTRUCT(&pending_to_main_thread);
|
||||
OBJ_DESTRUCT(®istered_items);
|
||||
}
|
||||
initialized = false;
|
||||
|
@ -16,7 +16,7 @@
|
||||
* Copyright (c) 2006-2007 Voltaire All rights reserved.
|
||||
* Copyright (c) 2009-2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013-2014 NVIDIA Corporation. All rights reserved.
|
||||
* Copyright (c) 2014 Research Organization for Information Science
|
||||
* Copyright (c) 2014-2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
@ -460,7 +460,6 @@ int btl_openib_register_mca_params(void)
|
||||
"(must be >= 0, where 0 = use all available)",
|
||||
1, &mca_btl_openib_component.max_lmc, 0));
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
CHECK(reg_int("enable_apm_over_lmc", NULL, "Maximum number of alternative paths for each device port "
|
||||
"(must be >= -1, where 0 = disable apm, -1 = all available alternative paths )",
|
||||
0, &mca_btl_openib_component.apm_lmc, REGINT_NEG_ONE_OK|REGINT_GE_ZERO));
|
||||
@ -501,9 +500,6 @@ int btl_openib_register_mca_params(void)
|
||||
"Enable/Disable on demand SRQ resize. "
|
||||
"(0 = without resizing, nonzero = with resizing)", 1,
|
||||
&mca_btl_openib_component.enable_srq_resize));
|
||||
#else
|
||||
mca_btl_openib_component.enable_srq_resize = false;
|
||||
#endif
|
||||
|
||||
#if HAVE_DECL_IBV_LINK_LAYER_ETHERNET
|
||||
CHECK(reg_bool("rroce_enable", NULL,
|
||||
|
@ -14,6 +14,8 @@
|
||||
# Copyright (c) 2008-2011 Mellanox Technologies. All rights reserved.
|
||||
# Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013 NVIDIA Corporation. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -37,7 +39,7 @@ AC_DEFUN([MCA_opal_btl_openib_POST_CONFIG], [
|
||||
AC_DEFUN([MCA_opal_btl_openib_CONFIG],[
|
||||
AC_CONFIG_FILES([opal/mca/btl/openib/Makefile])
|
||||
|
||||
OPAL_VAR_SCOPE_PUSH([cpcs have_threads LDFLAGS_save LIBS_save])
|
||||
OPAL_VAR_SCOPE_PUSH([cpcs LDFLAGS_save LIBS_save])
|
||||
cpcs="oob"
|
||||
|
||||
OPAL_CHECK_OPENFABRICS([btl_openib],
|
||||
@ -57,19 +59,11 @@ AC_DEFUN([MCA_opal_btl_openib_CONFIG],[
|
||||
$1],
|
||||
[$2])
|
||||
|
||||
AC_MSG_CHECKING([for thread support (needed for rdmacm/udcm)])
|
||||
have_threads=`echo $THREAD_TYPE | awk '{ print [$]1 }'`
|
||||
if test "x$have_threads" = "x"; then
|
||||
have_threads=none
|
||||
fi
|
||||
AC_MSG_RESULT([$have_threads])
|
||||
|
||||
AS_IF([test "$btl_openib_happy" = "yes"],
|
||||
[if test "x$btl_openib_have_xrc" = "x1"; then
|
||||
cpcs="$cpcs xoob"
|
||||
fi
|
||||
if test "x$btl_openib_have_rdmacm" = "x1" -a \
|
||||
"$have_threads" != "none"; then
|
||||
if test "x$btl_openib_have_rdmacm" = "x1"; then
|
||||
cpcs="$cpcs rdmacm"
|
||||
if test "$enable_openib_rdmacm_ibaddr" = "yes"; then
|
||||
AC_MSG_CHECKING([IB addressing])
|
||||
@ -103,8 +97,7 @@ AC_DEFUN([MCA_opal_btl_openib_CONFIG],[
|
||||
AC_DEFINE(BTL_OPENIB_RDMACM_IB_ADDR, 0, rdmacm without IB_AF addressing support)
|
||||
fi
|
||||
fi
|
||||
if test "x$btl_openib_have_udcm" = "x1" -a \
|
||||
"$have_threads" != "none"; then
|
||||
if test "x$btl_openib_have_udcm" = "x1"; then
|
||||
cpcs="$cpcs udcm"
|
||||
fi
|
||||
AC_MSG_CHECKING([which openib btl cpcs will be built])
|
||||
|
@ -5,6 +5,8 @@
|
||||
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
*
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
@ -18,10 +20,10 @@
|
||||
#include "btl_openib_proc.h"
|
||||
#include "connect/base.h"
|
||||
#include "connect/btl_openib_connect_empty.h"
|
||||
#if OPAL_HAVE_RDMACM && OPAL_HAVE_THREADS
|
||||
#if OPAL_HAVE_RDMACM
|
||||
#include "connect/btl_openib_connect_rdmacm.h"
|
||||
#endif
|
||||
#if OPAL_HAVE_UDCM && OPAL_HAVE_THREADS
|
||||
#if OPAL_HAVE_UDCM
|
||||
#include "connect/btl_openib_connect_udcm.h"
|
||||
#endif
|
||||
|
||||
@ -44,19 +46,11 @@ static opal_btl_openib_connect_base_component_t *all[] = {
|
||||
|
||||
/* Always have an entry here so that the CP indexes will always be
|
||||
the same: if RDMA CM is not available, use the "empty" CPC */
|
||||
#if OPAL_HAVE_RDMACM && OPAL_HAVE_THREADS
|
||||
&opal_btl_openib_connect_rdmacm,
|
||||
#else
|
||||
&opal_btl_openib_connect_empty,
|
||||
#endif
|
||||
|
||||
/* Always have an entry here so that the CP indexes will always be
|
||||
the same: if UD CM is not enabled, use the "empty" CPC */
|
||||
#if OPAL_HAVE_UDCM && OPAL_HAVE_THREADS
|
||||
&opal_btl_openib_connect_udcm,
|
||||
#else
|
||||
&opal_btl_openib_connect_empty,
|
||||
#endif
|
||||
|
||||
NULL
|
||||
};
|
||||
|
@ -875,7 +875,6 @@ static void udcm_module_destroy_listen_qp (udcm_module_t *m)
|
||||
return;
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_THREADS
|
||||
if (mca_btl_openib_component.use_async_event_thread &&
|
||||
-1 != mca_btl_openib_component.async_pipe[1]) {
|
||||
/* Tell the openib async thread to ignore ERR state on the QP
|
||||
@ -894,7 +893,6 @@ static void udcm_module_destroy_listen_qp (udcm_module_t *m)
|
||||
BTL_ERROR(("Command to openib async thread to ignore QP ERR state failed"));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
do {
|
||||
/* Move listen QP into the ERR state to cancel all outstanding
|
||||
@ -2681,7 +2679,6 @@ static int udcm_xrc_recv_qp_create (mca_btl_openib_endpoint_t *lcl_ep, udcm_msg_
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
#endif
|
||||
#if OPAL_HAVE_THREADS
|
||||
if (APM_ENABLED) {
|
||||
#if OPAL_HAVE_CONNECTX_XRC_DOMAINS
|
||||
mca_btl_openib_load_apm(lcl_ep->xrc_recv_qp, lcl_ep);
|
||||
@ -2689,7 +2686,6 @@ static int udcm_xrc_recv_qp_create (mca_btl_openib_endpoint_t *lcl_ep, udcm_msg_
|
||||
mca_btl_openib_load_apm_xrc_rcv(lcl_ep->xrc_recv_qp_num, lcl_ep);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
@ -10,6 +10,8 @@
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2009-2010 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -19,12 +21,10 @@
|
||||
|
||||
AM_CPPFLAGS = -DMALLOC_DEBUG=0
|
||||
|
||||
if OPAL_HAVE_POSIX_THREADS
|
||||
AM_CPPFLAGS += \
|
||||
-D_GNU_SOURCE=1 \
|
||||
-DMALLOC_HOOKS=1 \
|
||||
-I$(srcdir)/sysdeps/pthread
|
||||
endif
|
||||
# this must come *after* the threads -Is
|
||||
AM_CPPFLAGS += -I$(srcdir)/sysdeps/generic
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
* Copyright (c) 2010-2013 Los Alamos National Security, LLC.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -607,7 +609,6 @@ int opal_init_test(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
static bool fork_warning_issued = false;
|
||||
static bool atfork_called = false;
|
||||
|
||||
@ -619,14 +620,11 @@ static void warn_fork_cb(void)
|
||||
fork_warning_issued = true;
|
||||
}
|
||||
}
|
||||
#endif /* OPAL_HAVE_POSIX_THREADS */
|
||||
|
||||
void opal_warn_fork(void)
|
||||
{
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
if (opal_warn_on_fork && !atfork_called) {
|
||||
pthread_atfork(warn_fork_cb, NULL, NULL);
|
||||
atfork_called = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -11,6 +11,8 @@
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -31,5 +33,4 @@ headers += \
|
||||
lib@OPAL_LIB_PREFIX@open_pal_la_SOURCES += \
|
||||
threads/condition.c \
|
||||
threads/mutex.c \
|
||||
threads/thread.c \
|
||||
threads/tsd.c
|
||||
threads/thread.c
|
||||
|
@ -11,6 +11,8 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -27,9 +29,7 @@
|
||||
#ifdef HAVE_TIME_H
|
||||
#include <time.h>
|
||||
#endif
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#include "opal/threads/mutex.h"
|
||||
#include "opal/runtime/opal_progress.h"
|
||||
|
@ -11,6 +11,8 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007-2013 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -32,8 +34,6 @@ bool opal_uses_threads = false;
|
||||
|
||||
static void opal_mutex_construct(opal_mutex_t *m)
|
||||
{
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
|
||||
#if OPAL_ENABLE_DEBUG
|
||||
pthread_mutexattr_t attr;
|
||||
pthread_mutexattr_init(&attr);
|
||||
@ -48,6 +48,9 @@ static void opal_mutex_construct(opal_mutex_t *m)
|
||||
pthread_mutex_init(&m->m_lock_pthread, &attr);
|
||||
pthread_mutexattr_destroy(&attr);
|
||||
|
||||
m->m_lock_debug = 0;
|
||||
m->m_lock_file = NULL;
|
||||
m->m_lock_line = 0;
|
||||
#else
|
||||
|
||||
/* Without debugging, choose the fastest available mutexes */
|
||||
@ -55,14 +58,6 @@ static void opal_mutex_construct(opal_mutex_t *m)
|
||||
|
||||
#endif /* OPAL_ENABLE_DEBUG */
|
||||
|
||||
#endif
|
||||
|
||||
#if OPAL_ENABLE_DEBUG
|
||||
m->m_lock_debug = 0;
|
||||
m->m_lock_file = NULL;
|
||||
m->m_lock_line = 0;
|
||||
#endif
|
||||
|
||||
#if OPAL_HAVE_ATOMIC_SPINLOCKS
|
||||
opal_atomic_init( &m->m_lock_atomic, OPAL_ATOMIC_UNLOCKED );
|
||||
#endif
|
||||
@ -70,9 +65,7 @@ static void opal_mutex_construct(opal_mutex_t *m)
|
||||
|
||||
static void opal_mutex_destruct(opal_mutex_t *m)
|
||||
{
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
pthread_mutex_destroy(&m->m_lock_pthread);
|
||||
#endif
|
||||
}
|
||||
|
||||
OBJ_CLASS_INSTANCE(opal_mutex_t,
|
||||
|
@ -11,6 +11,8 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -34,13 +36,11 @@
|
||||
|
||||
#include "opal_config.h"
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
#ifdef HAVE_PTHREAD_H
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#include "opal/class/opal_object.h"
|
||||
#include "opal/sys/atomic.h"
|
||||
@ -50,9 +50,7 @@ BEGIN_C_DECLS
|
||||
struct opal_mutex_t {
|
||||
opal_object_t super;
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
pthread_mutex_t m_lock_pthread;
|
||||
#endif
|
||||
|
||||
#if OPAL_ENABLE_DEBUG
|
||||
int m_lock_debug;
|
||||
@ -70,12 +68,6 @@ OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_mutex_t);
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
|
||||
/************************************************************************
|
||||
* POSIX threads
|
||||
************************************************************************/
|
||||
|
||||
static inline int opal_mutex_trylock(opal_mutex_t *m)
|
||||
{
|
||||
#if OPAL_ENABLE_DEBUG
|
||||
@ -119,34 +111,6 @@ static inline void opal_mutex_unlock(opal_mutex_t *m)
|
||||
#endif
|
||||
}
|
||||
|
||||
#elif OPAL_HAVE_ATOMIC_SPINLOCKS
|
||||
|
||||
/************************************************************************
|
||||
* Spin Locks
|
||||
************************************************************************/
|
||||
|
||||
static inline int opal_mutex_trylock(opal_mutex_t *m)
|
||||
{
|
||||
return opal_atomic_trylock(&m->m_lock_atomic);
|
||||
}
|
||||
|
||||
static inline void opal_mutex_lock(opal_mutex_t *m)
|
||||
{
|
||||
opal_atomic_lock(&m->m_lock_atomic);
|
||||
}
|
||||
|
||||
static inline void opal_mutex_unlock(opal_mutex_t *m)
|
||||
{
|
||||
opal_atomic_unlock(&m->m_lock_atomic);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#error No mutex definition
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/************************************************************************
|
||||
*
|
||||
* mutex operations (atomic versions)
|
||||
|
@ -10,6 +10,8 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -37,17 +39,9 @@ OBJ_CLASS_INSTANCE(opal_thread_t,
|
||||
static void opal_thread_construct(opal_thread_t *t)
|
||||
{
|
||||
t->t_run = 0;
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
t->t_handle = (pthread_t) -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
|
||||
/************************************************************************
|
||||
* POSIX threads
|
||||
************************************************************************/
|
||||
|
||||
int opal_thread_start(opal_thread_t *t)
|
||||
{
|
||||
int rc;
|
||||
@ -89,38 +83,3 @@ void opal_thread_kill(opal_thread_t *t, int sig)
|
||||
{
|
||||
pthread_kill(t->t_handle, sig);
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
/************************************************************************
|
||||
* No thread support
|
||||
************************************************************************/
|
||||
|
||||
int opal_thread_start(opal_thread_t *t)
|
||||
{
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
int opal_thread_join(opal_thread_t *t, void **thr_return)
|
||||
{
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
bool opal_thread_self_compare(opal_thread_t *t)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
opal_thread_t *opal_thread_get_self(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void opal_thread_kill(opal_thread_t *t, int sig)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -11,6 +11,8 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -23,9 +25,7 @@
|
||||
|
||||
#include "opal_config.h"
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
@ -48,9 +48,7 @@ struct opal_thread_t {
|
||||
opal_object_t super;
|
||||
opal_thread_fn_t t_run;
|
||||
void* t_arg;
|
||||
#ifdef OPAL_HAVE_POSIX_THREADS
|
||||
pthread_t t_handle;
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct opal_thread_t opal_thread_t;
|
||||
|
@ -1,117 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2007-2013 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
|
||||
#include "opal_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
# if HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "opal/threads/tsd.h"
|
||||
|
||||
#if !OPAL_HAVE_POSIX_THREADS
|
||||
|
||||
#define TSD_ENTRIES 32
|
||||
|
||||
struct tsd_entry_t {
|
||||
bool used;
|
||||
void *value;
|
||||
opal_tsd_destructor_t destructor;
|
||||
};
|
||||
typedef struct tsd_entry_t tsd_entry_t;
|
||||
|
||||
static tsd_entry_t entries[TSD_ENTRIES];
|
||||
static bool atexit_registered = false;
|
||||
|
||||
static void
|
||||
run_destructors(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < TSD_ENTRIES ; ++i) {
|
||||
opal_tsd_destructor_t destructor;
|
||||
void *value;
|
||||
|
||||
if (entries[i].used) {
|
||||
destructor = entries[i].destructor;
|
||||
value = entries[i].value;
|
||||
|
||||
entries[i].used = false;
|
||||
entries[i].destructor = NULL;
|
||||
entries[i].value = NULL;
|
||||
|
||||
destructor(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
opal_tsd_key_create(opal_tsd_key_t *key,
|
||||
opal_tsd_destructor_t destructor)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!atexit_registered) {
|
||||
atexit_registered = true;
|
||||
if (0 != atexit(run_destructors)) {
|
||||
return OPAL_ERR_TEMP_OUT_OF_RESOURCE;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0 ; i < TSD_ENTRIES ; ++i) {
|
||||
if (entries[i].used == false) {
|
||||
entries[i].used = true;
|
||||
entries[i].value = NULL;
|
||||
entries[i].destructor = destructor;
|
||||
*key = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == TSD_ENTRIES) return ENOMEM;
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
opal_tsd_key_delete(opal_tsd_key_t key)
|
||||
{
|
||||
if (!entries[key].used) return OPAL_ERR_BAD_PARAM;
|
||||
|
||||
entries[key].used = false;
|
||||
entries[key].value = NULL;
|
||||
entries[key].destructor = NULL;
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
opal_tsd_setspecific(opal_tsd_key_t key, void *value)
|
||||
{
|
||||
if (!entries[key].used) return OPAL_ERR_BAD_PARAM;
|
||||
entries[key].value = value;
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
opal_tsd_getspecific(opal_tsd_key_t key, void **valuep)
|
||||
{
|
||||
if (!entries[key].used) return OPAL_ERR_BAD_PARAM;
|
||||
*valuep = entries[key].value;
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
#endif
|
@ -2,6 +2,8 @@
|
||||
* Copyright (c) 2007-2013 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -15,9 +17,7 @@
|
||||
|
||||
#include "opal_config.h"
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#include "opal/constants.h"
|
||||
|
||||
@ -134,7 +134,7 @@ OPAL_DECLSPEC int opal_tsd_setspecific(opal_tsd_key_t key, void *value);
|
||||
*/
|
||||
OPAL_DECLSPEC int opal_tsd_getspecific(opal_tsd_key_t key, void **valuep);
|
||||
|
||||
#elif OPAL_HAVE_POSIX_THREADS
|
||||
#else
|
||||
|
||||
typedef pthread_key_t opal_tsd_key_t;
|
||||
|
||||
@ -164,19 +164,6 @@ opal_tsd_getspecific(opal_tsd_key_t key, void **valuep)
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
typedef int opal_tsd_key_t;
|
||||
|
||||
OPAL_DECLSPEC int opal_tsd_key_create(opal_tsd_key_t *key,
|
||||
opal_tsd_destructor_t destructor);
|
||||
|
||||
OPAL_DECLSPEC int opal_tsd_key_delete(opal_tsd_key_t key);
|
||||
|
||||
OPAL_DECLSPEC int opal_tsd_setspecific(opal_tsd_key_t key, void *value);
|
||||
|
||||
OPAL_DECLSPEC int opal_tsd_getspecific(opal_tsd_key_t key, void **valuep);
|
||||
|
||||
#endif
|
||||
|
||||
END_C_DECLS
|
||||
|
@ -11,6 +11,8 @@
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2007-2011 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -354,13 +356,9 @@ void orte_info_do_config(bool want_all)
|
||||
symbol_visibility = OPAL_C_HAVE_VISIBILITY ? "yes" : "no";
|
||||
|
||||
/* setup strings that require allocation */
|
||||
if (OPAL_HAVE_POSIX_THREADS) { /* should just test OPAL_HAVE_THREADS */
|
||||
asprintf(&threads, "%s (OPAL: %s, ORTE progress: yes, Event lib: yes)",
|
||||
(OPAL_HAVE_POSIX_THREADS ? "posix" : "type unknown"), /* "type unknown" can presumably never happen */
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no");
|
||||
} else {
|
||||
threads = strdup("no");
|
||||
}
|
||||
asprintf(&threads, "%s (OPAL: %s, ORTE progress: yes, Event lib: yes)",
|
||||
"posix",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no");
|
||||
|
||||
asprintf(&ft_support, "%s (checkpoint thread: %s)",
|
||||
OPAL_ENABLE_FT ? "yes" : "no", OPAL_ENABLE_FT_THREAD ? "yes" : "no");;
|
||||
|
@ -263,23 +263,19 @@ void oshmem_info_do_config(bool want_all)
|
||||
fortran_have_ignore_tkr = strdup("no");
|
||||
}
|
||||
|
||||
if (OPAL_HAVE_POSIX_THREADS) { /* should just test OPAL_HAVE_THREADS */
|
||||
#if OMPI_RTE_ORTE
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
|
||||
(OPAL_HAVE_POSIX_THREADS ? "posix" : "type unknown"), /* "type unknown" can presumably never happen */
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
|
||||
"posix",
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
#else
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, Event lib: yes)",
|
||||
(OPAL_HAVE_POSIX_THREADS ? "posix" : "type unknown"), /* "type unknown" can presumably never happen */
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
(void)asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: %s, OPAL support: %s, OMPI progress: %s, Event lib: yes)",
|
||||
"posix",
|
||||
OMPI_ENABLE_THREAD_MULTIPLE ? "yes" : "no",
|
||||
OPAL_ENABLE_MULTI_THREADS ? "yes" : "no",
|
||||
OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
|
||||
#endif
|
||||
} else {
|
||||
threads = strdup("no");
|
||||
}
|
||||
|
||||
(void)asprintf(&ft_support, "%s (checkpoint thread: %s)",
|
||||
OPAL_ENABLE_FT ? "yes" : "no", OPAL_ENABLE_FT_THREAD ? "yes" : "no");
|
||||
|
@ -10,6 +10,8 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -62,7 +64,6 @@ void *oldptr;
|
||||
void *newptr;
|
||||
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
static void *thread_main(void *arg)
|
||||
{
|
||||
int rank = (int) (unsigned long) arg;
|
||||
@ -80,15 +81,11 @@ static void *thread_main(void *arg)
|
||||
|
||||
return (void *) (unsigned long) (rank + 1000);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
int tid;
|
||||
pthread_t *th;
|
||||
#endif
|
||||
|
||||
if (argc != 2) {
|
||||
printf("*** Incorrect number of arguments. Skipping test\n");
|
||||
@ -252,7 +249,6 @@ int main(int argc, char *argv[])
|
||||
valint = 0;
|
||||
|
||||
/* -- create the thread set -- */
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
th = (pthread_t *) malloc(nthreads * sizeof(pthread_t));
|
||||
if (!th) {
|
||||
perror("malloc");
|
||||
@ -285,7 +281,6 @@ int main(int argc, char *argv[])
|
||||
#endif
|
||||
opal_atomic_rmb();
|
||||
assert((5 * nthreads * nreps) == valint);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -10,6 +10,8 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -57,9 +59,8 @@ static int
|
||||
atomic_math_test_th(int count, int thr_count)
|
||||
{
|
||||
int value;
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
pthread_t *th;
|
||||
int tid, ret = 0;
|
||||
int tid;
|
||||
|
||||
th = (pthread_t *) malloc(thr_count * sizeof(pthread_t));
|
||||
if (!th) {
|
||||
@ -92,16 +93,6 @@ atomic_math_test_th(int count, int thr_count)
|
||||
}
|
||||
free(th);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
value = count;
|
||||
if (thr_count == 1) {
|
||||
atomic_math_test((void*) &value);
|
||||
} else {
|
||||
return 77;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,8 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -40,7 +42,6 @@ struct start_info {
|
||||
|
||||
static int atomic_spinlock_test(opal_atomic_lock_t *lock, int count, int id);
|
||||
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
static void* atomic_spinlock_start(void* arg)
|
||||
{
|
||||
struct start_info *data = (struct start_info*) arg;
|
||||
@ -48,13 +49,10 @@ static void* atomic_spinlock_start(void* arg)
|
||||
return (void*) (unsigned long) atomic_spinlock_test(data->lock, data->count,
|
||||
data->tid);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static int
|
||||
atomic_spinlock_test_th(opal_atomic_lock_t *lock, int count, int id, int thr_count)
|
||||
{
|
||||
#if OPAL_HAVE_POSIX_THREADS
|
||||
pthread_t *th;
|
||||
int tid, ret = 0;
|
||||
struct start_info *data;
|
||||
@ -90,9 +88,6 @@ atomic_spinlock_test_th(opal_atomic_lock_t *lock, int count, int id, int thr_cou
|
||||
free(th);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return 77;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user