Add pkey value MCA parameter. if this param is used,
only ports with the actual pkey value will be initiate. This commit was SVN r14463.
Этот коммит содержится в:
родитель
fc91aa6f31
Коммит
cf3f41288b
@ -108,6 +108,7 @@ struct mca_btl_openib_component_t {
|
|||||||
uint32_t ib_cq_size; /**< Max outstanding CQE on the CQ */
|
uint32_t ib_cq_size; /**< Max outstanding CQE on the CQ */
|
||||||
uint32_t ib_sg_list_size; /**< Max scatter/gather descriptor entries on the WQ*/
|
uint32_t ib_sg_list_size; /**< Max scatter/gather descriptor entries on the WQ*/
|
||||||
uint32_t ib_pkey_ix;
|
uint32_t ib_pkey_ix;
|
||||||
|
uint32_t ib_pkey_val;
|
||||||
uint32_t ib_psn;
|
uint32_t ib_psn;
|
||||||
uint32_t ib_qp_ous_rd_atom;
|
uint32_t ib_qp_ous_rd_atom;
|
||||||
uint32_t ib_mtu;
|
uint32_t ib_mtu;
|
||||||
@ -197,6 +198,7 @@ struct mca_btl_openib_module_t {
|
|||||||
mca_btl_openib_port_info_t port_info; /* contains only the subnet id right now */
|
mca_btl_openib_port_info_t port_info; /* contains only the subnet id right now */
|
||||||
mca_btl_openib_hca_t *hca;
|
mca_btl_openib_hca_t *hca;
|
||||||
uint8_t port_num; /**< ID of the PORT */
|
uint8_t port_num; /**< ID of the PORT */
|
||||||
|
uint16_t pkey_index;
|
||||||
struct ibv_cq *ib_cq[2];
|
struct ibv_cq *ib_cq[2];
|
||||||
struct ibv_port_attr ib_port_attr;
|
struct ibv_port_attr ib_port_attr;
|
||||||
uint16_t lid; /**< lid that is actually used (for LMC) */
|
uint16_t lid; /**< lid that is actually used (for LMC) */
|
||||||
|
@ -66,7 +66,8 @@ static void btl_openib_control(struct mca_btl_base_module_t* btl,
|
|||||||
mca_btl_base_descriptor_t* descriptor,
|
mca_btl_base_descriptor_t* descriptor,
|
||||||
void* cbdata);
|
void* cbdata);
|
||||||
static int init_one_port(opal_list_t *btl_list, mca_btl_openib_hca_t *hca,
|
static int init_one_port(opal_list_t *btl_list, mca_btl_openib_hca_t *hca,
|
||||||
uint8_t port_num, struct ibv_port_attr *ib_port_attr);
|
uint8_t port_num, uint16_t pkey_index,
|
||||||
|
struct ibv_port_attr *ib_port_attr);
|
||||||
static int init_one_hca(opal_list_t *btl_list, struct ibv_device* ib_dev);
|
static int init_one_hca(opal_list_t *btl_list, struct ibv_device* ib_dev);
|
||||||
static mca_btl_base_module_t **btl_openib_component_init(
|
static mca_btl_base_module_t **btl_openib_component_init(
|
||||||
int *num_btl_modules, bool enable_progress_threads,
|
int *num_btl_modules, bool enable_progress_threads,
|
||||||
@ -297,7 +298,8 @@ static int openib_dereg_mr(void *reg_data, mca_mpool_base_registration_t *reg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int init_one_port(opal_list_t *btl_list, mca_btl_openib_hca_t *hca,
|
static int init_one_port(opal_list_t *btl_list, mca_btl_openib_hca_t *hca,
|
||||||
uint8_t port_num, struct ibv_port_attr *ib_port_attr)
|
uint8_t port_num, uint16_t pkey_index,
|
||||||
|
struct ibv_port_attr *ib_port_attr)
|
||||||
{
|
{
|
||||||
uint16_t lid, i, lmc;
|
uint16_t lid, i, lmc;
|
||||||
mca_btl_openib_module_t *openib_btl;
|
mca_btl_openib_module_t *openib_btl;
|
||||||
@ -339,6 +341,7 @@ static int init_one_port(opal_list_t *btl_list, mca_btl_openib_hca_t *hca,
|
|||||||
ib_selected->btl_module = (mca_btl_base_module_t*) openib_btl;
|
ib_selected->btl_module = (mca_btl_base_module_t*) openib_btl;
|
||||||
openib_btl->hca = hca;
|
openib_btl->hca = hca;
|
||||||
openib_btl->port_num = (uint8_t) port_num;
|
openib_btl->port_num = (uint8_t) port_num;
|
||||||
|
openib_btl->pkey_index = pkey_index;
|
||||||
openib_btl->lid = lid;
|
openib_btl->lid = lid;
|
||||||
openib_btl->src_path_bits = lid - ib_port_attr->lid;
|
openib_btl->src_path_bits = lid - ib_port_attr->lid;
|
||||||
/* store the subnet for multi-nic support */
|
/* store the subnet for multi-nic support */
|
||||||
@ -546,8 +549,22 @@ static int init_one_hca(opal_list_t *btl_list, struct ibv_device* ib_dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(IBV_PORT_ACTIVE == ib_port_attr.state){
|
if(IBV_PORT_ACTIVE == ib_port_attr.state){
|
||||||
ret = init_one_port(btl_list, hca, i, &ib_port_attr);
|
|
||||||
|
|
||||||
|
if (0 == mca_btl_openib_component.ib_pkey_val) {
|
||||||
|
ret = init_one_port(btl_list, hca, i, mca_btl_openib_component.ib_pkey_ix,
|
||||||
|
&ib_port_attr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uint16_t pkey,j;
|
||||||
|
for (j=0; j < hca->ib_dev_attr.max_pkeys; j++) {
|
||||||
|
ibv_query_pkey(hca->ib_dev_context, i, j, &pkey);
|
||||||
|
pkey=ntohs(pkey);
|
||||||
|
if(pkey == mca_btl_openib_component.ib_pkey_val){
|
||||||
|
ret = init_one_port(btl_list, hca, i, j, &ib_port_attr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (OMPI_SUCCESS != ret) {
|
if (OMPI_SUCCESS != ret) {
|
||||||
/* Out of bounds error indicates that we hit max btl number
|
/* Out of bounds error indicates that we hit max btl number
|
||||||
* don't propagate the error to the caller */
|
* don't propagate the error to the caller */
|
||||||
|
@ -969,10 +969,10 @@ int mca_btl_openib_endpoint_create_qp(
|
|||||||
|
|
||||||
{
|
{
|
||||||
qp_attr->qp_state = IBV_QPS_INIT;
|
qp_attr->qp_state = IBV_QPS_INIT;
|
||||||
qp_attr->pkey_index = mca_btl_openib_component.ib_pkey_ix;
|
qp_attr->pkey_index = openib_btl->pkey_index; /*mca_btl_openib_component.ib_pkey_ix; */
|
||||||
qp_attr->port_num = openib_btl->port_num;
|
qp_attr->port_num = openib_btl->port_num;
|
||||||
qp_attr->qp_access_flags = IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ;
|
qp_attr->qp_access_flags = IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ;
|
||||||
|
|
||||||
if(ibv_modify_qp((*qp), qp_attr,
|
if(ibv_modify_qp((*qp), qp_attr,
|
||||||
IBV_QP_STATE |
|
IBV_QP_STATE |
|
||||||
IBV_QP_PKEY_INDEX |
|
IBV_QP_PKEY_INDEX |
|
||||||
|
@ -194,6 +194,14 @@ int btl_openib_register_mca_params(void)
|
|||||||
0, &ival, REGINT_GE_ZERO));
|
0, &ival, REGINT_GE_ZERO));
|
||||||
mca_btl_openib_component.ib_pkey_ix = (uint32_t) ival;
|
mca_btl_openib_component.ib_pkey_ix = (uint32_t) ival;
|
||||||
|
|
||||||
|
CHECK(reg_int("ib_pkey_val", "InfiniBand pkey value"
|
||||||
|
"(must be > 0 and < 0xffff)",
|
||||||
|
0, &ival, REGINT_GE_ZERO));
|
||||||
|
if (ival > 0xffff) {
|
||||||
|
ret = OMPI_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
|
mca_btl_openib_component.ib_pkey_val = (uint32_t) ival;
|
||||||
|
|
||||||
CHECK(reg_int("ib_psn", "InfiniBand packet sequence starting number "
|
CHECK(reg_int("ib_psn", "InfiniBand packet sequence starting number "
|
||||||
"(must be >= 0)",
|
"(must be >= 0)",
|
||||||
0, &ival, REGINT_GE_ZERO));
|
0, &ival, REGINT_GE_ZERO));
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user