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

Reply via email to