[ofw] [PATCH 11/15] uDAPL v2.0 scm: update socket cm provider to support new CM stat and error counters

Davis, Arlin R arlin.r.davis at intel.com
Mon Apr 23 13:01:07 PDT 2012


Signed-off-by: Arlin Davis <arlin.r.davis at intel.com>
---
 dapl/openib_scm/cm.c |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/dapl/openib_scm/cm.c b/dapl/openib_scm/cm.c
index cac6a72..b095c2f 100644
--- a/dapl/openib_scm/cm.c
+++ b/dapl/openib_scm/cm.c
@@ -487,6 +487,7 @@ DAT_RETURN dapli_socket_disconnect(dp_ib_cm_handle_t cm_ptr)
 						     NULL, 0, cm_ptr->ep);
 		}
 	}
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_DREQ_TX);
 	
 	/* release from workq */
 	dapli_cm_free(cm_ptr);
@@ -526,6 +527,7 @@ static void dapli_socket_connected(dp_ib_cm_handle_t cm_ptr, int err)
 			dapli_cm_free(cm_ptr);
 			return;
 		}
+		DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_ERR_TIMEOUT);
 		goto bail;
 	}
 
@@ -572,9 +574,13 @@ static void dapli_socket_connected(dp_ib_cm_handle_t cm_ptr, int err)
 		     htonll(*(uint64_t*)&cm_ptr->msg.saddr.ib.gid[0]),
 		     (unsigned long long)
 		     htonll(*(uint64_t*)&cm_ptr->msg.saddr.ib.gid[8]));
+
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_REQ_TX);
 	return;
 
 bail:
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_ERR);
+
 	/* mark CM object for cleanup */
 	dapli_cm_free(cm_ptr);
 	dapl_evd_connection_callback(NULL, IB_CME_DESTINATION_REJECT, NULL, 0, ep_ptr);
@@ -688,6 +694,8 @@ dapli_socket_connect(DAPL_EP * ep_ptr,
 	dapli_cm_queue(cm_ptr);
 	return DAT_SUCCESS;
 bail:
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_ERR);
+
 	dapl_log(DAPL_DBG_TYPE_ERR,
 		 " connect ERROR: -> %s r_qual %d\n",
 		 inet_ntoa(((struct sockaddr_in *)r_addr)->sin_addr),
@@ -737,6 +745,7 @@ static void dapli_socket_connect_rtu(dp_ib_cm_handle_t cm_ptr)
 		}
 		goto bail;
 	}
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_REP_RX);
 
 	/* keep the QP, address info in network order */
 	
@@ -870,6 +879,8 @@ static void dapli_socket_connect_rtu(dp_ib_cm_handle_t cm_ptr)
 	/* post the event with private data */
 	event = IB_CME_CONNECTED;
 	dapl_dbg_log(DAPL_DBG_TYPE_EP, " ACTIVE: connected!\n");
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_RTU_TX);
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_ACTIVE_EST);
 
 #ifdef DAT_EXTENSIONS
 ud_bail:
@@ -900,6 +911,9 @@ ud_bail:
 					cm_ptr->ah, 
 					ntohs(cm_ptr->msg.saddr.ib.lid),
 					ntohl(cm_ptr->msg.saddr.ib.qpn));
+
+				DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)),
+					    DCNT_IA_CM_AH_RESOLVED);
 	
 			} else 
 				event = DAT_IB_UD_CONNECTION_ERROR_EVENT;
@@ -1014,6 +1028,8 @@ dapli_socket_listen(DAPL_IA * ia_ptr, DAT_CONN_QUAL serviceID, DAPL_SP * sp_ptr)
 		     " setup listen: port %d cr %p s_fd %d\n",
 		     serviceID + 1000, cm_ptr, cm_ptr->socket);
 
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_LISTEN);
+
 	return dat_status;
 bail:
 	/* Never queued, destroy here */
@@ -1128,6 +1144,8 @@ static void dapli_socket_accept_data(ib_cm_srvc_handle_t acm_ptr)
 	acm_ptr->state = DCM_ACCEPTING_DATA;
 	dapl_os_unlock(&acm_ptr->lock);
 
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&acm_ptr->hca->ia_list_head)), DCNT_IA_CM_REQ_RX);
+
 	dapl_dbg_log(DAPL_DBG_TYPE_CM,
 		     " ACCEPT: DST %s %x lid=0x%x, qpn=0x%x, psz=%d\n",
 		     inet_ntoa(((struct sockaddr_in *)
@@ -1151,6 +1169,9 @@ static void dapli_socket_accept_data(ib_cm_srvc_handle_t acm_ptr)
 					    (DAT_COUNT) exp,
 					    (DAT_PVOID *) acm_ptr->msg.p_data,
 					    (DAT_PVOID *) &xevent);
+
+		DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&acm_ptr->hca->ia_list_head)),
+			    DCNT_IA_CM_AH_REQ_RX);
 	} else
 #endif
 		/* trigger CR event and return SUCCESS */
@@ -1318,6 +1339,8 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr,
 
 	dapl_dbg_log(DAPL_DBG_TYPE_EP, " PASSIVE: accepted!\n");
 
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_REP_TX);
+
 	return DAT_SUCCESS;
 bail:
 	/* schedule cleanup from workq */
@@ -1345,6 +1368,8 @@ static void dapli_socket_accept_rtu(dp_ib_cm_handle_t cm_ptr)
 		goto bail;
 	}
 
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_RTU_RX);
+
 	/* save state and reference to EP, queue for disc event */
 	dapl_os_lock(&cm_ptr->lock);
 	cm_ptr->state = DCM_CONNECTED;
@@ -1395,6 +1420,8 @@ ud_bail:
 				(DAT_PVOID *) cm_ptr->msg.p_data,
 				(DAT_PVOID *) &xevent);
 
+		DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_AH_RESOLVED);
+
                 /* cleanup and release from local list, still on EP list */
 		dapli_cm_free(cm_ptr);
                 
@@ -1683,6 +1710,10 @@ dapls_ib_reject_connection(IN dp_ib_cm_handle_t cm_ptr,
 		writev(cm_ptr->socket, iov, 1);
 	}
 
+	DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)),
+			  reason == IB_CM_REJ_REASON_CONSUMER_REJ ?
+			  DCNT_IA_CM_USER_REJ_TX : DCNT_IA_CM_ERR_REJ_TX);
+
 	/* release and cleanup CM object */
 	dapli_cm_free(cm_ptr);
 	return DAT_SUCCESS;
@@ -1837,6 +1868,8 @@ void cr_thread(void *arg)
 						break;
 					case DCM_CONNECTED:
 						dapl_os_unlock(&cr->lock);
+						DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cr->hca->ia_list_head)),
+							    DCNT_IA_CM_DREQ_RX);
 						dapli_socket_disconnect(cr);
 						break;
 					case DCM_DISCONNECTED:
@@ -1958,3 +1991,4 @@ void dapls_print_cm_list(IN DAPL_IA *ia_ptr)
 	dapl_os_unlock(&ia_ptr->hca_ptr->ib_trans.lock);
 }
 #endif
+
-- 
1.7.3






More information about the ofw mailing list