new bookkeeping code should return value indicating whether packet is good or not.
Authored-by: Reese Faucette <rfaucett@cisco.com> Should be included in usnic v1.7.3 roll-up CMR (refs trac:3760) This commit was SVN r29136. The following Trac tickets were found above: Ticket 3760 --> https://svn.open-mpi.org/trac/ompi/ticket/3760
Этот коммит содержится в:
родитель
122890c2fd
Коммит
0ef8336502
@ -988,7 +988,7 @@ static int usnic_component_progress_2(void)
|
|||||||
channel = &module->mod_channels[c];
|
channel = &module->mod_channels[c];
|
||||||
|
|
||||||
if (channel->chan_deferred_recv != NULL) {
|
if (channel->chan_deferred_recv != NULL) {
|
||||||
ompi_btl_usnic_recv_frag_bookkeeping(module,
|
(void) ompi_btl_usnic_recv_frag_bookkeeping(module,
|
||||||
channel->chan_deferred_recv, channel);
|
channel->chan_deferred_recv, channel);
|
||||||
channel->chan_deferred_recv = NULL;
|
channel->chan_deferred_recv = NULL;
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ void ompi_btl_usnic_recv_call(ompi_btl_usnic_module_t *module,
|
|||||||
ompi_btl_usnic_endpoint_t *endpoint;
|
ompi_btl_usnic_endpoint_t *endpoint;
|
||||||
ompi_btl_usnic_btl_chunk_header_t *chunk_hdr;
|
ompi_btl_usnic_btl_chunk_header_t *chunk_hdr;
|
||||||
uint32_t window_index;
|
uint32_t window_index;
|
||||||
|
int rc;
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
char src_mac[32];
|
char src_mac[32];
|
||||||
char dest_mac[32];
|
char dest_mac[32];
|
||||||
@ -104,7 +105,10 @@ void ompi_btl_usnic_recv_call(ompi_btl_usnic_module_t *module,
|
|||||||
if (OMPI_BTL_USNIC_PAYLOAD_TYPE_FRAG == bseg->us_btl_header->payload_type) {
|
if (OMPI_BTL_USNIC_PAYLOAD_TYPE_FRAG == bseg->us_btl_header->payload_type) {
|
||||||
|
|
||||||
/* do the receive bookkeeping */
|
/* do the receive bookkeeping */
|
||||||
ompi_btl_usnic_recv_frag_bookkeeping(module, seg, channel);
|
rc = ompi_btl_usnic_recv_frag_bookkeeping(module, seg, channel);
|
||||||
|
if (rc != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
opal_output(0, "<-- Received FRAG ep %p, seq %" UDSEQ ", len=%d\n",
|
opal_output(0, "<-- Received FRAG ep %p, seq %" UDSEQ ", len=%d\n",
|
||||||
@ -167,7 +171,8 @@ void ompi_btl_usnic_recv_call(ompi_btl_usnic_module_t *module,
|
|||||||
ompi_btl_usnic_rx_frag_info_t *fip;
|
ompi_btl_usnic_rx_frag_info_t *fip;
|
||||||
|
|
||||||
/* Is incoming sequence # ok? */
|
/* Is incoming sequence # ok? */
|
||||||
if (!ompi_btl_usnic_check_rx_seq(endpoint, seg, &window_index)) {
|
if (OPAL_UNLIKELY(ompi_btl_usnic_check_rx_seq(endpoint, seg,
|
||||||
|
&window_index) != 0)) {
|
||||||
goto repost;
|
goto repost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,13 +222,13 @@ ompi_btl_usnic_check_rx_seq(
|
|||||||
}
|
}
|
||||||
|
|
||||||
*window_index = i;
|
*window_index = i;
|
||||||
return true;
|
return 0;
|
||||||
|
|
||||||
dup_needs_ack:
|
dup_needs_ack:
|
||||||
if (!endpoint->endpoint_ack_needed) {
|
if (!endpoint->endpoint_ack_needed) {
|
||||||
ompi_btl_usnic_add_to_endpoints_needing_ack(endpoint);
|
ompi_btl_usnic_add_to_endpoints_needing_ack(endpoint);
|
||||||
}
|
}
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -299,7 +299,7 @@ drop:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
static inline void
|
static inline int
|
||||||
ompi_btl_usnic_recv_frag_bookkeeping(
|
ompi_btl_usnic_recv_frag_bookkeeping(
|
||||||
ompi_btl_usnic_module_t* module,
|
ompi_btl_usnic_module_t* module,
|
||||||
ompi_btl_usnic_recv_segment_t *seg,
|
ompi_btl_usnic_recv_segment_t *seg,
|
||||||
@ -307,6 +307,7 @@ ompi_btl_usnic_recv_frag_bookkeeping(
|
|||||||
{
|
{
|
||||||
ompi_btl_usnic_endpoint_t* endpoint;
|
ompi_btl_usnic_endpoint_t* endpoint;
|
||||||
uint32_t window_index;
|
uint32_t window_index;
|
||||||
|
int rc;
|
||||||
|
|
||||||
endpoint = seg->rs_endpoint;
|
endpoint = seg->rs_endpoint;
|
||||||
|
|
||||||
@ -318,7 +319,8 @@ ompi_btl_usnic_recv_frag_bookkeeping(
|
|||||||
++module->num_total_recvs;
|
++module->num_total_recvs;
|
||||||
|
|
||||||
/* Do late processing of incoming sequence # */
|
/* Do late processing of incoming sequence # */
|
||||||
if (!ompi_btl_usnic_check_rx_seq(endpoint, seg, &window_index)) {
|
rc = ompi_btl_usnic_check_rx_seq(endpoint, seg, &window_index);
|
||||||
|
if (OPAL_UNLIKELY(rc != 0)) {
|
||||||
goto repost;
|
goto repost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,11 +329,18 @@ ompi_btl_usnic_recv_frag_bookkeeping(
|
|||||||
ompi_btl_usnic_update_window(endpoint, window_index);
|
ompi_btl_usnic_update_window(endpoint, window_index);
|
||||||
|
|
||||||
repost:
|
repost:
|
||||||
|
/* if endpoint exiting, and all ACKs received, release the endpoint */
|
||||||
|
if (endpoint->endpoint_exiting && ENDPOINT_DRAINED(endpoint)) {
|
||||||
|
OBJ_RELEASE(endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
++module->num_recv_reposts;
|
++module->num_recv_reposts;
|
||||||
|
|
||||||
/* Add recv to linked list for reposting */
|
/* Add recv to linked list for reposting */
|
||||||
seg->rs_recv_desc.next = channel->repost_recv_head;
|
seg->rs_recv_desc.next = channel->repost_recv_head;
|
||||||
channel->repost_recv_head = &seg->rs_recv_desc;
|
channel->repost_recv_head = &seg->rs_recv_desc;
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -346,6 +355,7 @@ ompi_btl_usnic_recv(ompi_btl_usnic_module_t *module,
|
|||||||
ompi_btl_usnic_segment_t *bseg;
|
ompi_btl_usnic_segment_t *bseg;
|
||||||
mca_btl_active_message_callback_t* reg;
|
mca_btl_active_message_callback_t* reg;
|
||||||
ompi_btl_usnic_endpoint_t *endpoint;
|
ompi_btl_usnic_endpoint_t *endpoint;
|
||||||
|
int rc;
|
||||||
#if MSGDEBUG1
|
#if MSGDEBUG1
|
||||||
char src_mac[32];
|
char src_mac[32];
|
||||||
char dest_mac[32];
|
char dest_mac[32];
|
||||||
@ -363,7 +373,10 @@ ompi_btl_usnic_recv(ompi_btl_usnic_module_t *module,
|
|||||||
seg->rs_base.us_btl_header->put_addr == NULL) {
|
seg->rs_base.us_btl_header->put_addr == NULL) {
|
||||||
|
|
||||||
/* do the receive bookkeeping */
|
/* do the receive bookkeeping */
|
||||||
ompi_btl_usnic_recv_frag_bookkeeping(module, seg, channel);
|
rc = ompi_btl_usnic_recv_frag_bookkeeping(module, seg, channel);
|
||||||
|
if (rc != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Pass this segment up to the PML.
|
/* Pass this segment up to the PML.
|
||||||
* Be sure to get the payload length from the BTL header because
|
* Be sure to get the payload length from the BTL header because
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user