Signed-off-by: Arlin Davis <arlin.r.da...@intel.com> --- dapl/openib_ucm/cm.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/dapl/openib_ucm/cm.c b/dapl/openib_ucm/cm.c index 6b5867a..357dbf7 100644 --- a/dapl/openib_ucm/cm.c +++ b/dapl/openib_ucm/cm.c @@ -173,6 +173,7 @@ static void ucm_check_timers(dp_ib_cm_handle_t cm, int *timer) (time - cm->timer)/1000, cm->hca->ib_trans.rep_time << cm->retries); cm->retries++; + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_REQ_RETRY); dapl_os_unlock(&cm->lock); dapli_cm_connect(cm->ep, cm); return; @@ -195,6 +196,7 @@ static void ucm_check_timers(dp_ib_cm_handle_t cm, int *timer) (time - cm->timer)/1000, cm->hca->ib_trans.rtu_time << cm->retries); cm->retries++; + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_REP_RETRY); dapl_os_unlock(&cm->lock); ucm_reply(cm); return; @@ -217,6 +219,7 @@ static void ucm_check_timers(dp_ib_cm_handle_t cm, int *timer) (time - cm->timer)/1000, cm->hca->ib_trans.rtu_time << cm->retries); cm->retries++; + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_DREQ_RETRY); dapl_os_unlock(&cm->lock); dapli_cm_disconnect(cm); return; @@ -273,6 +276,8 @@ retry: polled++; goto retry; } + DAPL_CNTR_DATA(((DAPL_IA *)dapl_llist_peek_head(&tp->hca->ia_list_head)), DCNT_IA_CM_ERR_REQ_FULLQ, polled > 1 ? 1:0); + DAPL_CNTR_DATA(((DAPL_IA *)dapl_llist_peek_head(&tp->hca->ia_list_head)), DCNT_IA_CM_REQ_FULLQ_POLL, polled - 1); return msg; } @@ -322,6 +327,7 @@ static int ucm_reject(ib_hca_transport_t *tp, ib_cm_msg_t *msg) ntohs(smsg.daddr.ib.lid), ntohl(smsg.dqpn), ntohs(smsg.dport)); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&tp->hca->ia_list_head)), DCNT_IA_CM_ERR_REJ_TX); return (ucm_send(tp, &smsg, NULL, 0)); } @@ -366,7 +372,9 @@ static void ucm_process_recv(ib_hca_transport_t *tp, ntohl(cm->msg.d_id)); cm->msg.op = htons(DCM_RTU); - ucm_send(&cm->hca->ib_trans, &cm->msg, NULL, 0); + ucm_send(&cm->hca->ib_trans, &cm->msg, NULL, 0); + + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_RTU_RETRY); } dapl_os_unlock(&cm->lock); break; @@ -393,6 +401,8 @@ static void ucm_process_recv(ib_hca_transport_t *tp, cm->msg.op = htons(DCM_DREP); ucm_send(&cm->hca->ib_trans, &cm->msg, NULL, 0); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_DREP_RETRY); + } else if (ntohs(msg->op) != DCM_DREP){ /* DREP ok to ignore, any other print warning */ dapl_log(DAPL_DBG_TYPE_WARN, @@ -401,6 +411,7 @@ static void ucm_process_recv(ib_hca_transport_t *tp, cm, dapl_cm_op_str(ntohs(msg->op)), dapl_cm_state_str(cm->state), ntohs(msg->sport), ntohl(msg->sqpn)); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_UNEXPECTED); } dapl_os_unlock(&cm->lock); break; @@ -478,6 +489,8 @@ retry_listenq: ntohs(cm->msg.saddr.ib.lid), ntohs(cm->msg.sport), ntohl(cm->msg.sqpn), ntohl(cm->msg.saddr.ib.qpn)); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_REQ_DUP); + return NULL; } } @@ -517,6 +530,10 @@ retry_listenq: ntohs(msg->sport), ntohl(msg->sqpn), ntohl(msg->saddr.ib.qpn), ntohl(msg->s_id), ntohl(msg->d_id)); + + if (ntohs(msg->op) == DCM_DREP) { + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_DREP_DUP); + } } return found; @@ -878,6 +895,7 @@ DAT_RETURN dapli_cm_disconnect(dp_ib_cm_handle_t cm) cm->msg.op = htons(DCM_DREQ); finalize = 0; /* wait for DREP, wakeup timer after DREQ sent */ wakeup = 1; + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_DREQ_TX); break; case DCM_DISC_PENDING: /* DREQ timeout, resend until retries exhausted */ @@ -894,6 +912,7 @@ DAT_RETURN dapli_cm_disconnect(dp_ib_cm_handle_t cm) htons(cm->msg.dport)); finalize = 1; } + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_DREQ_RETRY); break; case DCM_DISC_RECV: /* CM_THREAD: move to err state to flush, if not UD */ @@ -902,6 +921,7 @@ DAT_RETURN dapli_cm_disconnect(dp_ib_cm_handle_t cm) /* DREQ received, send DREP and schedule event, finalize */ cm->msg.op = htons(DCM_DREP); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_DREP_TX); break; case DCM_DISCONNECTED: dapl_os_unlock(&cm->lock); @@ -999,10 +1019,13 @@ dapli_cm_connect(DAPL_EP *ep, dp_ib_cm_handle_t cm) goto bail; } dapl_os_unlock(&cm->lock); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), + ep->qp_handle->qp_type == IBV_QPT_UD ? DCNT_IA_CM_AH_REQ_TX : DCNT_IA_CM_REQ_TX); return DAT_SUCCESS; bail: + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR); dapl_log(DAPL_DBG_TYPE_WARN, " connect: snd ERR -> cm_lid %x cm_qpn %x r_psp %x p_sz=%d\n", htons(cm->msg.daddr.ib.lid), @@ -1080,7 +1103,7 @@ static void ucm_connect_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg) ntohs(msg->daddr.ib.lid), ntohl(msg->daddr.ib.qpn), ntohs(msg->dport), ntohs(msg->saddr.ib.lid), ntohl(msg->saddr.ib.qpn), ntohs(msg->sport)); - + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR_REJ_RX); event = IB_CME_DESTINATION_REJECT; } if (event != IB_CME_CONNECTED) { @@ -1152,6 +1175,7 @@ static void ucm_connect_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg) goto bail; } dapl_os_unlock(&cm->lock); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_RTU_TX); /* init cm_handle and post the event with private data */ dapl_dbg_log(DAPL_DBG_TYPE_EP, " ACTIVE: connected!\n"); @@ -1221,9 +1245,13 @@ ud_bail: if (event != DAT_IB_UD_CONNECTION_EVENT_ESTABLISHED) dapli_cm_free(cm); + + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_AH_RESOLVED); + } else #endif { + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ACTIVE_EST); dapl_evd_connection_callback(cm, IB_CME_CONNECTED, cm->msg.p_data, ntohs(cm->msg.p_size), cm->ep); @@ -1305,6 +1333,7 @@ static void ucm_accept(ib_cm_srvc_handle_t cm, ib_cm_msg_t *msg) (DAT_COUNT)ntohs(acm->msg.p_size), (DAT_PVOID *)acm->msg.p_data, (DAT_PVOID *)&xevent); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_AH_REQ_TX); } else #endif /* trigger CR event and return SUCCESS */ @@ -1315,6 +1344,7 @@ static void ucm_accept(ib_cm_srvc_handle_t cm, ib_cm_msg_t *msg) bail: /* schedule work thread cleanup */ + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR); dapli_cm_free(acm); return; } @@ -1394,9 +1424,12 @@ static void ucm_accept_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg) (DAT_COUNT)ntohs(cm->msg.p_size), (DAT_PVOID *)cm->msg.p_data, (DAT_PVOID *)&xevent); + + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_AH_RESOLVED); dapli_cm_free(cm); /* still attached to EP */ } else { #endif + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_PASSIVE_EST); dapls_cr_callback(cm, IB_CME_CONNECTED, NULL, 0, cm->sp); } dapl_log(DAPL_DBG_TYPE_CM_EST, @@ -1407,6 +1440,7 @@ static void ucm_accept_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg) ntohl(cm->msg.dqpn)); return; bail: + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), DCNT_IA_CM_ERR); dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE, NULL, 0, cm->sp); dapli_cm_free(cm); } @@ -1617,10 +1651,12 @@ dapli_accept_usr(DAPL_EP *ep, DAPL_CR *cr, DAT_COUNT p_size, DAT_PVOID p_data) } dapl_os_unlock(&cm->lock); + DAPL_CNTR(ia, DCNT_IA_CM_REP_TX); dapl_dbg_log(DAPL_DBG_TYPE_CM, " PASSIVE: accepted!\n"); dapls_thread_signal(&cm->hca->ib_trans.signal); return DAT_SUCCESS; bail: + DAPL_CNTR(ia, DCNT_IA_CM_ERR); dapli_cm_free(cm); return DAT_INTERNAL_ERROR; } @@ -1829,6 +1865,7 @@ dapls_ib_setup_conn_listener(IN DAPL_IA *ia, /* queue up listen socket to process inbound CR's */ cm->state = DCM_LISTEN; dapli_queue_listen(cm); + DAPL_CNTR(ia, DCNT_IA_CM_LISTEN); return DAT_SUCCESS; } @@ -1966,6 +2003,10 @@ dapls_ib_reject_connection(IN dp_ib_cm_handle_t cm, else cm->msg.op = htons(DCM_REJ_CM); + DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm->hca->ia_list_head)), + reason == IB_CM_REJ_REASON_CONSUMER_REJ ? + DCNT_IA_CM_USER_REJ_TX : DCNT_IA_CM_ERR_REJ_TX); + if (ucm_send(&cm->hca->ib_trans, &cm->msg, pdata, psize)) { dapl_log(DAPL_DBG_TYPE_WARN, " cm_reject: send ERR: %s\n", strerror(errno)); -- 1.7.3 _______________________________________________ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg