From: ftillier Date: Tue, 3 Oct 2006 00:06:29 +0000 (+0000) Subject: [WSD] Debug support: X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=a23948993de767efb7805331c77a1625185aca34;p=~shefty%2Frdma-win.git [WSD] Debug support: - Add environment variables to control CM and QP retries and adjust packet lifetime. - Expand error debug output for WC failures to indicate more details. git-svn-id: svn://openib.tc.cornell.edu/gen1@511 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/wsd/user/ib_cm.c b/trunk/ulp/wsd/user/ib_cm.c index d620fa5d..3fe4f714 100644 --- a/trunk/ulp/wsd/user/ib_cm.c +++ b/trunk/ulp/wsd/user/ib_cm.c @@ -265,7 +265,7 @@ cm_rep_callback( default: /* The socket might be closing */ - IBSP_ERROR( ("socket %x not in connecting state (%s)\n", + IBSP_ERROR( ("socket %p not in connecting state (%s)\n", socket_info, IBSP_SOCKET_STATE_STR( socket_info->socket_state )) ); ib_reject( p_cm_rep_rec->h_cm_rep, IB_REJ_USER_DEFINED ); @@ -788,7 +788,7 @@ ib_connect( memset( &cm_req, 0, sizeof(cm_req) ); cm_req.svc_id = get_service_id_for_port( socket_info->peer_addr.sin_port ); - cm_req.max_cm_retries = CM_RETRIES; + cm_req.max_cm_retries = g_max_cm_retries; cm_req.p_primary_path = path_rec; cm_req.pfn_cm_rep_cb = cm_rep_callback; @@ -830,7 +830,7 @@ ib_connect( cm_req.rnr_nak_timeout = QP_ATTRIB_RNR_NAK_TIMEOUT; cm_req.rnr_retry_cnt = QP_ATTRIB_RNR_RETRY; - cm_req.retry_cnt = QP_ATTRIB_RETRY_COUNT; + cm_req.retry_cnt = g_qp_retries; cm_req.p_alt_path = NULL; cm_req.pfn_cm_mra_cb = cm_mra_callback; cm_req.pfn_cm_rej_cb = cm_rej_callback; diff --git a/trunk/ulp/wsd/user/ibsp_iblow.c b/trunk/ulp/wsd/user/ibsp_iblow.c index de059b94..3fa9454f 100644 --- a/trunk/ulp/wsd/user/ibsp_iblow.c +++ b/trunk/ulp/wsd/user/ibsp_iblow.c @@ -200,13 +200,24 @@ complete_wq( case IB_WCS_TIMEOUT_RETRY_ERR: case IB_WCS_REM_INVALID_REQ_ERR: default: - IBSP_ERROR( ("%s error: %s\n", - ib_get_wc_type_str( wc->wc_type ), - ib_get_wc_status_str( wc->status )) ); - lpOverlapped->OffsetHigh = WSAECONNABORTED; - wr->lpOverlapped->InternalHigh = 0; - socket_info->qp_error = WSAECONNABORTED; - break; + { + char comp_name[MAX_COMPUTERNAME_LENGTH + 1] = {0}; + DWORD len = sizeof(comp_name); + GetComputerName( comp_name, &len ); + IBSP_ERROR( ("%s (%s:%d to ", + comp_name, inet_ntoa( socket_info->local_addr.sin_addr ), + socket_info->local_addr.sin_port) ); + IBSP_ERROR( ("%s:%d) %s error: %s (vendor specific %i64x)\n", + inet_ntoa( socket_info->peer_addr.sin_addr ), + socket_info->peer_addr.sin_port, + ib_get_wc_type_str( wc->wc_type ), + ib_get_wc_status_str( wc->status ), + wc->vendor_specific) ); + lpOverlapped->OffsetHigh = WSAECONNABORTED; + wr->lpOverlapped->InternalHigh = 0; + socket_info->qp_error = WSAECONNABORTED; + break; + } } #ifdef PERFMON_ENABLED diff --git a/trunk/ulp/wsd/user/ibsp_ip.c b/trunk/ulp/wsd/user/ibsp_ip.c index 30bd29f9..8c14db44 100644 --- a/trunk/ulp/wsd/user/ibsp_ip.c +++ b/trunk/ulp/wsd/user/ibsp_ip.c @@ -426,6 +426,7 @@ query_pr( ib_query_handle_t query_handle; ib_query_req_t query_req; ib_api_status_t status; + uint8_t pkt_life; IBSP_ENTER( IBSP_DBG_HW ); @@ -475,6 +476,13 @@ query_pr( path_rec->mtu |= IB_MTU_1024; } + pkt_life = ib_path_rec_pkt_life( path_rec ) + g_pkt_life_modifier; + if( pkt_life > 0x1F ) + pkt_life = 0x1F; + + path_rec->pkt_life &= IB_PATH_REC_SELECTOR_MASK; + path_rec->pkt_life |= pkt_life; + IBSP_EXIT( IBSP_DBG_HW ); return 0; diff --git a/trunk/ulp/wsd/user/ibspdll.c b/trunk/ulp/wsd/user/ibspdll.c index 9e489735..5be27ad6 100644 --- a/trunk/ulp/wsd/user/ibspdll.c +++ b/trunk/ulp/wsd/user/ibspdll.c @@ -55,6 +55,9 @@ uint32_t g_max_poll = 500; uint32_t g_sa_timeout = 500; uint32_t g_sa_retries = 4; int g_connect_err = WSAEADDRNOTAVAIL; +uint8_t g_max_cm_retries = CM_RETRIES; +uint8_t g_pkt_life_modifier = 0; +uint8_t g_qp_retries = QP_ATTRIB_RETRY_COUNT; /* @@ -135,6 +138,32 @@ _DllMain( if( i ) g_connect_err = WSAEHOSTUNREACH; + i = GetEnvironmentVariable( "IBWSD_CM_RETRY", env_var, sizeof(env_var) ); + if( i && i <= 16 ) + { + g_max_cm_retries = (uint8_t)_tcstoul( env_var, NULL, 0 ); + if( g_max_cm_retries < 4 ) + g_max_cm_retries = 4; + else if( g_max_cm_retries > 0xF ) + g_max_cm_retries = 0xFF; + } + + i = GetEnvironmentVariable( "IBWSD_PKT_LIFE", env_var, sizeof(env_var) ); + if( i && i <= 16 ) + { + g_pkt_life_modifier = (uint8_t)_tcstoul( env_var, NULL, 0 ); + if( g_pkt_life_modifier > 0x1F ) + g_pkt_life_modifier = 0x1F; + } + + i = GetEnvironmentVariable( "IBWSD_QP_RETRY", env_var, sizeof(env_var) ); + if( i && i <= 16 ) + { + g_qp_retries = (uint8_t)_tcstoul( env_var, NULL, 0 ); + if( g_qp_retries > 7 ) + g_qp_retries = 7; + } + if( init_globals() ) return FALSE; @@ -764,7 +793,7 @@ IBSPConnect( if( socket_info->local_addr.sin_addr.S_un.S_addr == addr->sin_addr.S_un.S_addr ) { /* Loopback - let the regular stack take care of that. */ - IBSP_ERROR_EXIT( ("Loopback!\n") ); + IBSP_TRACE_EXIT( IBSP_DBG_CONN | IBSP_DBG_LEVEL1, ("Loopback!\n") ); *lpErrno = WSAEADDRNOTAVAIL; return SOCKET_ERROR; } @@ -785,7 +814,7 @@ IBSPConnect( if( dest_port_guid == socket_info->port->guid ) { - IBSP_ERROR_EXIT( ("Loopback!\n") ); + IBSP_TRACE_EXIT( IBSP_DBG_CONN | IBSP_DBG_LEVEL1, ("Loopback!\n") ); *lpErrno = WSAEADDRNOTAVAIL; return SOCKET_ERROR; } diff --git a/trunk/ulp/wsd/user/ibspdll.h b/trunk/ulp/wsd/user/ibspdll.h index ffb699fb..f76cb079 100644 --- a/trunk/ulp/wsd/user/ibspdll.h +++ b/trunk/ulp/wsd/user/ibspdll.h @@ -63,5 +63,8 @@ extern uint32_t g_sa_timeout; extern uint32_t g_sa_retries; /* Allow users to control SA timeouts behavior - fall back on IPoIB or fail. */ extern int g_connect_err; +extern uint8_t g_max_cm_retries; +extern uint8_t g_pkt_life_modifier; +extern uint8_t g_qp_retries; #endif /* IBSPDLL_H */