Skip to content

Commit 7787dad

Browse files
committed
usnic: ensure CQs are long enough
The libfabric usnic provider may give you back TX/RX queues that are longer than you asked for. So just use the TX/RQ/CQ lengths that we asked for, regardless of what length comes back. Additionally, keep the length of the priority channel CQ separate from the length of the data CQ. Signed-off-by: Jeff Squyres <[email protected]>
1 parent b02d8c4 commit 7787dad

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

opal/mca/btl/usnic/btl_usnic_module.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,10 +1693,6 @@ static int create_ep(opal_btl_usnic_module_t* module,
16931693
inet_ntoa(sin->sin_addr),
16941694
ntohs(sin->sin_port));
16951695

1696-
/* actual sizes */
1697-
channel->chan_rd_num = channel->info->rx_attr->size;
1698-
channel->chan_sd_num = channel->info->tx_attr->size;
1699-
17001696
return OPAL_SUCCESS;
17011697
}
17021698

@@ -1739,7 +1735,8 @@ static int init_one_channel(opal_btl_usnic_module_t *module,
17391735
int index,
17401736
int max_msg_size,
17411737
int rd_num,
1742-
int sd_num)
1738+
int sd_num,
1739+
int cq_num)
17431740
{
17441741
int i;
17451742
int rc;
@@ -1769,7 +1766,7 @@ static int init_one_channel(opal_btl_usnic_module_t *module,
17691766
memset(&cq_attr, 0, sizeof(cq_attr));
17701767
cq_attr.format = FI_CQ_FORMAT_CONTEXT;
17711768
cq_attr.wait_obj = FI_WAIT_NONE;
1772-
cq_attr.size = module->cq_num;
1769+
cq_attr.size = cq_num;
17731770
rc = fi_cq_open(module->domain, &cq_attr, &channel->cq, NULL);
17741771
if (0 != rc) {
17751772
opal_show_help("help-mpi-btl-usnic.txt",
@@ -1967,6 +1964,11 @@ static void init_find_transport_header_len(opal_btl_usnic_module_t *module)
19671964
*/
19681965
static void init_queue_lengths(opal_btl_usnic_module_t *module)
19691966
{
1967+
bool cq_is_sum = false;
1968+
if (-1 == mca_btl_usnic_component.cq_num) {
1969+
cq_is_sum = true;
1970+
}
1971+
19701972
if (-1 == mca_btl_usnic_component.sd_num) {
19711973
module->sd_num = module->fabric_info->tx_attr->size;
19721974
} else {
@@ -1977,7 +1979,7 @@ static void init_queue_lengths(opal_btl_usnic_module_t *module)
19771979
} else {
19781980
module->rd_num = mca_btl_usnic_component.rd_num;
19791981
}
1980-
if (-1 == mca_btl_usnic_component.cq_num) {
1982+
if (cq_is_sum) {
19811983
module->cq_num = module->rd_num + module->sd_num;
19821984
} else {
19831985
module->cq_num = mca_btl_usnic_component.cq_num;
@@ -2012,6 +2014,11 @@ static void init_queue_lengths(opal_btl_usnic_module_t *module)
20122014
module->fabric_info->rx_attr->size) {
20132015
module->prio_rd_num = module->fabric_info->rx_attr->size;
20142016
}
2017+
if (cq_is_sum) {
2018+
module->prio_cq_num = module->prio_rd_num + module->prio_sd_num;
2019+
} else {
2020+
module->prio_cq_num = module->cq_num;
2021+
}
20152022
}
20162023

20172024
static void init_payload_lengths(opal_btl_usnic_module_t *module)
@@ -2217,14 +2224,14 @@ static int init_channels(opal_btl_usnic_module_t *module)
22172224
rc = init_one_channel(module,
22182225
USNIC_PRIORITY_CHANNEL,
22192226
module->max_tiny_msg_size,
2220-
module->prio_rd_num, module->prio_sd_num);
2227+
module->prio_rd_num, module->prio_sd_num, module->prio_cq_num);
22212228
if (rc != OPAL_SUCCESS) {
22222229
goto destroy;
22232230
}
22242231
rc = init_one_channel(module,
22252232
USNIC_DATA_CHANNEL,
22262233
module->fabric_info->ep_attr->max_msg_size,
2227-
module->rd_num, module->sd_num);
2234+
module->rd_num, module->sd_num, module->cq_num);
22282235
if (rc != OPAL_SUCCESS) {
22292236
goto destroy;
22302237
}

opal/mca/btl/usnic/btl_usnic_module.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* All rights reserved.
1313
* Copyright (c) 2006 Sandia National Laboratories. All rights
1414
* reserved.
15-
* Copyright (c) 2011-2016 Cisco Systems, Inc. All rights reserved.
15+
* Copyright (c) 2011-2017 Cisco Systems, Inc. All rights reserved.
1616
* Copyright (c) 2015-2016 Los Alamos National Security, LLC. All rights
1717
* reserved.
1818
* $COPYRIGHT$
@@ -137,6 +137,7 @@ typedef struct opal_btl_usnic_module_t {
137137
int av_eq_num;
138138
int prio_sd_num;
139139
int prio_rd_num;
140+
int prio_cq_num;
140141

141142
/*
142143
* Fragments larger than max_frag_payload will be broken up into

0 commit comments

Comments
 (0)