Fixes trac:1302: ensure to also use the LID for identifing an incoming
IBCM request (not just the port number). This commit was SVN r18475. The following Trac tickets were found above: Ticket 1302 --> https://svn.open-mpi.org/trac/ompi/ticket/1302
Этот коммит содержится в:
родитель
21b940887a
Коммит
27978b29f8
@ -283,7 +283,9 @@ typedef struct {
|
|||||||
uint64_t mm_port_guid;
|
uint64_t mm_port_guid;
|
||||||
/** The service ID that we're listening on */
|
/** The service ID that we're listening on */
|
||||||
uint32_t mm_service_id;
|
uint32_t mm_service_id;
|
||||||
/************** JMS is this duplicate info? **************/
|
/** The LID that we're sitting on; it also identifies the source
|
||||||
|
endpoint when an IB CM request arrives */
|
||||||
|
uint16_t mm_lid;
|
||||||
/** The port number of this port, also used to locate the source
|
/** The port number of this port, also used to locate the source
|
||||||
endpoint when an IB CM request arrives */
|
endpoint when an IB CM request arrives */
|
||||||
uint8_t mm_port_num;
|
uint8_t mm_port_num;
|
||||||
@ -724,6 +726,7 @@ static int ibcm_component_query(mca_btl_openib_module_t *btl,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
msg->mm_port_guid = ntoh64(gid.global.interface_id);
|
msg->mm_port_guid = ntoh64(gid.global.interface_id);
|
||||||
|
msg->mm_lid = btl->lid;
|
||||||
msg->mm_port_num = btl->port_num;
|
msg->mm_port_num = btl->port_num;
|
||||||
msg->mm_service_id = ibcm_pid;
|
msg->mm_service_id = ibcm_pid;
|
||||||
m->cpc.data.cbm_modex_message_len = sizeof(*msg);
|
m->cpc.data.cbm_modex_message_len = sizeof(*msg);
|
||||||
@ -1094,7 +1097,9 @@ static int ibcm_module_start_connect(ompi_btl_openib_connect_base_module_t *cpc,
|
|||||||
struct ibv_sa_path_rec path_rec;
|
struct ibv_sa_path_rec path_rec;
|
||||||
bool do_initiate;
|
bool do_initiate;
|
||||||
|
|
||||||
OPAL_OUTPUT((-1,"ibcm start connect on endpoint %p", (void*)endpoint));
|
OPAL_OUTPUT((-1,"ibcm start connect, endpoint %p (lid %d, ep index %d)",
|
||||||
|
(void*)endpoint, endpoint->endpoint_btl->port_info.lid,
|
||||||
|
endpoint->index));
|
||||||
|
|
||||||
/* Has an incoming request already initiated the connect sequence
|
/* Has an incoming request already initiated the connect sequence
|
||||||
on this endpoint? If so, just exit successfully -- the
|
on this endpoint? If so, just exit successfully -- the
|
||||||
@ -1103,6 +1108,7 @@ static int ibcm_module_start_connect(ompi_btl_openib_connect_base_module_t *cpc,
|
|||||||
opal_mutex_lock(&ie->ie_lock);
|
opal_mutex_lock(&ie->ie_lock);
|
||||||
if (0 != ie->ie_connection_flags) {
|
if (0 != ie->ie_connection_flags) {
|
||||||
opal_mutex_unlock(&ie->ie_lock);
|
opal_mutex_unlock(&ie->ie_lock);
|
||||||
|
OPAL_OUTPUT((-1,"ibcm start connect already ongoing %p", (void*)endpoint));
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
ie->ie_connection_flags = CFLAGS_ONGOING;
|
ie->ie_connection_flags = CFLAGS_ONGOING;
|
||||||
@ -1626,10 +1632,14 @@ static int request_received(ibcm_listen_cm_id_t *cmh,
|
|||||||
OPAL_OUTPUT((-1, "ibcm req: my guid 0x%lx, remote guid 0x%lx",
|
OPAL_OUTPUT((-1, "ibcm req: my guid 0x%lx, remote guid 0x%lx",
|
||||||
msg->mm_port_guid,
|
msg->mm_port_guid,
|
||||||
ntoh64(req->primary_path->dgid.global.interface_id)));
|
ntoh64(req->primary_path->dgid.global.interface_id)));
|
||||||
|
OPAL_OUTPUT((-1, "ibcm req: my LID %d, remote LID %d",
|
||||||
|
msg->mm_lid,
|
||||||
|
ntohs(req->primary_path->dlid)));
|
||||||
if (msg->mm_port_guid ==
|
if (msg->mm_port_guid ==
|
||||||
ntoh64(req->primary_path->dgid.global.interface_id) &&
|
ntoh64(req->primary_path->dgid.global.interface_id) &&
|
||||||
msg->mm_service_id == active_private_data->ireqd_pid &&
|
msg->mm_service_id == active_private_data->ireqd_pid &&
|
||||||
msg->mm_port_num == req->port) {
|
msg->mm_port_num == req->port &&
|
||||||
|
msg->mm_lid == htons(req->primary_path->dlid)) {
|
||||||
OPAL_OUTPUT((-1, "*** found matching endpoint!!!"));
|
OPAL_OUTPUT((-1, "*** found matching endpoint!!!"));
|
||||||
endpoint = ib_proc->proc_endpoints[i];
|
endpoint = ib_proc->proc_endpoints[i];
|
||||||
found = true;
|
found = true;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user