usnic: remove all trailing whitespace
Style cleanup only; no code changes. This commit was SVN r32366.
Этот коммит содержится в:
родитель
a6c6aa2815
Коммит
f1fb4970a5
@ -5,7 +5,7 @@
|
|||||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||||
# of Tennessee Research Foundation. All rights
|
# of Tennessee Research Foundation. All rights
|
||||||
# reserved.
|
# reserved.
|
||||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||||
# University of Stuttgart. All rights reserved.
|
# University of Stuttgart. All rights reserved.
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@ -13,13 +13,13 @@
|
|||||||
# reserved.
|
# reserved.
|
||||||
# Copyright (c) 2010-2014 Cisco Systems, Inc. All rights reserved.
|
# Copyright (c) 2010-2014 Cisco Systems, Inc. All rights reserved.
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
#
|
#
|
||||||
# Additional copyrights may follow
|
# Additional copyrights may follow
|
||||||
#
|
#
|
||||||
# $HEADER$
|
# $HEADER$
|
||||||
#
|
#
|
||||||
|
|
||||||
AM_CPPFLAGS = $(btl_usnic_CPPFLAGS)
|
AM_CPPFLAGS = $(btl_usnic_CPPFLAGS)
|
||||||
AM_CFLAGS = $(btl_usnic_CFLAGS)
|
AM_CFLAGS = $(btl_usnic_CFLAGS)
|
||||||
|
|
||||||
EXTRA_DIST = README.txt README.test
|
EXTRA_DIST = README.txt README.test
|
||||||
@ -102,13 +102,13 @@ endif
|
|||||||
mcacomponentdir = $(ompilibdir)
|
mcacomponentdir = $(ompilibdir)
|
||||||
mcacomponent_LTLIBRARIES = $(component)
|
mcacomponent_LTLIBRARIES = $(component)
|
||||||
mca_btl_usnic_la_SOURCES = $(component_sources)
|
mca_btl_usnic_la_SOURCES = $(component_sources)
|
||||||
mca_btl_usnic_la_LDFLAGS = -module -avoid-version $(btl_usnic_LDFLAGS)
|
mca_btl_usnic_la_LDFLAGS = -module -avoid-version $(btl_usnic_LDFLAGS)
|
||||||
mca_btl_usnic_la_LIBADD = $(btl_usnic_LIBS) \
|
mca_btl_usnic_la_LIBADD = $(btl_usnic_LIBS) \
|
||||||
$(OMPI_TOP_BUILDDIR)/opal/mca/common/verbs/libmca_common_verbs.la
|
$(OMPI_TOP_BUILDDIR)/opal/mca/common/verbs/libmca_common_verbs.la
|
||||||
|
|
||||||
noinst_LTLIBRARIES = $(lib)
|
noinst_LTLIBRARIES = $(lib)
|
||||||
libmca_btl_usnic_la_SOURCES = $(lib_sources)
|
libmca_btl_usnic_la_SOURCES = $(lib_sources)
|
||||||
libmca_btl_usnic_la_LDFLAGS= -module -avoid-version $(btl_usnic_LDFLAGS)
|
libmca_btl_usnic_la_LDFLAGS= -module -avoid-version $(btl_usnic_LDFLAGS)
|
||||||
libmca_btl_usnic_la_LIBADD = $(btl_usnic_LIBS)
|
libmca_btl_usnic_la_LIBADD = $(btl_usnic_LIBS)
|
||||||
|
|
||||||
if OPAL_BTL_USNIC_BUILD_UNIT_TESTS
|
if OPAL_BTL_USNIC_BUILD_UNIT_TESTS
|
||||||
|
@ -232,7 +232,7 @@ typedef uint16_t opal_btl_usnic_seq_t;
|
|||||||
/**
|
/**
|
||||||
* Register the usnic BTL MCA params
|
* Register the usnic BTL MCA params
|
||||||
*/
|
*/
|
||||||
int opal_btl_usnic_component_register(void);
|
int opal_btl_usnic_component_register(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Routine which can be called from a debugger to print module, endpoint,
|
* Routine which can be called from a debugger to print module, endpoint,
|
||||||
|
@ -139,7 +139,7 @@ opal_btl_usnic_handle_ack(
|
|||||||
/* If all ACKs received, and this is a put or a regular send
|
/* If all ACKs received, and this is a put or a regular send
|
||||||
* that needs a callback, perform the callback now
|
* that needs a callback, perform the callback now
|
||||||
*
|
*
|
||||||
* NOTE on sf_ack_bytes_left - here we check for
|
* NOTE on sf_ack_bytes_left - here we check for
|
||||||
* sf_ack_bytes_left == bytes_acked
|
* sf_ack_bytes_left == bytes_acked
|
||||||
* as opposed to adjusting sf_ack_bytes_left and checking for 0 because
|
* as opposed to adjusting sf_ack_bytes_left and checking for 0 because
|
||||||
* if we don't, the callback function may call usnic_free() and free
|
* if we don't, the callback function may call usnic_free() and free
|
||||||
@ -205,7 +205,7 @@ opal_btl_usnic_ack_send(
|
|||||||
ack->ss_base.us_btl_header->ack_seq =
|
ack->ss_base.us_btl_header->ack_seq =
|
||||||
endpoint->endpoint_next_contig_seq_to_recv - 1;
|
endpoint->endpoint_next_contig_seq_to_recv - 1;
|
||||||
|
|
||||||
ack->ss_base.us_sg_entry[0].length =
|
ack->ss_base.us_sg_entry[0].length =
|
||||||
sizeof(opal_btl_usnic_btl_header_t);
|
sizeof(opal_btl_usnic_btl_header_t);
|
||||||
|
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
@ -255,7 +255,7 @@ opal_btl_usnic_ack_complete(opal_btl_usnic_module_t *module,
|
|||||||
void
|
void
|
||||||
opal_btl_usnic_ack_timeout(
|
opal_btl_usnic_ack_timeout(
|
||||||
opal_hotel_t *hotel,
|
opal_hotel_t *hotel,
|
||||||
int room_num,
|
int room_num,
|
||||||
void *occupant)
|
void *occupant)
|
||||||
{
|
{
|
||||||
opal_btl_usnic_send_segment_t *seg;
|
opal_btl_usnic_send_segment_t *seg;
|
||||||
@ -278,7 +278,7 @@ opal_btl_usnic_ack_timeout(
|
|||||||
seg->ss_hotel_room = -1;
|
seg->ss_hotel_room = -1;
|
||||||
|
|
||||||
/* Queue up this frag to be resent */
|
/* Queue up this frag to be resent */
|
||||||
opal_list_append(&(module->pending_resend_segs),
|
opal_list_append(&(module->pending_resend_segs),
|
||||||
&(seg->ss_base.us_list.super));
|
&(seg->ss_base.us_list.super));
|
||||||
|
|
||||||
/* Stats */
|
/* Stats */
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reap an ACK send that is complete
|
* Reap an ACK send that is complete
|
||||||
*/
|
*/
|
||||||
void opal_btl_usnic_ack_complete(opal_btl_usnic_module_t *module,
|
void opal_btl_usnic_ack_complete(opal_btl_usnic_module_t *module,
|
||||||
opal_btl_usnic_ack_segment_t *ack);
|
opal_btl_usnic_ack_segment_t *ack);
|
||||||
@ -51,7 +51,7 @@ void opal_btl_usnic_ack_send(opal_btl_usnic_module_t *module,
|
|||||||
* Callback for when a send times out without receiving a
|
* Callback for when a send times out without receiving a
|
||||||
* corresponding ACK
|
* corresponding ACK
|
||||||
*/
|
*/
|
||||||
void opal_btl_usnic_ack_timeout(opal_hotel_t *hotel, int room_num,
|
void opal_btl_usnic_ack_timeout(opal_hotel_t *hotel, int room_num,
|
||||||
void *occupant);
|
void *occupant);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -68,7 +68,7 @@ opal_btl_usnic_piggyback_ack(
|
|||||||
/* If ACK is needed, piggy-back it here and send it on */
|
/* If ACK is needed, piggy-back it here and send it on */
|
||||||
if (endpoint->endpoint_ack_needed) {
|
if (endpoint->endpoint_ack_needed) {
|
||||||
opal_btl_usnic_remove_from_endpoints_needing_ack(endpoint);
|
opal_btl_usnic_remove_from_endpoints_needing_ack(endpoint);
|
||||||
sseg->ss_base.us_btl_header->ack_seq =
|
sseg->ss_base.us_btl_header->ack_seq =
|
||||||
endpoint->endpoint_next_contig_seq_to_recv - 1;
|
endpoint->endpoint_next_contig_seq_to_recv - 1;
|
||||||
sseg->ss_base.us_btl_header->ack_present = 1;
|
sseg->ss_base.us_btl_header->ack_present = 1;
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012-2014 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2014 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -160,13 +160,13 @@ static int usnic_component_open(void)
|
|||||||
/* In this version, the USNIC stack does not support having more
|
/* In this version, the USNIC stack does not support having more
|
||||||
* than one GID. So just hard-wire this value to 0. */
|
* than one GID. So just hard-wire this value to 0. */
|
||||||
mca_btl_usnic_component.gid_index = 0;
|
mca_btl_usnic_component.gid_index = 0;
|
||||||
|
|
||||||
/* initialize objects */
|
/* initialize objects */
|
||||||
OBJ_CONSTRUCT(&mca_btl_usnic_component.usnic_procs, opal_list_t);
|
OBJ_CONSTRUCT(&mca_btl_usnic_component.usnic_procs, opal_list_t);
|
||||||
|
|
||||||
/* Sanity check: if_include and if_exclude need to be mutually
|
/* Sanity check: if_include and if_exclude need to be mutually
|
||||||
exclusive */
|
exclusive */
|
||||||
if (OPAL_SUCCESS !=
|
if (OPAL_SUCCESS !=
|
||||||
mca_base_var_check_exclusive("opal",
|
mca_base_var_check_exclusive("opal",
|
||||||
mca_btl_usnic_component.super.btl_version.mca_type_name,
|
mca_btl_usnic_component.super.btl_version.mca_type_name,
|
||||||
mca_btl_usnic_component.super.btl_version.mca_component_name,
|
mca_btl_usnic_component.super.btl_version.mca_component_name,
|
||||||
@ -178,13 +178,13 @@ static int usnic_component_open(void)
|
|||||||
"open" failing is not printed */
|
"open" failing is not printed */
|
||||||
return OPAL_ERR_NOT_AVAILABLE;
|
return OPAL_ERR_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Component cleanup
|
* Component cleanup
|
||||||
*/
|
*/
|
||||||
static int usnic_component_close(void)
|
static int usnic_component_close(void)
|
||||||
{
|
{
|
||||||
@ -232,7 +232,7 @@ static int usnic_modex_send(void)
|
|||||||
size_t size;
|
size_t size;
|
||||||
opal_btl_usnic_addr_t* addrs = NULL;
|
opal_btl_usnic_addr_t* addrs = NULL;
|
||||||
|
|
||||||
size = mca_btl_usnic_component.num_modules *
|
size = mca_btl_usnic_component.num_modules *
|
||||||
sizeof(opal_btl_usnic_addr_t);
|
sizeof(opal_btl_usnic_addr_t);
|
||||||
if (size != 0) {
|
if (size != 0) {
|
||||||
addrs = (opal_btl_usnic_addr_t*) malloc(size);
|
addrs = (opal_btl_usnic_addr_t*) malloc(size);
|
||||||
@ -241,19 +241,19 @@ static int usnic_modex_send(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < mca_btl_usnic_component.num_modules; i++) {
|
for (i = 0; i < mca_btl_usnic_component.num_modules; i++) {
|
||||||
opal_btl_usnic_module_t* module =
|
opal_btl_usnic_module_t* module =
|
||||||
mca_btl_usnic_component.usnic_active_modules[i];
|
mca_btl_usnic_component.usnic_active_modules[i];
|
||||||
addrs[i] = module->local_addr;
|
addrs[i] = module->local_addr;
|
||||||
opal_output_verbose(5, USNIC_OUT,
|
opal_output_verbose(5, USNIC_OUT,
|
||||||
"btl:usnic: modex_send DQP:%d, CQP:%d, subnet = 0x%016" PRIx64 " interface =0x%016" PRIx64,
|
"btl:usnic: modex_send DQP:%d, CQP:%d, subnet = 0x%016" PRIx64 " interface =0x%016" PRIx64,
|
||||||
addrs[i].qp_num[USNIC_DATA_CHANNEL],
|
addrs[i].qp_num[USNIC_DATA_CHANNEL],
|
||||||
addrs[i].qp_num[USNIC_PRIORITY_CHANNEL],
|
addrs[i].qp_num[USNIC_PRIORITY_CHANNEL],
|
||||||
ntoh64(addrs[i].gid.global.subnet_prefix),
|
ntoh64(addrs[i].gid.global.subnet_prefix),
|
||||||
ntoh64(addrs[i].gid.global.interface_id));
|
ntoh64(addrs[i].gid.global.interface_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = opal_modex_send(&mca_btl_usnic_component.super.btl_version,
|
rc = opal_modex_send(&mca_btl_usnic_component.super.btl_version,
|
||||||
addrs, size);
|
addrs, size);
|
||||||
if (NULL != addrs) {
|
if (NULL != addrs) {
|
||||||
free(addrs);
|
free(addrs);
|
||||||
@ -454,7 +454,7 @@ static mca_btl_base_module_t** usnic_component_init(int* num_btl_modules,
|
|||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
/* initialization */
|
/* initialization */
|
||||||
mca_btl_usnic_component.my_hashed_rte_name =
|
mca_btl_usnic_component.my_hashed_rte_name =
|
||||||
opal_proc_local_get()->proc_name;
|
opal_proc_local_get()->proc_name;
|
||||||
MSGDEBUG1_OUT("%s: my_hashed_rte_name=0x%" PRIx64,
|
MSGDEBUG1_OUT("%s: my_hashed_rte_name=0x%" PRIx64,
|
||||||
__func__, mca_btl_usnic_component.my_hashed_rte_name);
|
__func__, mca_btl_usnic_component.my_hashed_rte_name);
|
||||||
@ -522,7 +522,7 @@ static mca_btl_base_module_t** usnic_component_init(int* num_btl_modules,
|
|||||||
return upstream) */
|
return upstream) */
|
||||||
mca_btl_usnic_component.num_modules = opal_list_get_size(port_list);
|
mca_btl_usnic_component.num_modules = opal_list_get_size(port_list);
|
||||||
btls = (struct mca_btl_base_module_t**)
|
btls = (struct mca_btl_base_module_t**)
|
||||||
malloc(mca_btl_usnic_component.num_modules *
|
malloc(mca_btl_usnic_component.num_modules *
|
||||||
sizeof(opal_btl_usnic_module_t*));
|
sizeof(opal_btl_usnic_module_t*));
|
||||||
if (NULL == btls) {
|
if (NULL == btls) {
|
||||||
OPAL_ERROR_LOG(OPAL_ERR_OUT_OF_RESOURCE);
|
OPAL_ERROR_LOG(OPAL_ERR_OUT_OF_RESOURCE);
|
||||||
@ -606,7 +606,7 @@ static mca_btl_base_module_t** usnic_component_init(int* num_btl_modules,
|
|||||||
/* Query this device */
|
/* Query this device */
|
||||||
if (0 != ibv_query_device(module->device_context, &device_attr)) {
|
if (0 != ibv_query_device(module->device_context, &device_attr)) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -820,7 +820,7 @@ static mca_btl_base_module_t** usnic_component_init(int* num_btl_modules,
|
|||||||
module->port_num,
|
module->port_num,
|
||||||
module->super.btl_rndv_eager_limit);
|
module->super.btl_rndv_eager_limit);
|
||||||
opal_output_verbose(5, USNIC_OUT,
|
opal_output_verbose(5, USNIC_OUT,
|
||||||
"btl:usnic: max send size %s:%d = %" PRIsize_t
|
"btl:usnic: max send size %s:%d = %" PRIsize_t
|
||||||
" (not overrideable)",
|
" (not overrideable)",
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->port_num,
|
module->port_num,
|
||||||
@ -924,7 +924,7 @@ static mca_btl_base_module_t** usnic_component_init(int* num_btl_modules,
|
|||||||
* receive queue is handled directly in this routine, everything else
|
* receive queue is handled directly in this routine, everything else
|
||||||
* is deferred to an external call, usnic_component_progress_2()
|
* is deferred to an external call, usnic_component_progress_2()
|
||||||
* This helps keep usnic_component_progress() very small and very responsive
|
* This helps keep usnic_component_progress() very small and very responsive
|
||||||
* to a single incoming packet. We make sure not to always return
|
* to a single incoming packet. We make sure not to always return
|
||||||
* immediately after one packet to avoid starvation, "fastpath_ok" is
|
* immediately after one packet to avoid starvation, "fastpath_ok" is
|
||||||
* used for this.
|
* used for this.
|
||||||
*/
|
*/
|
||||||
@ -1108,7 +1108,7 @@ static int usnic_component_progress_2(void)
|
|||||||
|
|
||||||
/* Re-post all the remaining receive buffers */
|
/* Re-post all the remaining receive buffers */
|
||||||
if (OPAL_LIKELY(channel->repost_recv_head)) {
|
if (OPAL_LIKELY(channel->repost_recv_head)) {
|
||||||
rc = ibv_post_recv(channel->qp,
|
rc = ibv_post_recv(channel->qp,
|
||||||
channel->repost_recv_head, &bad_wr);
|
channel->repost_recv_head, &bad_wr);
|
||||||
channel->repost_recv_head = NULL;
|
channel->repost_recv_head = NULL;
|
||||||
if (OPAL_UNLIKELY(rc != 0)) {
|
if (OPAL_UNLIKELY(rc != 0)) {
|
||||||
|
@ -85,7 +85,7 @@ static void endpoint_construct(mca_btl_base_endpoint_t* endpoint)
|
|||||||
* due to timeout
|
* due to timeout
|
||||||
*/
|
*/
|
||||||
OBJ_CONSTRUCT(&endpoint->endpoint_hotel, opal_hotel_t);
|
OBJ_CONSTRUCT(&endpoint->endpoint_hotel, opal_hotel_t);
|
||||||
opal_hotel_init(&endpoint->endpoint_hotel,
|
opal_hotel_init(&endpoint->endpoint_hotel,
|
||||||
WINDOW_SIZE,
|
WINDOW_SIZE,
|
||||||
mca_btl_usnic_component.retrans_timeout,
|
mca_btl_usnic_component.retrans_timeout,
|
||||||
0,
|
0,
|
||||||
@ -147,7 +147,7 @@ static void endpoint_destruct(mca_btl_base_endpoint_t* endpoint)
|
|||||||
}
|
}
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(opal_btl_usnic_endpoint_t,
|
OBJ_CLASS_INSTANCE(opal_btl_usnic_endpoint_t,
|
||||||
opal_list_item_t,
|
opal_list_item_t,
|
||||||
endpoint_construct,
|
endpoint_construct,
|
||||||
endpoint_destruct);
|
endpoint_destruct);
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ opal_btl_usnic_flush_endpoint(
|
|||||||
frag = (opal_btl_usnic_send_frag_t *)opal_list_remove_first(
|
frag = (opal_btl_usnic_send_frag_t *)opal_list_remove_first(
|
||||||
&endpoint->endpoint_frag_send_queue);
|
&endpoint->endpoint_frag_send_queue);
|
||||||
|
|
||||||
/* _cond still needs to check ownership, but make sure the
|
/* _cond still needs to check ownership, but make sure the
|
||||||
* fragment is marked as done.
|
* fragment is marked as done.
|
||||||
*/
|
*/
|
||||||
frag->sf_ack_bytes_left = 0;
|
frag->sf_ack_bytes_left = 0;
|
||||||
|
@ -90,7 +90,7 @@ struct opal_btl_usnic_proc_t;
|
|||||||
* This is the largest number of fragments that can possibly be in-flight
|
* This is the largest number of fragments that can possibly be in-flight
|
||||||
* to us from a particular endpoint because eash chunked fragment will occupy
|
* to us from a particular endpoint because eash chunked fragment will occupy
|
||||||
* at least two segments, and only WINDOW_SIZE segments can be in flight.
|
* at least two segments, and only WINDOW_SIZE segments can be in flight.
|
||||||
* OK, so there is an extremely pathological case where we could see
|
* OK, so there is an extremely pathological case where we could see
|
||||||
* (WINDOW_SIZE/2)+1 "in flight" at once, but just dropping that last one
|
* (WINDOW_SIZE/2)+1 "in flight" at once, but just dropping that last one
|
||||||
* and waiting for retrans is just fine in this hypothetical hyper-pathological
|
* and waiting for retrans is just fine in this hypothetical hyper-pathological
|
||||||
* case, which is what we'll do.
|
* case, which is what we'll do.
|
||||||
|
@ -48,7 +48,7 @@ struct opal_btl_usnic_module_t;
|
|||||||
/**
|
/**
|
||||||
* Fragment types
|
* Fragment types
|
||||||
* The upper layer may give us very large "fragements" to send, larger than
|
* The upper layer may give us very large "fragements" to send, larger than
|
||||||
* an MTU. We break fragments into segments for sending, a segment being
|
* an MTU. We break fragments into segments for sending, a segment being
|
||||||
* defined to fit within an MTU.
|
* defined to fit within an MTU.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -128,7 +128,7 @@ typedef struct {
|
|||||||
/* payload legnth (in bytes). We unfortunately have to include
|
/* payload legnth (in bytes). We unfortunately have to include
|
||||||
this in our header because the L2 layer may artifically inflate
|
this in our header because the L2 layer may artifically inflate
|
||||||
the length of the packet to meet a minimum size */
|
the length of the packet to meet a minimum size */
|
||||||
uint16_t payload_len;
|
uint16_t payload_len;
|
||||||
|
|
||||||
/* If this is an emulated PUT, store at this address on receiver */
|
/* If this is an emulated PUT, store at this address on receiver */
|
||||||
char *put_addr;
|
char *put_addr;
|
||||||
@ -141,7 +141,7 @@ typedef struct {
|
|||||||
|
|
||||||
/* tag for upper layer */
|
/* tag for upper layer */
|
||||||
mca_btl_base_tag_t tag;
|
mca_btl_base_tag_t tag;
|
||||||
} opal_btl_usnic_btl_header_t;
|
} opal_btl_usnic_btl_header_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BTL header for a chunk of a fragment
|
* BTL header for a chunk of a fragment
|
||||||
@ -301,7 +301,7 @@ typedef struct opal_btl_usnic_large_send_frag_t {
|
|||||||
* small send fragment
|
* small send fragment
|
||||||
* Small send will optimistically use 2 SG entries in hopes of performing
|
* Small send will optimistically use 2 SG entries in hopes of performing
|
||||||
* an inline send, but will convert to a single SG entry is inline cannot
|
* an inline send, but will convert to a single SG entry is inline cannot
|
||||||
* be done and data must be copied.
|
* be done and data must be copied.
|
||||||
* First segment will point to registered memory of associated segment to
|
* First segment will point to registered memory of associated segment to
|
||||||
* hold BTL and upper layer headers.
|
* hold BTL and upper layer headers.
|
||||||
* Second segment will point directly to user data. If inlining fails, we
|
* Second segment will point directly to user data. If inlining fails, we
|
||||||
@ -497,8 +497,8 @@ opal_btl_usnic_send_frag_return_cond(
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a frag if it's all done and owned by BTL
|
* Return a frag if it's all done and owned by BTL
|
||||||
* If this is a PUT destination, only condition is that we own it. If it's
|
* If this is a PUT destination, only condition is that we own it. If it's
|
||||||
* a send frag, there are other conditions, so use the specific send frag
|
* a send frag, there are other conditions, so use the specific send frag
|
||||||
* return checker.
|
* return checker.
|
||||||
*/
|
*/
|
||||||
static inline void
|
static inline void
|
||||||
@ -574,7 +574,7 @@ opal_btl_usnic_ack_segment_alloc(opal_btl_usnic_module_t *module)
|
|||||||
return ack;
|
return ack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return an ACK segment
|
* Return an ACK segment
|
||||||
*/
|
*/
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2013-2014 Cisco Systems, Inc. All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -205,7 +205,7 @@ int opal_btl_usnic_hwloc_distance(opal_btl_usnic_module_t *module)
|
|||||||
/* Lookup the distance between my NUMA node and the NUMA node of
|
/* Lookup the distance between my NUMA node and the NUMA node of
|
||||||
the device */
|
the device */
|
||||||
if (NULL != dev_numa) {
|
if (NULL != dev_numa) {
|
||||||
module->numa_distance =
|
module->numa_distance =
|
||||||
matrix->latency[dev_numa->logical_index * num_numa_nodes +
|
matrix->latency[dev_numa->logical_index * num_numa_nodes +
|
||||||
my_numa_node->logical_index];
|
my_numa_node->logical_index];
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -73,7 +73,7 @@ static int reg_string(const char* param_name,
|
|||||||
{
|
{
|
||||||
*storage = (char*) default_value;
|
*storage = (char*) default_value;
|
||||||
mca_base_component_var_register(&mca_btl_usnic_component.super.btl_version,
|
mca_base_component_var_register(&mca_btl_usnic_component.super.btl_version,
|
||||||
param_name, help_string,
|
param_name, help_string,
|
||||||
MCA_BASE_VAR_TYPE_STRING,
|
MCA_BASE_VAR_TYPE_STRING,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
@ -82,7 +82,7 @@ static int reg_string(const char* param_name,
|
|||||||
MCA_BASE_VAR_SCOPE_READONLY,
|
MCA_BASE_VAR_SCOPE_READONLY,
|
||||||
storage);
|
storage);
|
||||||
|
|
||||||
if (0 == (flags & REGSTR_EMPTY_OK) &&
|
if (0 == (flags & REGSTR_EMPTY_OK) &&
|
||||||
(NULL == *storage || 0 == strlen(*storage))) {
|
(NULL == *storage || 0 == strlen(*storage))) {
|
||||||
opal_output(0, "Bad parameter value for parameter \"%s\"",
|
opal_output(0, "Bad parameter value for parameter \"%s\"",
|
||||||
param_name);
|
param_name);
|
||||||
@ -102,7 +102,7 @@ static int reg_int(const char* param_name,
|
|||||||
{
|
{
|
||||||
*storage = default_value;
|
*storage = default_value;
|
||||||
mca_base_component_var_register(&mca_btl_usnic_component.super.btl_version,
|
mca_base_component_var_register(&mca_btl_usnic_component.super.btl_version,
|
||||||
param_name, help_string,
|
param_name, help_string,
|
||||||
MCA_BASE_VAR_TYPE_INT,
|
MCA_BASE_VAR_TYPE_INT,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
@ -177,9 +177,9 @@ int opal_btl_usnic_component_register(void)
|
|||||||
|
|
||||||
CHECK(reg_string("if_include",
|
CHECK(reg_string("if_include",
|
||||||
"Comma-delimited list of devices/networks to be used (e.g. \"usnic_0,10.10.0.0/16\"; empty value means to use all available usNICs). Mutually exclusive with btl_usnic_if_exclude.",
|
"Comma-delimited list of devices/networks to be used (e.g. \"usnic_0,10.10.0.0/16\"; empty value means to use all available usNICs). Mutually exclusive with btl_usnic_if_exclude.",
|
||||||
NULL, &mca_btl_usnic_component.if_include,
|
NULL, &mca_btl_usnic_component.if_include,
|
||||||
REGSTR_EMPTY_OK, OPAL_INFO_LVL_1));
|
REGSTR_EMPTY_OK, OPAL_INFO_LVL_1));
|
||||||
|
|
||||||
CHECK(reg_string("if_exclude",
|
CHECK(reg_string("if_exclude",
|
||||||
"Comma-delimited list of devices/networks to be excluded (empty value means to not exclude any usNICs). Mutually exclusive with btl_usnic_if_include.",
|
"Comma-delimited list of devices/networks to be excluded (empty value means to not exclude any usNICs). Mutually exclusive with btl_usnic_if_include.",
|
||||||
NULL, &mca_btl_usnic_component.if_exclude,
|
NULL, &mca_btl_usnic_component.if_exclude,
|
||||||
@ -189,7 +189,7 @@ int opal_btl_usnic_component_register(void)
|
|||||||
"A non-negative integer specifying the frequency at which each USNIC BTL will output statistics (default: 0 seconds, meaning that statistics are disabled)",
|
"A non-negative integer specifying the frequency at which each USNIC BTL will output statistics (default: 0 seconds, meaning that statistics are disabled)",
|
||||||
0, &mca_btl_usnic_component.stats_frequency, 0,
|
0, &mca_btl_usnic_component.stats_frequency, 0,
|
||||||
OPAL_INFO_LVL_4));
|
OPAL_INFO_LVL_4));
|
||||||
mca_btl_usnic_component.stats_enabled =
|
mca_btl_usnic_component.stats_enabled =
|
||||||
(bool) (mca_btl_usnic_component.stats_frequency > 0);
|
(bool) (mca_btl_usnic_component.stats_frequency > 0);
|
||||||
|
|
||||||
CHECK(reg_int("stats_relative",
|
CHECK(reg_int("stats_relative",
|
||||||
@ -237,7 +237,7 @@ int opal_btl_usnic_component_register(void)
|
|||||||
CHECK(reg_int("priority_limit", "Max size of \"priority\" messages (0 = use pre-set defaults; depends on number and type of devices available)",
|
CHECK(reg_int("priority_limit", "Max size of \"priority\" messages (0 = use pre-set defaults; depends on number and type of devices available)",
|
||||||
0, &max_tiny_payload,
|
0, &max_tiny_payload,
|
||||||
REGINT_GE_ZERO, OPAL_INFO_LVL_5));
|
REGINT_GE_ZERO, OPAL_INFO_LVL_5));
|
||||||
opal_btl_usnic_module_template.max_tiny_payload =
|
opal_btl_usnic_module_template.max_tiny_payload =
|
||||||
(size_t) max_tiny_payload;
|
(size_t) max_tiny_payload;
|
||||||
|
|
||||||
CHECK(reg_int("eager_limit", "Eager send limit (0 = use pre-set defaults; depends on number and type of devices available)",
|
CHECK(reg_int("eager_limit", "Eager send limit (0 = use pre-set defaults; depends on number and type of devices available)",
|
||||||
@ -246,7 +246,7 @@ int opal_btl_usnic_component_register(void)
|
|||||||
|
|
||||||
CHECK(reg_int("rndv_eager_limit", "Eager rendezvous limit (0 = use pre-set defaults; depends on number and type of devices available)",
|
CHECK(reg_int("rndv_eager_limit", "Eager rendezvous limit (0 = use pre-set defaults; depends on number and type of devices available)",
|
||||||
0, &rndv_eager_limit, REGINT_GE_ZERO, OPAL_INFO_LVL_5));
|
0, &rndv_eager_limit, REGINT_GE_ZERO, OPAL_INFO_LVL_5));
|
||||||
opal_btl_usnic_module_template.super.btl_rndv_eager_limit =
|
opal_btl_usnic_module_template.super.btl_rndv_eager_limit =
|
||||||
rndv_eager_limit;
|
rndv_eager_limit;
|
||||||
|
|
||||||
CHECK(reg_int("pack_lazy_threshold", "Convertor packing on-the-fly threshold (-1 = always pack eagerly, 0 = always pack lazily, otherwise will pack on the fly if fragment size is > limit)",
|
CHECK(reg_int("pack_lazy_threshold", "Convertor packing on-the-fly threshold (-1 = always pack eagerly, 0 = always pack lazily, otherwise will pack on the fly if fragment size is > limit)",
|
||||||
|
@ -477,7 +477,7 @@ static int usnic_del_procs(struct mca_btl_base_module_t *base_module,
|
|||||||
/*
|
/*
|
||||||
* Let the PML register a callback function with me
|
* Let the PML register a callback function with me
|
||||||
*/
|
*/
|
||||||
static int usnic_register_pml_err_cb(struct mca_btl_base_module_t* btl,
|
static int usnic_register_pml_err_cb(struct mca_btl_base_module_t* btl,
|
||||||
mca_btl_base_module_error_cb_fn_t cbfunc)
|
mca_btl_base_module_error_cb_fn_t cbfunc)
|
||||||
{
|
{
|
||||||
opal_btl_usnic_module_t *module = (opal_btl_usnic_module_t*) btl;
|
opal_btl_usnic_module_t *module = (opal_btl_usnic_module_t*) btl;
|
||||||
@ -494,7 +494,7 @@ static int usnic_register_pml_err_cb(struct mca_btl_base_module_t* btl,
|
|||||||
* alloc.
|
* alloc.
|
||||||
* --> Contraction in the btl.h documentation.
|
* --> Contraction in the btl.h documentation.
|
||||||
*/
|
*/
|
||||||
static mca_btl_base_descriptor_t*
|
static mca_btl_base_descriptor_t*
|
||||||
usnic_alloc(struct mca_btl_base_module_t* btl,
|
usnic_alloc(struct mca_btl_base_module_t* btl,
|
||||||
struct mca_btl_base_endpoint_t* endpoint,
|
struct mca_btl_base_endpoint_t* endpoint,
|
||||||
uint8_t order,
|
uint8_t order,
|
||||||
@ -1217,7 +1217,7 @@ usnic_do_resends(
|
|||||||
/* re-send the segment */
|
/* re-send the segment */
|
||||||
opal_btl_usnic_post_segment(module, endpoint, sseg);
|
opal_btl_usnic_post_segment(module, endpoint, sseg);
|
||||||
|
|
||||||
/* consume a send credit for this endpoint. May send us
|
/* consume a send credit for this endpoint. May send us
|
||||||
* negative, oh well... This is because the completion routine
|
* negative, oh well... This is because the completion routine
|
||||||
* always increments send credits, and we must balance.
|
* always increments send credits, and we must balance.
|
||||||
* Alternative is to mark this as a retrans segment and check in
|
* Alternative is to mark this as a retrans segment and check in
|
||||||
@ -1333,7 +1333,7 @@ usnic_handle_large_send(
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Progress the send engine.
|
* Progress the send engine.
|
||||||
* Should only ever be called from usnic_component_progress() to
|
* Should only ever be called from usnic_component_progress() to
|
||||||
* avoid re-entrancy issues.
|
* avoid re-entrancy issues.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -1347,7 +1347,7 @@ opal_btl_usnic_module_progress_sends(
|
|||||||
struct opal_btl_usnic_channel_t *prio_channel;
|
struct opal_btl_usnic_channel_t *prio_channel;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Post all the sends that we can
|
* Post all the sends that we can
|
||||||
* resends 1st priority
|
* resends 1st priority
|
||||||
* ACKs 2nd priority
|
* ACKs 2nd priority
|
||||||
* new sends 3rd
|
* new sends 3rd
|
||||||
@ -1535,7 +1535,7 @@ usnic_send(
|
|||||||
if (frag->sf_base.uf_type == OPAL_BTL_USNIC_FRAG_SMALL_SEND &&
|
if (frag->sf_base.uf_type == OPAL_BTL_USNIC_FRAG_SMALL_SEND &&
|
||||||
frag->sf_ack_bytes_left < module->max_tiny_payload &&
|
frag->sf_ack_bytes_left < module->max_tiny_payload &&
|
||||||
WINDOW_OPEN(endpoint) &&
|
WINDOW_OPEN(endpoint) &&
|
||||||
(module->mod_channels[USNIC_PRIORITY_CHANNEL].sd_wqe >=
|
(module->mod_channels[USNIC_PRIORITY_CHANNEL].sd_wqe >=
|
||||||
module->mod_channels[USNIC_PRIORITY_CHANNEL].fastsend_wqe_thresh)) {
|
module->mod_channels[USNIC_PRIORITY_CHANNEL].fastsend_wqe_thresh)) {
|
||||||
size_t payload_len;
|
size_t payload_len;
|
||||||
|
|
||||||
@ -1547,7 +1547,7 @@ usnic_send(
|
|||||||
|
|
||||||
/* fix up verbs SG entries */
|
/* fix up verbs SG entries */
|
||||||
sseg->ss_base.us_sg_entry[0].length =
|
sseg->ss_base.us_sg_entry[0].length =
|
||||||
sizeof(opal_btl_usnic_btl_header_t) +
|
sizeof(opal_btl_usnic_btl_header_t) +
|
||||||
frag->sf_base.uf_local_seg[0].seg_len;
|
frag->sf_base.uf_local_seg[0].seg_len;
|
||||||
|
|
||||||
if (frag->sf_base.uf_base.des_local_count > 1) {
|
if (frag->sf_base.uf_base.des_local_count > 1) {
|
||||||
@ -1617,7 +1617,7 @@ usnic_send(
|
|||||||
* We move this off to another function because having it inside
|
* We move this off to another function because having it inside
|
||||||
* this function seems to add a little latency, likely due to inlines
|
* this function seems to add a little latency, likely due to inlines
|
||||||
* making the function too big. In fact, the routine had to go to
|
* making the function too big. In fact, the routine had to go to
|
||||||
* another file entirely, else the compiler tried to be helpful
|
* another file entirely, else the compiler tried to be helpful
|
||||||
* and inline all by itself.
|
* and inline all by itself.
|
||||||
*/
|
*/
|
||||||
rc = opal_btl_usnic_finish_put_or_send(module, endpoint, frag, tag);
|
rc = opal_btl_usnic_finish_put_or_send(module, endpoint, frag, tag);
|
||||||
@ -1719,7 +1719,7 @@ static void module_async_event_callback(int fd, short flags, void *arg)
|
|||||||
ignore it. */
|
ignore it. */
|
||||||
opal_output_verbose(10, USNIC_OUT,
|
opal_output_verbose(10, USNIC_OUT,
|
||||||
"btl:usnic: got IBV_EVENT_PORT_ACTIVE on %s:%d",
|
"btl:usnic: got IBV_EVENT_PORT_ACTIVE on %s:%d",
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->port_num);
|
module->port_num);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1790,7 +1790,7 @@ init_qp(
|
|||||||
channel->qp = ibv_create_qp(module->pd, &qp_init_attr);
|
channel->qp = ibv_create_qp(module->pd, &qp_init_attr);
|
||||||
if (NULL == channel->qp) {
|
if (NULL == channel->qp) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "create ibv resource failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "create ibv resource failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -1810,7 +1810,7 @@ init_qp(
|
|||||||
if (ibv_modify_qp(channel->qp, &qp_attr,
|
if (ibv_modify_qp(channel->qp, &qp_attr,
|
||||||
IBV_QP_STATE | IBV_QP_PORT)) {
|
IBV_QP_STATE | IBV_QP_PORT)) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -1825,9 +1825,9 @@ init_qp(
|
|||||||
if (ibv_query_qp(channel->qp, &qp_attr, IBV_QP_CAP,
|
if (ibv_query_qp(channel->qp, &qp_attr, IBV_QP_CAP,
|
||||||
&qp_init_attr) != 0) {
|
&qp_init_attr) != 0) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
"ibv_query_qp()", __FILE__, __LINE__,
|
"ibv_query_qp()", __FILE__, __LINE__,
|
||||||
"Failed to query an existing queue pair");
|
"Failed to query an existing queue pair");
|
||||||
@ -1853,7 +1853,7 @@ static int move_qp_to_rtr(opal_btl_usnic_module_t *module,
|
|||||||
qp_attr.qp_state = IBV_QPS_RTR;
|
qp_attr.qp_state = IBV_QPS_RTR;
|
||||||
if (ibv_modify_qp(channel->qp, &qp_attr, IBV_QP_STATE)) {
|
if (ibv_modify_qp(channel->qp, &qp_attr, IBV_QP_STATE)) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -1876,7 +1876,7 @@ static int move_qp_to_rts(opal_btl_usnic_module_t *module,
|
|||||||
qp_attr.qp_state = IBV_QPS_RTS;
|
qp_attr.qp_state = IBV_QPS_RTS;
|
||||||
if (ibv_modify_qp(channel->qp, &qp_attr, IBV_QP_STATE)) {
|
if (ibv_modify_qp(channel->qp, &qp_attr, IBV_QP_STATE)) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -1955,7 +1955,7 @@ opal_btl_usnic_channel_init(
|
|||||||
channel->cq = ibv_create_cq(ctx, module->cq_num, NULL, NULL, 0);
|
channel->cq = ibv_create_cq(ctx, module->cq_num, NULL, NULL, 0);
|
||||||
if (NULL == channel->cq) {
|
if (NULL == channel->cq) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "create ibv resource failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "create ibv resource failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -2001,7 +2001,7 @@ opal_btl_usnic_channel_init(
|
|||||||
if (NULL == rseg) {
|
if (NULL == rseg) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt",
|
opal_show_help("help-mpi-btl-usnic.txt",
|
||||||
"internal error during init",
|
"internal error during init",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -2016,7 +2016,7 @@ opal_btl_usnic_channel_init(
|
|||||||
|
|
||||||
if (ibv_post_recv(channel->qp, &rseg->rs_recv_desc, &bad_wr)) {
|
if (ibv_post_recv(channel->qp, &rseg->rs_recv_desc, &bad_wr)) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -2103,9 +2103,9 @@ int opal_btl_usnic_module_init(opal_btl_usnic_module_t *module)
|
|||||||
module->pd = ibv_alloc_pd(ctx);
|
module->pd = ibv_alloc_pd(ctx);
|
||||||
if (NULL == module->pd) {
|
if (NULL == module->pd) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
"ibv_alloc_pd()", __FILE__, __LINE__,
|
"ibv_alloc_pd()", __FILE__, __LINE__,
|
||||||
"Failed to create a PD; is the usnic_verbs Linux kernel module loaded?");
|
"Failed to create a PD; is the usnic_verbs Linux kernel module loaded?");
|
||||||
@ -2117,14 +2117,14 @@ int opal_btl_usnic_module_init(opal_btl_usnic_module_t *module)
|
|||||||
mpool_resources.sizeof_reg = sizeof(opal_btl_usnic_reg_t);
|
mpool_resources.sizeof_reg = sizeof(opal_btl_usnic_reg_t);
|
||||||
mpool_resources.register_mem = usnic_reg_mr;
|
mpool_resources.register_mem = usnic_reg_mr;
|
||||||
mpool_resources.deregister_mem = usnic_dereg_mr;
|
mpool_resources.deregister_mem = usnic_dereg_mr;
|
||||||
asprintf(&mpool_resources.pool_name, "usnic.%" PRIu64,
|
asprintf(&mpool_resources.pool_name, "usnic.%" PRIu64,
|
||||||
module->local_addr.gid.global.interface_id);
|
module->local_addr.gid.global.interface_id);
|
||||||
module->super.btl_mpool =
|
module->super.btl_mpool =
|
||||||
mca_mpool_base_module_create(mca_btl_usnic_component.usnic_mpool_name,
|
mca_mpool_base_module_create(mca_btl_usnic_component.usnic_mpool_name,
|
||||||
&module->super, &mpool_resources);
|
&module->super, &mpool_resources);
|
||||||
if (NULL == module->super.btl_mpool) {
|
if (NULL == module->super.btl_mpool) {
|
||||||
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
opal_show_help("help-mpi-btl-usnic.txt", "ibv API failed",
|
||||||
true,
|
true,
|
||||||
opal_process_info.nodename,
|
opal_process_info.nodename,
|
||||||
ibv_get_device_name(module->device),
|
ibv_get_device_name(module->device),
|
||||||
module->if_name,
|
module->if_name,
|
||||||
@ -2159,8 +2159,8 @@ int opal_btl_usnic_module_init(opal_btl_usnic_module_t *module)
|
|||||||
|
|
||||||
/* Get the fd to receive events on this device */
|
/* Get the fd to receive events on this device */
|
||||||
opal_event_set(opal_event_base, &(module->device_async_event),
|
opal_event_set(opal_event_base, &(module->device_async_event),
|
||||||
module->device_context->async_fd,
|
module->device_context->async_fd,
|
||||||
OPAL_EV_READ | OPAL_EV_PERSIST,
|
OPAL_EV_READ | OPAL_EV_PERSIST,
|
||||||
module_async_event_callback, module);
|
module_async_event_callback, module);
|
||||||
opal_event_add(&(module->device_async_event), NULL);
|
opal_event_add(&(module->device_async_event), NULL);
|
||||||
module->device_async_event_active = true;
|
module->device_async_event_active = true;
|
||||||
@ -2176,7 +2176,7 @@ int opal_btl_usnic_module_init(opal_btl_usnic_module_t *module)
|
|||||||
|
|
||||||
/* list of endpoints that are ready to send */
|
/* list of endpoints that are ready to send */
|
||||||
OBJ_CONSTRUCT(&module->endpoints_with_sends, opal_list_t);
|
OBJ_CONSTRUCT(&module->endpoints_with_sends, opal_list_t);
|
||||||
|
|
||||||
segsize = (module->if_mtu + opal_cache_line_size - 1) &
|
segsize = (module->if_mtu + opal_cache_line_size - 1) &
|
||||||
~(opal_cache_line_size - 1);
|
~(opal_cache_line_size - 1);
|
||||||
|
|
||||||
@ -2298,7 +2298,7 @@ dealloc_pd:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int usnic_ft_event(int state)
|
static int usnic_ft_event(int state)
|
||||||
{
|
{
|
||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ typedef struct opal_btl_usnic_module_t {
|
|||||||
int prio_sd_num;
|
int prio_sd_num;
|
||||||
int prio_rd_num;
|
int prio_rd_num;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fragments larger than max_frag_payload will be broken up into
|
* Fragments larger than max_frag_payload will be broken up into
|
||||||
* multiple chunks. The amount that can be held in a single chunk
|
* multiple chunks. The amount that can be held in a single chunk
|
||||||
* segment is slightly less than what can be held in frag segment due
|
* segment is slightly less than what can be held in frag segment due
|
||||||
|
@ -95,7 +95,7 @@ static void proc_destruct(opal_btl_usnic_proc_t* proc)
|
|||||||
|
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(opal_btl_usnic_proc_t,
|
OBJ_CLASS_INSTANCE(opal_btl_usnic_proc_t,
|
||||||
opal_list_item_t,
|
opal_list_item_t,
|
||||||
proc_construct,
|
proc_construct,
|
||||||
proc_destruct);
|
proc_destruct);
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ opal_btl_usnic_proc_lookup_endpoint(opal_btl_usnic_module_t *receiver,
|
|||||||
* Returns OPAL_ERR_UNREACH if we can't reach the peer (i.e., we can't
|
* Returns OPAL_ERR_UNREACH if we can't reach the peer (i.e., we can't
|
||||||
* find their modex data).
|
* find their modex data).
|
||||||
*/
|
*/
|
||||||
static int create_proc(opal_proc_t *opal_proc,
|
static int create_proc(opal_proc_t *opal_proc,
|
||||||
opal_btl_usnic_proc_t **usnic_proc)
|
opal_btl_usnic_proc_t **usnic_proc)
|
||||||
{
|
{
|
||||||
opal_btl_usnic_proc_t *proc = NULL;
|
opal_btl_usnic_proc_t *proc = NULL;
|
||||||
@ -213,7 +213,7 @@ static int create_proc(opal_proc_t *opal_proc,
|
|||||||
if ((size % sizeof(opal_btl_usnic_addr_t)) != 0) {
|
if ((size % sizeof(opal_btl_usnic_addr_t)) != 0) {
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
|
|
||||||
snprintf(msg, sizeof(msg),
|
snprintf(msg, sizeof(msg),
|
||||||
"sizeof(modex for peer %s data) == %d, expected multiple of %d",
|
"sizeof(modex for peer %s data) == %d, expected multiple of %d",
|
||||||
OPAL_NAME_PRINT(opal_proc->proc_name),
|
OPAL_NAME_PRINT(opal_proc->proc_name),
|
||||||
(int) size, (int) sizeof(opal_btl_usnic_addr_t));
|
(int) size, (int) sizeof(opal_btl_usnic_addr_t));
|
||||||
@ -250,7 +250,7 @@ static int create_proc(opal_proc_t *opal_proc,
|
|||||||
return OPAL_ERR_BAD_PARAM;
|
return OPAL_ERR_BAD_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
proc->proc_modex_claimed = (bool*)
|
proc->proc_modex_claimed = (bool*)
|
||||||
calloc(proc->proc_modex_count, sizeof(bool));
|
calloc(proc->proc_modex_count, sizeof(bool));
|
||||||
if (NULL == proc->proc_modex_claimed) {
|
if (NULL == proc->proc_modex_claimed) {
|
||||||
OPAL_ERROR_LOG(OPAL_ERR_OUT_OF_RESOURCE);
|
OPAL_ERROR_LOG(OPAL_ERR_OUT_OF_RESOURCE);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We have received a segment, take action based on the
|
* We have received a segment, take action based on the
|
||||||
* packet type in the BTL header
|
* packet type in the BTL header
|
||||||
*/
|
*/
|
||||||
void opal_btl_usnic_recv_call(opal_btl_usnic_module_t *module,
|
void opal_btl_usnic_recv_call(opal_btl_usnic_module_t *module,
|
||||||
@ -79,8 +79,8 @@ void opal_btl_usnic_recv_call(opal_btl_usnic_module_t *module,
|
|||||||
/* No idea who this was from, so drop it */
|
/* No idea who this was from, so drop it */
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
opal_output(0, "=== Unknown sender; dropped: from MAC %s to MAC %s, seq %" UDSEQ,
|
opal_output(0, "=== Unknown sender; dropped: from MAC %s to MAC %s, seq %" UDSEQ,
|
||||||
src_mac,
|
src_mac,
|
||||||
dest_mac,
|
dest_mac,
|
||||||
bseg->us_btl_header->pkt_seq);
|
bseg->us_btl_header->pkt_seq);
|
||||||
#endif
|
#endif
|
||||||
++module->stats.num_unk_recvs;
|
++module->stats.num_unk_recvs;
|
||||||
@ -149,7 +149,7 @@ void opal_btl_usnic_recv_call(opal_btl_usnic_module_t *module,
|
|||||||
*/
|
*/
|
||||||
} else {
|
} else {
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
opal_output(0, "Copy %d PUT bytes to %p\n",
|
opal_output(0, "Copy %d PUT bytes to %p\n",
|
||||||
seg->rs_base.us_btl_header->payload_len,
|
seg->rs_base.us_btl_header->payload_len,
|
||||||
(void*)seg->rs_base.us_btl_header->put_addr);
|
(void*)seg->rs_base.us_btl_header->put_addr);
|
||||||
#endif
|
#endif
|
||||||
@ -330,7 +330,7 @@ void opal_btl_usnic_recv_call(opal_btl_usnic_module_t *module,
|
|||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* Frag is an incoming ACK */
|
/* Frag is an incoming ACK */
|
||||||
else if (OPAL_LIKELY(OPAL_BTL_USNIC_PAYLOAD_TYPE_ACK ==
|
else if (OPAL_LIKELY(OPAL_BTL_USNIC_PAYLOAD_TYPE_ACK ==
|
||||||
bseg->us_btl_header->payload_type)) {
|
bseg->us_btl_header->payload_type)) {
|
||||||
opal_btl_usnic_seq_t ack_seq;
|
opal_btl_usnic_seq_t ack_seq;
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ lookup_sender(opal_btl_usnic_module_t *module, opal_btl_usnic_segment_t *seg)
|
|||||||
btl_header->sender, echo back the ptr to the sender's
|
btl_header->sender, echo back the ptr to the sender's
|
||||||
ompi_proc. There was limited speedup with this scheme; more
|
ompi_proc. There was limited speedup with this scheme; more
|
||||||
investigation is required. */
|
investigation is required. */
|
||||||
ret = opal_hash_table_get_value_uint64(&module->senders,
|
ret = opal_hash_table_get_value_uint64(&module->senders,
|
||||||
seg->us_btl_header->sender,
|
seg->us_btl_header->sender,
|
||||||
(void**) &sender);
|
(void**) &sender);
|
||||||
if (OPAL_LIKELY(OPAL_SUCCESS == ret)) {
|
if (OPAL_LIKELY(OPAL_SUCCESS == ret)) {
|
||||||
@ -50,10 +50,10 @@ lookup_sender(opal_btl_usnic_module_t *module, opal_btl_usnic_segment_t *seg)
|
|||||||
|
|
||||||
/* The sender wasn't in the hash table, so do a slow lookup and
|
/* The sender wasn't in the hash table, so do a slow lookup and
|
||||||
put the result in the hash table */
|
put the result in the hash table */
|
||||||
sender = opal_btl_usnic_proc_lookup_endpoint(module,
|
sender = opal_btl_usnic_proc_lookup_endpoint(module,
|
||||||
seg->us_btl_header->sender);
|
seg->us_btl_header->sender);
|
||||||
if (NULL != sender) {
|
if (NULL != sender) {
|
||||||
opal_hash_table_set_value_uint64(&module->senders,
|
opal_hash_table_set_value_uint64(&module->senders,
|
||||||
seg->us_btl_header->sender, sender);
|
seg->us_btl_header->sender, sender);
|
||||||
return sender;
|
return sender;
|
||||||
}
|
}
|
||||||
@ -132,7 +132,7 @@ opal_btl_usnic_check_rx_seq(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Do we have room in the endpoint's receiver window?
|
/* Do we have room in the endpoint's receiver window?
|
||||||
|
|
||||||
Receiver window:
|
Receiver window:
|
||||||
|
|
||||||
|-------- WINDOW_SIZE ----------|
|
|-------- WINDOW_SIZE ----------|
|
||||||
@ -144,7 +144,7 @@ opal_btl_usnic_check_rx_seq(
|
|||||||
+-- next_contig_seq_to_recv: the window left edge;
|
+-- next_contig_seq_to_recv: the window left edge;
|
||||||
will always be less than highest_seq_rcvd
|
will always be less than highest_seq_rcvd
|
||||||
|
|
||||||
The good condition is
|
The good condition is
|
||||||
|
|
||||||
next_contig_seq_to_recv <= seq < next_contig_seq_to_recv + WINDOW_SIZE
|
next_contig_seq_to_recv <= seq < next_contig_seq_to_recv + WINDOW_SIZE
|
||||||
|
|
||||||
@ -159,9 +159,9 @@ opal_btl_usnic_check_rx_seq(
|
|||||||
if (delta < 0 || delta >= WINDOW_SIZE) {
|
if (delta < 0 || delta >= WINDOW_SIZE) {
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
opal_output(0, "<-- Received FRAG/CHUNK ep %p, seq %" UDSEQ " outside of window (%" UDSEQ " - %" UDSEQ "), %p, module %p -- DROPPED\n",
|
opal_output(0, "<-- Received FRAG/CHUNK ep %p, seq %" UDSEQ " outside of window (%" UDSEQ " - %" UDSEQ "), %p, module %p -- DROPPED\n",
|
||||||
(void*)endpoint, seg->rs_base.us_btl_header->pkt_seq,
|
(void*)endpoint, seg->rs_base.us_btl_header->pkt_seq,
|
||||||
endpoint->endpoint_next_contig_seq_to_recv,
|
endpoint->endpoint_next_contig_seq_to_recv,
|
||||||
(endpoint->endpoint_next_contig_seq_to_recv +
|
(endpoint->endpoint_next_contig_seq_to_recv +
|
||||||
WINDOW_SIZE - 1),
|
WINDOW_SIZE - 1),
|
||||||
(void*) seg,
|
(void*) seg,
|
||||||
(void*) endpoint->endpoint_module);
|
(void*) endpoint->endpoint_module);
|
||||||
@ -194,7 +194,7 @@ opal_btl_usnic_check_rx_seq(
|
|||||||
|
|
||||||
rel_posn_in_recv_win = seq - next_contig_seq_to_recv
|
rel_posn_in_recv_win = seq - next_contig_seq_to_recv
|
||||||
array_posn = (rel_posn_in_recv_win + rfstart) % WINDOW_SIZE
|
array_posn = (rel_posn_in_recv_win + rfstart) % WINDOW_SIZE
|
||||||
|
|
||||||
rfstart is then updated when we send ACKs:
|
rfstart is then updated when we send ACKs:
|
||||||
|
|
||||||
rfstart = (rfstart + num_acks_sent) % WINDOW_SIZE
|
rfstart = (rfstart + num_acks_sent) % WINDOW_SIZE
|
||||||
@ -234,7 +234,7 @@ dup_needs_ack:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We have received a segment, take action based on the
|
* We have received a segment, take action based on the
|
||||||
* packet type in the BTL header.
|
* packet type in the BTL header.
|
||||||
* Try to be fast here - defer as much bookkeeping until later as
|
* Try to be fast here - defer as much bookkeeping until later as
|
||||||
* possible.
|
* possible.
|
||||||
@ -289,7 +289,7 @@ opal_btl_usnic_recv_fast(opal_btl_usnic_module_t *module,
|
|||||||
*/
|
*/
|
||||||
reg = mca_btl_base_active_message_trigger + bseg->us_btl_header->tag;
|
reg = mca_btl_base_active_message_trigger + bseg->us_btl_header->tag;
|
||||||
seg->rs_segment.seg_len = bseg->us_btl_header->payload_len;
|
seg->rs_segment.seg_len = bseg->us_btl_header->payload_len;
|
||||||
reg->cbfunc(&module->super, bseg->us_btl_header->tag,
|
reg->cbfunc(&module->super, bseg->us_btl_header->tag,
|
||||||
&seg->rs_desc, reg->cbdata);
|
&seg->rs_desc, reg->cbdata);
|
||||||
|
|
||||||
drop:
|
drop:
|
||||||
@ -347,7 +347,7 @@ repost:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We have received a segment, take action based on the
|
* We have received a segment, take action based on the
|
||||||
* packet type in the BTL header
|
* packet type in the BTL header
|
||||||
*/
|
*/
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -11,9 +11,9 @@
|
|||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 2006 Sandia National Laboratories. All rights
|
* Copyright (c) 2006 Sandia National Laboratories. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2008-2013 Cisco Systems, Inc. All rights reserved.
|
* Copyright (c) 2008-2014 Cisco Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if conditions are right, and if so, put endpoint on
|
* Check if conditions are right, and if so, put endpoint on
|
||||||
* list of endpoints that have sends to be done
|
* list of endpoints that have sends to be done
|
||||||
*/
|
*/
|
||||||
static inline void
|
static inline void
|
||||||
@ -85,7 +85,7 @@ opal_btl_usnic_post_segment(
|
|||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
opal_output(0, "post_send: type=%s, addr=%p, len=%d, payload=%d\n",
|
opal_output(0, "post_send: type=%s, addr=%p, len=%d, payload=%d\n",
|
||||||
usnic_seg_type(sseg->ss_base.us_type),
|
usnic_seg_type(sseg->ss_base.us_type),
|
||||||
(void*) sseg->ss_send_desc.sg_list->addr,
|
(void*) sseg->ss_send_desc.sg_list->addr,
|
||||||
sge_total(&sseg->ss_send_desc),
|
sge_total(&sseg->ss_send_desc),
|
||||||
sseg->ss_base.us_btl_header->payload_len);
|
sseg->ss_base.us_btl_header->payload_len);
|
||||||
/*opal_btl_usnic_dump_hex((void *)(sseg->ss_send_desc.sg_list->addr + sizeof(opal_btl_usnic_btl_header_t)), 16); */
|
/*opal_btl_usnic_dump_hex((void *)(sseg->ss_send_desc.sg_list->addr + sizeof(opal_btl_usnic_btl_header_t)), 16); */
|
||||||
@ -103,7 +103,7 @@ opal_btl_usnic_post_segment(
|
|||||||
/* Post segment to the NIC */
|
/* Post segment to the NIC */
|
||||||
ret = ibv_post_send(channel->qp, &sseg->ss_send_desc, &bad_wr);
|
ret = ibv_post_send(channel->qp, &sseg->ss_send_desc, &bad_wr);
|
||||||
if (OPAL_UNLIKELY(0 != ret)) {
|
if (OPAL_UNLIKELY(0 != ret)) {
|
||||||
opal_btl_usnic_util_abort("ibv_post_send() failed",
|
opal_btl_usnic_util_abort("ibv_post_send() failed",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
/* Never returns */
|
/* Never returns */
|
||||||
}
|
}
|
||||||
@ -185,7 +185,7 @@ opal_btl_usnic_endpoint_send_segment(
|
|||||||
(sseg->ss_parent_frag->sf_base.uf_type == OPAL_BTL_USNIC_FRAG_LARGE_SEND)?
|
(sseg->ss_parent_frag->sf_base.uf_type == OPAL_BTL_USNIC_FRAG_LARGE_SEND)?
|
||||||
"CHUNK" : "FRAG",
|
"CHUNK" : "FRAG",
|
||||||
sseg->ss_base.us_btl_header->pkt_seq,
|
sseg->ss_base.us_btl_header->pkt_seq,
|
||||||
sseg->ss_base.us_btl_header->sender,
|
sseg->ss_base.us_btl_header->sender,
|
||||||
endpoint->endpoint_module->device->name,
|
endpoint->endpoint_module->device->name,
|
||||||
mac_str1, module->local_addr.qp_num[sseg->ss_channel],
|
mac_str1, module->local_addr.qp_num[sseg->ss_channel],
|
||||||
(void*)sseg, sseg->ss_hotel_room,
|
(void*)sseg, sseg->ss_hotel_room,
|
||||||
@ -259,7 +259,7 @@ opal_btl_usnic_release_send_segment(
|
|||||||
opal_btl_usnic_send_frag_t *frag,
|
opal_btl_usnic_send_frag_t *frag,
|
||||||
opal_btl_usnic_send_segment_t *sseg)
|
opal_btl_usnic_send_segment_t *sseg)
|
||||||
{
|
{
|
||||||
/* We only return CHUNK segments because they are the only send-style
|
/* We only return CHUNK segments because they are the only send-style
|
||||||
* segments that are dynamically allocated.
|
* segments that are dynamically allocated.
|
||||||
*/
|
*/
|
||||||
if (sseg->ss_base.us_type == OPAL_BTL_USNIC_SEG_CHUNK) {
|
if (sseg->ss_base.us_type == OPAL_BTL_USNIC_SEG_CHUNK) {
|
||||||
|
@ -427,7 +427,7 @@ static void setup_mpit_pvars_enum(void)
|
|||||||
into private storage, so we don't need them any more) */
|
into private storage, so we don't need them any more) */
|
||||||
for (i = 0; i < mca_btl_usnic_component.num_modules; ++i) {
|
for (i = 0; i < mca_btl_usnic_component.num_modules; ++i) {
|
||||||
free((char*) devices[i].string);
|
free((char*) devices[i].string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The devices_enum has been RETAIN'ed by the pvar, so we can
|
/* The devices_enum has been RETAIN'ed by the pvar, so we can
|
||||||
RELEASE it here, and the enum will be destroyed when the pvar
|
RELEASE it here, and the enum will be destroyed when the pvar
|
||||||
|
@ -117,7 +117,7 @@ void opal_btl_usnic_snprintf_ipv4_addr(char *out, size_t maxlen,
|
|||||||
|
|
||||||
void opal_btl_usnic_sprintf_mac(char *out, const uint8_t mac[6])
|
void opal_btl_usnic_sprintf_mac(char *out, const uint8_t mac[6])
|
||||||
{
|
{
|
||||||
snprintf(out, 32, "%02x:%02x:%02x:%02x:%02x:%02x",
|
snprintf(out, 32, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
mac[0],
|
mac[0],
|
||||||
mac[1],
|
mac[1],
|
||||||
mac[2],
|
mac[2],
|
||||||
@ -185,7 +185,7 @@ int opal_btl_usnic_find_ip(opal_btl_usnic_module_t *module, uint8_t mac[6])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Yes, it is! */
|
/* Yes, it is! */
|
||||||
if (OPAL_SUCCESS != opal_ifindextoname(i, module->if_name,
|
if (OPAL_SUCCESS != opal_ifindextoname(i, module->if_name,
|
||||||
sizeof(module->if_name)) ||
|
sizeof(module->if_name)) ||
|
||||||
OPAL_SUCCESS != opal_ifindextoaddr(i, &sa, sizeof(sa)) ||
|
OPAL_SUCCESS != opal_ifindextoaddr(i, &sa, sizeof(sa)) ||
|
||||||
OPAL_SUCCESS != opal_ifindextomask(i, &module->if_cidrmask,
|
OPAL_SUCCESS != opal_ifindextomask(i, &module->if_cidrmask,
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user