From: Stan Smith Date: Tue, 3 Aug 2010 20:53:56 +0000 (+0000) Subject: [IPOIB_NDIS6_CM] white-space (tabstop=4 & line length(85)) alignments, spelling corre... X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=d0093cd1b1a59cbfba521df8e6861b475c43eca0;p=~shefty%2Frdma-win.git [IPOIB_NDIS6_CM] white-space (tabstop=4 & line length(85)) alignments, spelling corrections; no functionality changes. git-svn-id: svn://openib.tc.cornell.edu/gen1@2868 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.cpp b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.cpp index 76973969..01a6898b 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.cpp +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.cpp @@ -166,7 +166,7 @@ ipoib_create_adapter( p_adapter->guids.port_num) ); cl_status = cl_obj_init( &p_adapter->obj, CL_DESTROY_SYNC, - __adapter_destroying, NULL, __adapter_free ); + __adapter_destroying, NULL, __adapter_free ); if( cl_status != CL_SUCCESS ) { __adapter_free( &p_adapter->obj ); @@ -209,7 +209,7 @@ ipoib_create_adapter( mac[3], mac[4], mac[5]) ); } else - { + { ETH_COPY_NETWORK_ADDRESS( p_adapter->params.conf_mac.addr, mac ); } } @@ -265,8 +265,7 @@ ipoib_destroy_adapter( * between destruction and AL callbacks (PnP, Query, Destruction). * The lock provides protection */ - KeWaitForMutexObject( - &p_adapter->mutex, Executive, KernelMode, FALSE, NULL ); + KeWaitForMutexObject( &p_adapter->mutex, Executive, KernelMode, FALSE, NULL ); cl_obj_lock( &p_adapter->obj ); p_adapter->state = IB_PNP_PORT_REMOVE; @@ -364,15 +363,18 @@ adapter_init( } /* Validate the port GUID and generate the MAC address. */ - status = - ipoib_mac_from_guid( p_adapter->guids.port_guid.guid, p_adapter->params.guid_mask, &p_adapter->mac); + status = ipoib_mac_from_guid( p_adapter->guids.port_guid.guid, + p_adapter->params.guid_mask, + &p_adapter->mac); if( status != IB_SUCCESS ) { if( status == IB_INVALID_GUID_MASK ) { IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_ERROR, ("Invalid GUID mask received, rejecting it") ); - ipoib_create_log(p_adapter->h_adapter, GUID_MASK_LOG_INDEX, EVENT_IPOIB_WRONG_PARAMETER_WRN); + ipoib_create_log( p_adapter->h_adapter, + GUID_MASK_LOG_INDEX, + EVENT_IPOIB_WRONG_PARAMETER_WRN ); } IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -391,7 +393,6 @@ adapter_init( return status; } - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, ("Shutter Init, state = %d\n", p_adapter->ipoib_state) ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_RECV, @@ -444,8 +445,8 @@ __ipoib_pnp_reg( */ cl_obj_ref( &p_adapter->obj ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("[%p] Adapter refcount raised to %d\n", p_adapter, p_adapter->obj.ref_cnt)); - + ("[%p] Adapter refcount raised to %d\n", + p_adapter, p_adapter->obj.ref_cnt)); IPOIB_EXIT( IPOIB_DBG_INIT ); return status; @@ -471,10 +472,11 @@ __adapter_destroying( if( p_adapter->h_pnp ) { IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("Adapter[%p] has refcnt= %d\n", p_adapter, p_adapter->obj.ref_cnt)); + ("Adapter[%p] has refcnt= %d\n", p_adapter, p_adapter->obj.ref_cnt)); p_adapter->p_ifc->dereg_pnp( p_adapter->h_pnp, (ib_pfn_destroy_cb_t) cl_obj_deref ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("Adapter[%p] refcnt decremented to %d\n", p_adapter, p_adapter->obj.ref_cnt)); + ("Adapter[%p] refcnt decremented to %d\n", + p_adapter, p_adapter->obj.ref_cnt)); p_adapter->h_pnp = NULL; } @@ -1207,9 +1209,11 @@ ipoib_set_active( /* Join all programmed multicast groups. */ for( i = 0; i < p_adapter->mcast_array_size; i++ ) { - IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST,("Calling join mcast from ipoib_set_active\n")); - ipoib_port_join_mcast( - p_adapter->p_port, p_adapter->mcast_array[i] ,IB_MC_REC_STATE_FULL_MEMBER); + IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("Calling join mcast from ipoib_set_active\n")); + ipoib_port_join_mcast( p_adapter->p_port, + p_adapter->mcast_array[i], + IB_MC_REC_STATE_FULL_MEMBER ); } /* Register all existing addresses. */ @@ -1221,7 +1225,8 @@ ipoib_set_active( * Now that we're in the broadcast group, notify that * we have a link. */ - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, ("Link UP!\n") ); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + ("Link UP! in the broadcast group\n") ); NdisWriteErrorLogEntry( p_adapter->h_adapter, EVENT_IPOIB_PORT_UP + (p_adapter->port_rate/ONE_X_IN_100BPS), 1, p_adapter->port_rate ); @@ -1241,7 +1246,8 @@ ipoib_set_active( NDIS_STATUS_LINK_STATE, (PVOID)&link_state, sizeof(link_state)); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, ("***************Indicate connect!\n") ); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + ("***************Indicate connect!\n") ); NdisMIndicateStatusEx(p_adapter->h_adapter,&status_indication); } } @@ -1324,6 +1330,7 @@ ipoib_get_gen_stat( OUT pending_oid_t* const p_oid_info) { PNDIS_STATISTICS_INFO StatisticsInfo; + IPOIB_ENTER( IPOIB_DBG_STAT ); if (p_oid_info->buf_len < sizeof(StatisticsInfo)) @@ -1336,63 +1343,64 @@ ipoib_get_gen_stat( StatisticsInfo->Header.Revision = NDIS_OBJECT_REVISION_1; StatisticsInfo->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; StatisticsInfo->Header.Size = sizeof(NDIS_STATISTICS_INFO); - /*StatisticsInfo->SupportedStatistics = NDIS_STATISTICS_FLAGS_VALID_RCV_DISCARDS | - NDIS_STATISTICS_FLAGS_VALID_RCV_ERROR | - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_RCV | - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_RCV | - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_RCV | - NDIS_STATISTICS_FLAGS_VALID_BYTES_RCV | - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_RCV | - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_RCV | - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_RCV | - - NDIS_STATISTICS_FLAGS_VALID_XMIT_DISCARDS | - NDIS_STATISTICS_FLAGS_VALID_XMIT_ERROR | - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_XMIT | - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_XMIT | - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_XMIT | - NDIS_STATISTICS_FLAGS_VALID_BYTES_XMIT | - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_XMIT | - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_XMIT | - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_XMIT; */ + /*StatisticsInfo->SupportedStatistics = + NDIS_STATISTICS_FLAGS_VALID_RCV_DISCARDS | + NDIS_STATISTICS_FLAGS_VALID_RCV_ERROR | + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_RCV | + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_RCV | + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_RCV | + NDIS_STATISTICS_FLAGS_VALID_BYTES_RCV | + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_RCV | + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_RCV | + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_RCV | + NDIS_STATISTICS_FLAGS_VALID_XMIT_DISCARDS | + NDIS_STATISTICS_FLAGS_VALID_XMIT_ERROR | + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_XMIT | + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_XMIT | + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_XMIT | + NDIS_STATISTICS_FLAGS_VALID_BYTES_XMIT | + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_XMIT | + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_XMIT | + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_XMIT; */ - StatisticsInfo->SupportedStatistics = NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_RCV | - //The data in the ifHCInUcastPkts member is valid. - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_RCV | - //The data in the ifHCInMulticastPkts member is valid. - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_RCV | - //The data in the ifHCInBroadcastPkts member is valid. - NDIS_STATISTICS_FLAGS_VALID_BYTES_RCV | - //The data in the ifHCInOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_RCV_DISCARDS | - //The data in the ifInDiscards member is valid. - NDIS_STATISTICS_FLAGS_VALID_RCV_ERROR | - //The data in the ifInErrors member is valid. - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_XMIT | - //The data in the ifHCOutUcastPkts member is valid. - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_XMIT | - //The data in the ifHCOutMulticastPkts member is valid. - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_XMIT | - //The data in the ifHCOutBroadcastPkts member is valid. - NDIS_STATISTICS_FLAGS_VALID_BYTES_XMIT | - //The data in the ifHCOutOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_XMIT_ERROR | - //The data in the ifOutErrors member is valid. - NDIS_STATISTICS_FLAGS_VALID_XMIT_DISCARDS | - //The data in the ifOutDiscards member is valid. - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_RCV | - //The data in the ifHCInUcastOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_RCV | - //The data in the ifHCInMulticastOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_RCV | - //The data in the ifHCInBroadcastOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_XMIT | - //The data in the ifHCOutUcastOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_XMIT | - //The data in the ifHCOutMulticastOctets member is valid. - NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_XMIT ; - //The data in the ifHCOutBroadcastOctets member is valid + StatisticsInfo->SupportedStatistics = + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_RCV | + //The data in the ifHCInUcastPkts member is valid. + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_RCV | + //The data in the ifHCInMulticastPkts member is valid. + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_RCV | + //The data in the ifHCInBroadcastPkts member is valid. + NDIS_STATISTICS_FLAGS_VALID_BYTES_RCV | + //The data in the ifHCInOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_RCV_DISCARDS | + //The data in the ifInDiscards member is valid. + NDIS_STATISTICS_FLAGS_VALID_RCV_ERROR | + //The data in the ifInErrors member is valid. + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_XMIT | + //The data in the ifHCOutUcastPkts member is valid. + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_XMIT | + //The data in the ifHCOutMulticastPkts member is valid. + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_XMIT | + //The data in the ifHCOutBroadcastPkts member is valid. + NDIS_STATISTICS_FLAGS_VALID_BYTES_XMIT | + //The data in the ifHCOutOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_XMIT_ERROR | + //The data in the ifOutErrors member is valid. + NDIS_STATISTICS_FLAGS_VALID_XMIT_DISCARDS | + //The data in the ifOutDiscards member is valid. + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_RCV | + //The data in the ifHCInUcastOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_RCV | + //The data in the ifHCInMulticastOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_RCV | + //The data in the ifHCInBroadcastOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_XMIT | + //The data in the ifHCOutUcastOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_XMIT | + //The data in the ifHCOutMulticastOctets member is valid. + NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_XMIT ; + //The data in the ifHCOutBroadcastOctets member is valid cl_spinlock_acquire( &p_adapter->recv_stat_lock ); StatisticsInfo->ifInDiscards = p_adapter->recv_stats.comp.dropped + @@ -1425,7 +1433,7 @@ ipoib_get_gen_stat( *p_oid_info->p_bytes_used = sizeof(NDIS_STATISTICS_INFO); - IPOIB_EXIT( IPOIB_DBG_INIT ); + IPOIB_EXIT( IPOIB_DBG_STAT ); return NDIS_STATUS_SUCCESS; } diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h index de28d977..12027d63 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h @@ -151,21 +151,21 @@ typedef struct _ipoib_params * (i.e. 2 indicates 1/2, 4 indicates 1/4, etc.) * * payload_mtu - The maximum available size of IPoIB transfer unit. - - If using UD mode: +* The maximum available size of IPoIB transfer unit. +* +* If using UD mode: * It should be decremented by size of IPoIB header (==4B) * For example, if the HCA support 4K MTU, * upper threshold for payload mtu is 4092B and not 4096B - - If using CM mode: - MTU will be not limited by 4K threshold. - UD QP still may be used for different protocols (like ARP). - For these situations the threshold for the UD QP will take the default value - +* +* If using CM mode: +* MTU will be not limited by 4K threshold. +* UD QP still may be used for different protocols (like ARP). +* For these situations the threshold for the UD QP will take the default +* value * * lso -* It indicates if there's a support for hardware large/giant send offload +* (TRUE) Indicates support for hardware large/giant send offload * *********/ diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp index 2d8f6844..850b2d43 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp @@ -223,8 +223,7 @@ IPOIB_REG_ENTRY HCARegTable[] = { {NDIS_STRING_CONST("BCJoinRetry"), 1, IPOIB_OFFSET(bc_join_retry), IPOIB_SIZE(bc_join_retry), 50, 0, 1000}, {NDIS_STRING_CONST("CmEnabled"), 0, IPOIB_OFFSET(cm_enabled), IPOIB_SIZE(cm_enabled), FALSE, FALSE, TRUE}, {NDIS_STRING_CONST("CmPayloadMtu"), 1, IPOIB_OFFSET(cm_payload_mtu), IPOIB_SIZE(cm_payload_mtu), MAX_CM_PAYLOAD_MTU, 512, MAX_CM_PAYLOAD_MTU} - -}; +}; #define IPOIB_NUM_REG_PARAMS (sizeof (HCARegTable) / sizeof(IPOIB_REG_ENTRY)) @@ -642,25 +641,33 @@ ipoib_get_adapter_params( p_param->ParameterData.IntegerData > pRegEntry[i].Max) { value = pRegEntry[i].Default; - ipoib_create_log(p_adapter->h_adapter, i, EVENT_IPOIB_WRONG_PARAMETER_WRN); - IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_INIT, ("Read configuration.Registry %S value is out of range, setting default value= 0x%x\n", pRegEntry[i].RegName.Buffer, value)); - + ipoib_create_log(p_adapter->h_adapter, i, + EVENT_IPOIB_WRONG_PARAMETER_WRN); + IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_INIT, + ("Read configuration.Registry %S value is out of range, " + "setting default value= 0x%x\n", + pRegEntry[i].RegName.Buffer, value)); } else { value = p_param->ParameterData.IntegerData; - IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_INIT, ("Read configuration. Registry %S, Value= 0x%x\n", pRegEntry[i].RegName.Buffer, value)); + IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_INIT, + ("Read configuration. Registry %S, Value= 0x%x\n", + pRegEntry[i].RegName.Buffer, value)); } } - else { value = pRegEntry[i].Default; status = NDIS_STATUS_SUCCESS; if (pRegEntry[i].bRequired) { - ipoib_create_log(p_adapter->h_adapter, i, EVENT_IPOIB_WRONG_PARAMETER_ERR); - IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_INIT, ("Read configuration.Registry %S value not found, setting default value= 0x%x\n", pRegEntry[i].RegName.Buffer, value)); + ipoib_create_log(p_adapter->h_adapter, i, + EVENT_IPOIB_WRONG_PARAMETER_ERR); + IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_INIT, + ("Read configuration.Registry %S value not found, setting " + "default value= 0x%x\n", + pRegEntry[i].RegName.Buffer, value)); } else { @@ -686,7 +693,8 @@ ipoib_get_adapter_params( break; default: - IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("Bogus field size %d\n", pRegEntry[i].FieldSize)); + IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + ("Bogus field size %d\n", pRegEntry[i].FieldSize)); break; } } @@ -696,11 +704,14 @@ ipoib_get_adapter_params( if (p_adapter->params.sq_depth % sq_depth_step) { static const c_sq_ind = 2; - p_adapter->params.sq_depth = sq_depth_step *( - p_adapter->params.sq_depth / sq_depth_step + !!( (p_adapter->params.sq_depth % sq_depth_step) > (sq_depth_step/2) )); - ipoib_create_log(p_adapter->h_adapter, c_sq_ind, EVENT_IPOIB_WRONG_PARAMETER_WRN); - IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_INIT, ("SQ DEPTH value was rounded to the closest acceptable value of 0x%x\n", p_adapter->params.sq_depth )); - + p_adapter->params.sq_depth = sq_depth_step * + (p_adapter->params.sq_depth / sq_depth_step + + !!((p_adapter->params.sq_depth % sq_depth_step) > (sq_depth_step/2))); + ipoib_create_log(p_adapter->h_adapter, c_sq_ind, + EVENT_IPOIB_WRONG_PARAMETER_WRN); + IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_INIT, + ("SQ DEPTH value was rounded to the closest acceptable value " + "of 0x%x\n", p_adapter->params.sq_depth )); } // Adjusting the low watermark parameter @@ -1541,12 +1552,15 @@ SetOffloadParameters( if (len != NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2) { ASSERT(FALSE); - IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, ("Buffer is too small. offloading task requirs %d but the buffer size is: %d \n", NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2, len)); + IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, + ("Buffer is too small. offloading task requirs %d but the buffer " + "size is: %d \n", NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2, len)); Status = NDIS_STATUS_INVALID_LENGTH; goto Exit; } - IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_OID, ("received set for OID_TCP_TASK_OFFLOAD\n")); + IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_OID, + ("received set for OID_TCP_TASK_OFFLOAD\n")); pOffloadParam = (PNDIS_OFFLOAD_PARAMETERS) pBuf; pOffloadHeader = &(pOffloadParam->Header); @@ -1556,7 +1570,8 @@ SetOffloadParameters( (pOffloadHeader->Size != NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2)) { ASSERT(FALSE); - IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, ("Set offloading task Illegal header\n")); + IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, + ("Set offloading task Illegal header\n")); Status = NDIS_STATUS_INVALID_DATA; goto Exit; } @@ -1784,17 +1799,18 @@ InitNdisScatterGatherDma( status = NdisMRegisterScatterGatherDma( h_adapter, &DmaDescription, - &p_adapter->NdisMiniportDmaHandle); + &p_adapter->NdisMiniportDmaHandle ); if( status != NDIS_STATUS_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("NdisMRegisterScatterGatherDma returned 0x%.8x.\n", status) ); + ("NdisMRegisterScatterGatherDma returned 0x%.8x.\n", status) ); return status; } - //NDIS sets this value before it returns from NdisMRegisterScatterGatherDma. - //Miniport drivers should use this size to preallocate memory for each scatter/gather list. + //NDIS sets this value before it returns from NdisMRegisterScatterGatherDma. + //Miniport drivers should use this size to preallocate memory for each + // scatter/gather list. p_adapter->sg_list_size = DmaDescription.ScatterGatherListSize ; return status; @@ -1984,7 +2000,8 @@ ipoib_check_for_hang( ++(p_adapter->p_port->n_no_progress); if (p_adapter->p_port->n_no_progress >= 4) { - IPOIB_PRINT( TRACE_LEVEL_ERROR,IPOIB_DBG_ERROR, ("port got stuck, reseting it !!!\n")); + IPOIB_PRINT( TRACE_LEVEL_ERROR,IPOIB_DBG_ERROR, + ("port got stuck, reseting it !!!\n")); //CL_ASSERT(FALSE); //????? p_adapter->hung = TRUE; } @@ -2190,11 +2207,14 @@ ipoib_query_info( case OID_GEN_TRANSMIT_BUFFER_SPACE: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_TRANSMIT_BUFFER_SPACE\n", port_num) ); + ("Port %d received query for OID_GEN_TRANSMIT_BUFFER_SPACE\n", + port_num) ); if( p_adapter->params.cm_enabled ) - info = p_adapter->params.sq_depth * p_adapter->params.cm_xfer_block_size; + info = p_adapter->params.sq_depth + * p_adapter->params.cm_xfer_block_size; else - info = p_adapter->params.sq_depth * p_adapter->params.xfer_block_size; + info = p_adapter->params.sq_depth + * p_adapter->params.xfer_block_size; break; case OID_GEN_RECEIVE_BUFFER_SPACE: @@ -2202,9 +2222,11 @@ ipoib_query_info( ("Port %d received query for OID_GEN_TRANSMIT_BUFFER_SPACE " "or OID_GEN_RECEIVE_BUFFER_SPACE\n", port_num) ); if( p_adapter->params.cm_enabled ) - info = p_adapter->params.rq_depth * p_adapter->params.cm_xfer_block_size; + info = p_adapter->params.rq_depth + * p_adapter->params.cm_xfer_block_size; else - info = p_adapter->params.rq_depth * p_adapter->params.xfer_block_size; + info = p_adapter->params.rq_depth + * p_adapter->params.xfer_block_size; break; case OID_GEN_MAXIMUM_LOOKAHEAD: @@ -2212,16 +2234,17 @@ ipoib_query_info( case OID_GEN_TRANSMIT_BLOCK_SIZE: case OID_GEN_RECEIVE_BLOCK_SIZE: case OID_GEN_MAXIMUM_TOTAL_SIZE: - IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_MAXIMUM_LOOKAHEAD " - "or OID_GEN_CURRENT_LOOKAHEAD or " - "OID_GEN_TRANSMIT_BLOCK_SIZE or " - "OID_GEN_RECEIVE_BLOCK_SIZE or " - "OID_GEN_MAXIMUM_TOTAL_SIZE\n", port_num) ); if( p_adapter->params.cm_enabled ) info = p_adapter->params.cm_xfer_block_size; else info = p_adapter->params.xfer_block_size; + + IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, + ("Port %d received query for 1 of OID_GEN_MAXIMUM_LOOKAHEAD, " + "_CURRENT_LOOKAHEAD, " + "_TRANSMIT_BLOCK_SIZE, " + "_RECEIVE_BLOCK_SIZE, " + "_GEN_MAXIMUM_TOTAL_SIZE = %d\n", port_num, info) ); break; case OID_GEN_VENDOR_ID: @@ -2233,14 +2256,16 @@ ipoib_query_info( case OID_GEN_VENDOR_DESCRIPTION: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_VENDOR_DESCRIPTION\n", port_num) ); + ("Port %d received query for OID_GEN_VENDOR_DESCRIPTION\n", + port_num) ); src_buf = VENDOR_DESCRIPTION; buf_len = sizeof(VENDOR_DESCRIPTION); break; case OID_GEN_VENDOR_DRIVER_VERSION: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_VENDOR_DRIVER_VERSION\n", port_num) ); + ("Port %d received query for OID_GEN_VENDOR_DRIVER_VERSION\n", + port_num) ); src_buf = &version; buf_len = sizeof(version); //TODO: Figure out what the right version is. @@ -2249,19 +2274,22 @@ ipoib_query_info( case OID_GEN_PHYSICAL_MEDIUM: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_PHYSICAL_MEDIUM\n", port_num) ); + ("Port %d received query for OID_GEN_PHYSICAL_MEDIUM\n", + port_num) ); info = NdisPhysicalMediumUnspecified; break; case OID_GEN_CURRENT_PACKET_FILTER: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_CURRENT_PACKET_FILTER\n", port_num) ); + ("Port %d received query for OID_GEN_CURRENT_PACKET_FILTER\n", + port_num) ); info = p_adapter->packet_filter; break; case OID_GEN_DRIVER_VERSION: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_DRIVER_VERSION\n", port_num) ); + ("Port %d received query for OID_GEN_DRIVER_VERSION\n", + port_num) ); src_buf = &version; buf_len = sizeof(version); version = MAJOR_NDIS_VERSION << 8 | MINOR_NDIS_VERSION; @@ -2283,7 +2311,8 @@ ipoib_query_info( case OID_GEN_MEDIA_CONNECT_STATUS: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_MEDIA_CONNECT_STATUS\n", port_num) ); + ("Port %d received query for OID_GEN_MEDIA_CONNECT_STATUS\n", + port_num) ); cl_obj_lock( &p_adapter->obj ); switch( p_adapter->state ) { @@ -2324,7 +2353,8 @@ ipoib_query_info( case OID_GEN_MAXIMUM_SEND_PACKETS: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_MAXIMUM_SEND_PACKETS\n", port_num) ); + ("Port %d received query for OID_GEN_MAXIMUM_SEND_PACKETS\n", + port_num) ); info = MINIPORT_MAX_SEND_PACKETS; break; @@ -2465,14 +2495,14 @@ ipoib_query_info( IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, ("Port %d received query for OID_802_3_PERMANENT_ADDRESS\n", port_num) ); src_buf = &p_adapter->mac; - buf_len = sizeof(p_adapter->mac); + buf_len = sizeof(p_adapter->mac); break; case OID_802_3_CURRENT_ADDRESS: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, ("Port %d received query for OID_802_3_CURRENT_ADDRESS\n", port_num) ); src_buf = &p_adapter->params.conf_mac; - buf_len = sizeof(p_adapter->params.conf_mac); + buf_len = sizeof(p_adapter->params.conf_mac); break; case OID_802_3_MULTICAST_LIST: @@ -2517,10 +2547,14 @@ ipoib_query_info( break; case OID_GEN_INTERRUPT_MODERATION: InterruptModerationParam.Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - InterruptModerationParam.Header.Revision = NDIS_INTERRUPT_MODERATION_PARAMETERS_REVISION_1; - InterruptModerationParam.Header.Size = NDIS_SIZEOF_INTERRUPT_MODERATION_PARAMETERS_REVISION_1; - InterruptModerationParam.Flags = NDIS_INTERRUPT_MODERATION_CHANGE_NEEDS_RESET ; - InterruptModerationParam.InterruptModeration = NdisInterruptModerationNotSupported ; + InterruptModerationParam.Header.Revision = + NDIS_INTERRUPT_MODERATION_PARAMETERS_REVISION_1; + InterruptModerationParam.Header.Size = + NDIS_SIZEOF_INTERRUPT_MODERATION_PARAMETERS_REVISION_1; + InterruptModerationParam.Flags = + NDIS_INTERRUPT_MODERATION_CHANGE_NEEDS_RESET; + InterruptModerationParam.InterruptModeration = + NdisInterruptModerationNotSupported; buf_len = sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS); src_buf = (PVOID) &InterruptModerationParam; break; @@ -2546,7 +2580,8 @@ ipoib_query_info( case OID_PNP_CAPABILITIES: status = NDIS_STATUS_NOT_SUPPORTED; IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received an unsupported oid of 0x%.8X!\n", port_num, oid_info.oid) ); + ("Port %d received an unsupported Optional oid of 0x%.8X!\n", + port_num, oid_info.oid) ); break; case OID_GEN_PROTOCOL_OPTIONS: @@ -2554,7 +2589,10 @@ ipoib_query_info( case OID_GEN_TRANSPORT_HEADER_OFFSET: case OID_PNP_ENABLE_WAKE_UP: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_GEN_PROTOCOL_OPTIONS or OID_GEN_NETWORK_LAYER_ADDRESSES or OID_GEN_TRANSPORT_HEADER_OFFSET OID_PNP_ENABLE_WAKE_UPn", port_num) ); + ("Port %d received query for OID_GEN_PROTOCOL_OPTIONS or " + "OID_GEN_NETWORK_LAYER_ADDRESSES or " + "OID_GEN_TRANSPORT_HEADER_OFFSET OID_PNP_ENABLE_WAKE_UP\n", + port_num) ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, ("Number of OID: 0x%.8X!\n", oid_info.oid) ); status = NDIS_STATUS_SUCCESS; @@ -2569,7 +2607,8 @@ ipoib_query_info( case OID_TCP_OFFLOAD_CURRENT_CONFIG: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for OID_PNP_QUERY_POWER\n", port_num) ); + ("Port %d received query for OID_TCP_OFFLOAD_CURRENT_CONFIG\n", + port_num) ); //ulBytesAvailable = ulInfoLen = sizeof(NDIS_OFFLOAD); if (oid_info.buf_len < sizeof(NDIS_OFFLOAD)) { @@ -2581,16 +2620,26 @@ ipoib_query_info( OffloadConfig( p_adapter, &offload); src_buf = &offload; break; + case OID_IP6_OFFLOAD_STATS: case OID_IP4_OFFLOAD_STATS: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, - ("Port %d received query for UNSUPPORTED OID_IP[4,6]_OFFLOAD_STATS\n", port_num) ); + ("Port %d received query for UNSUPPORTED " + "OID_IP[4,6]_OFFLOAD_STATS\n", port_num) ); + status = NDIS_STATUS_NOT_SUPPORTED; + break; + + case OID_GEN_MACHINE_NAME: + IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, + ("Port %d received query OID_GEN_MACHINE_NAME\n", port_num) ); status = NDIS_STATUS_NOT_SUPPORTED; break; + default: status = NDIS_STATUS_INVALID_OID; IPOIB_PRINT( TRACE_LEVEL_ERROR,IPOIB_DBG_ERROR, - ("Port %d received an invalid oid of 0x%.8X!\n", port_num, oid_info.oid) ); + ("Port %d received an invalid oid of 0x%.8X!\n", + port_num, oid_info.oid) ); break; } @@ -2602,8 +2651,11 @@ ipoib_query_info( */ if( status != NDIS_STATUS_PENDING ) { - return ipoib_complete_query( - p_adapter, &oid_info, status, src_buf, buf_len ); + return ipoib_complete_query( p_adapter, + &oid_info, + status, + src_buf, + buf_len ); } IPOIB_EXIT( IPOIB_DBG_OID ); @@ -2666,8 +2718,6 @@ ipoib_complete_query( p_adapter->pending_query = FALSE; IPOIB_EXIT( IPOIB_DBG_OID ); return oid_status; - - } static @@ -2930,8 +2980,9 @@ ipoib_set_info( } else { - ipoib_refresh_mcast( p_adapter, (mac_addr_t*)info_buf, - (uint8_t)(info_buf_len / sizeof(mac_addr_t)) ); + ipoib_refresh_mcast( p_adapter, + (mac_addr_t*)info_buf, + (uint8_t)(info_buf_len / sizeof(mac_addr_t)) ); buf_len = info_buf_len; /* @@ -3065,23 +3116,23 @@ ipoib_oid_handler( return status; } -//! Transfers some number of packets, specified as an array of packet pointers, -// over the network. -/* For a deserialized driver, these packets are completed asynchronously -using NdisMSendComplete. -IRQL <= DISPATCH_LEVEL +/* Transfers some number of packets, specified as an array of packet pointers, + * over the network. + * For a deserialized driver, these packets are completed asynchronously + * using NdisMSendComplete. + * IRQL <= DISPATCH_LEVEL -@param adapter_context Pointer to ipoib_adapter_t structure with per NIC state -@param packet_array Array of packets to send -@param numPackets Number of packets in the array + @param adapter_context - Pointer to ipoib_adapter_t structure with per NIC state + @param net_buffer_list - Array of packets to send + @param port_num - miniport number. + @param send_flags - NDIS send flags. */ void ipoib_send_net_buffer_list( IN NDIS_HANDLE adapter_context, IN PNET_BUFFER_LIST net_buffer_list, IN NDIS_PORT_NUMBER port_num, - IN ULONG send_flags - ) + IN ULONG send_flags ) { ipoib_adapter_t *p_adapter; ipoib_port_t *p_port; @@ -3142,9 +3193,12 @@ ipoib_send_net_buffer_list( NET_BUFFER_LIST_NEXT_NBL(curr_net_buffer_list) = NULL; cl_perf_start( PortSend ); - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, - ("Sending NBL=%p, g_NBL=%d, g_NBL_completed=%d \n", curr_net_buffer_list, g_NBL, g_NBL_complete) ); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_BUF, + ("Sending NBL=%p, g_NBL=%d, g_NBL_completed=%d \n", + curr_net_buffer_list, g_NBL, g_NBL_complete) ); + ipoib_port_send( p_port, curr_net_buffer_list, send_flags); + cl_perf_stop( &p_adapter->perf, PortSend ); } ipoib_port_deref( p_port, ref_send_packets ); @@ -3158,7 +3212,8 @@ compl_status: { IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Got bad status, g_NBL=%d, g_NBL_completed=%d \n", g_NBL, g_NBL_complete) ); + ("Got bad status, g_NBL=%d, g_NBL_completed=%d \n", + g_NBL, g_NBL_complete) ); send_complete_flags = 0; for (curr_net_buffer_list = net_buffer_list; @@ -3176,16 +3231,17 @@ compl_status: if (NDIS_TEST_SEND_AT_DISPATCH_LEVEL(send_flags)) { ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); - NDIS_SET_SEND_COMPLETE_FLAG(send_complete_flags, NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL); + NDIS_SET_SEND_COMPLETE_FLAG(send_complete_flags, + NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL); } - NdisMSendNetBufferListsCompleteX( - p_adapter, - net_buffer_list, - send_complete_flags); + NdisMSendNetBufferListsCompleteX( p_adapter, + net_buffer_list, + send_complete_flags); } IPOIB_EXIT( IPOIB_DBG_SEND ); } + void ipoib_pnp_notify( IN NDIS_HANDLE adapter_context, @@ -3757,7 +3813,8 @@ ipoib_reg_addrs( /* Take a reference for each service request. */ cl_obj_ref(&p_adapter->obj); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("[%p] Adapter refcount raised to %d\n", p_adapter, p_adapter->obj.ref_cnt)); + ("[%p] Adapter refcount raised to %d\n", + p_adapter, p_adapter->obj.ref_cnt)); ib_status = p_adapter->p_ifc->reg_svc( p_adapter->h_al, &ib_service, &p_addr_item->p_reg->h_reg_svc ); if( ib_status != IB_SUCCESS ) @@ -3779,8 +3836,8 @@ ipoib_reg_addrs( { /* Fatal error. */ IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Port %d OID_GEN_NETWORK_LAYER_ADDRESSES - Failed to register IP Address " - "of %d.%d.%d.%d with error %s\n", + ("Port %d OID_GEN_NETWORK_LAYER_ADDRESSES - Failed to " + "register IP Address of %d.%d.%d.%d with error %s\n", port_num, p_addr_item->address.as_bytes[0], p_addr_item->address.as_bytes[1], @@ -3902,7 +3959,8 @@ __ipoib_ats_reg_cb( cl_obj_unlock( &p_reg->p_adapter->obj ); cl_obj_deref(&p_reg->p_adapter->obj); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("Adapter[%p] refcnt decremented to %d\n", p_reg->p_adapter, p_reg->p_adapter->obj.ref_cnt)); + ("Adapter[%p] refcnt decremented to %d\n", + p_reg->p_adapter, p_reg->p_adapter->obj.ref_cnt)); IPOIB_EXIT( IPOIB_DBG_OID ); } diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp index 5fc7d098..be747727 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp @@ -166,12 +166,15 @@ ipoib_endpt_create( cl_obj_construct( &p_endpt->obj, IPOIB_OBJ_ENDPOINT ); - status = cl_obj_init( &p_endpt->obj, CL_DESTROY_ASYNC, - __endpt_destroying, __endpt_cleanup, __endpt_free ); + status = cl_obj_init( &p_endpt->obj, + CL_DESTROY_ASYNC, + __endpt_destroying, + __endpt_cleanup, + __endpt_free ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, - ("Created endpoint: [ %p ] DLID: %#x QPN: %#x \n", - p_endpt, cl_ntoh16(dlid), cl_ntoh32(qpn) ) ); + ("Created EndPoint %p DLID: %#x QPN: %#x \n", + p_endpt, cl_ntoh16(dlid), cl_ntoh32(qpn) ) ); p_endpt->dgid = *p_dgid; p_endpt->dlid = dlid; @@ -212,7 +215,8 @@ __create_mcast_av( ib_grh_set_ver_class_flow( 6, p_member_rec->tclass, flow_lbl ); av_attr.static_rate = p_member_rec->rate & IB_PATH_REC_BASE_MASK; av_attr.path_bits = 0; - /* port is not attached to endpoint at this point, so use endpt ifc reference */ + /* port is not attached to endpoint at this point, so use endpt ifc + reference */ status = p_endpt->p_ifc->create_av( h_pd, &av_attr, ph_av ); if( status != IB_SUCCESS ) @@ -276,8 +280,8 @@ __endpt_destroying( cl_obj_lock( p_obj ); if( p_endpt->h_query ) { - p_port->p_adapter->p_ifc->cancel_query( - p_port->p_adapter->h_al, p_endpt->h_query ); + p_port->p_adapter->p_ifc->cancel_query( p_port->p_adapter->h_al, + p_endpt->h_query ); p_endpt->h_query = NULL; } @@ -287,7 +291,8 @@ __endpt_destroying( IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, ("Leaving MCast group\n") ); ipoib_port_ref(p_port, ref_leave_mcast); - p_port->p_adapter->p_ifc->leave_mcast( p_endpt->h_mcast, ipoib_leave_mcast_cb ); + p_port->p_adapter->p_ifc->leave_mcast( p_endpt->h_mcast, + ipoib_leave_mcast_cb ); } #if 0 else if( p_port->p_adapter->params.cm_enabled ) @@ -383,26 +388,26 @@ ipoib_endpt_queue( * can receive packets, and NDIS can try to respond. We need to delay * a response until the MC callback runs and sets the AV. */ - IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_MCAST ,("Got the race between the mcast callback and a receive/send\n")); - IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_SEND ,("Got the race between the mcast callback and a receive/send\n")); + IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_MCAST , + ("Got the race between the mcast callback and a receive/send\n")); + IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_SEND , + ("Got the race between the mcast callback and a receive/send\n")); ipoib_endpt_deref( p_endpt ); IPOIB_EXIT( IPOIB_DBG_ENDPT ); return NDIS_STATUS_PENDING; } - /* This is the first packet for this endpoint. Create the AV. */ + /* This is the first packet for this endpoint. Create the AV. */ p_port = __endpt_parent( p_endpt ); cl_memclr( &av_attr, sizeof(ib_av_attr_t) ); av_attr.port_num = p_port->port_num; - ib_member_get_sl_flow_hop( - p_port->ib_mgr.bcast_rec.sl_flow_hop, - &av_attr.sl, - &flow_lbl, - &av_attr.grh.hop_limit - ); + ib_member_get_sl_flow_hop( p_port->ib_mgr.bcast_rec.sl_flow_hop, + &av_attr.sl, + &flow_lbl, + &av_attr.grh.hop_limit ); av_attr.dlid = p_endpt->dlid; @@ -419,15 +424,17 @@ ipoib_endpt_queue( 6, p_port->ib_mgr.bcast_rec.tclass, flow_lbl ); av_attr.grh.resv1 = 0; av_attr.grh.resv2 = 0; - ib_gid_set_default( &av_attr.grh.src_gid, p_port->p_adapter->guids.port_guid.guid ); + ib_gid_set_default( &av_attr.grh.src_gid, + p_port->p_adapter->guids.port_guid.guid ); av_attr.grh.dest_gid = p_endpt->dgid; av_attr.static_rate = p_port->ib_mgr.bcast_rec.rate; av_attr.path_bits = 0; /* Create the AV. */ - status = p_port->p_adapter->p_ifc->create_av( - p_port->ib_mgr.h_pd, &av_attr, &p_endpt->h_av ); + status = p_port->p_adapter->p_ifc->create_av( p_port->ib_mgr.h_pd, + &av_attr, + &p_endpt->h_av ); if( status != IB_SUCCESS ) { p_port->p_adapter->hung = TRUE; @@ -493,10 +500,8 @@ endpt_cm_buf_mgr_init( { NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter, EVENT_IPOIB_RECV_POOL, 1, cl_status ); - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("cl_qpool_init for cm recvs returned %#x\n", cl_status) ); - + ("cl_qpool_init(cm_buf_mgr.recv_pool) returned %#x\n", cl_status) ); return IB_INSUFFICIENT_MEMORY; } @@ -541,9 +546,8 @@ endpt_cm_buf_mgr_init( if( !p_port->cm_recv_mgr.recv_NBL_array ) { - //NDIS60 IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("cl_zalloc for NET_BUFFER_LIST array failed.\n") ); + ("cl_zalloc for cm_recv_mgr NET_BUFFER_LIST array failed.\n") ); ib_status = IB_INSUFFICIENT_MEMORY; goto pkt_array_failed; @@ -552,6 +556,7 @@ endpt_cm_buf_mgr_init( p_port->cm_buf_mgr.pool_init = TRUE; return IB_SUCCESS; + pkt_array_failed: if( p_port->cm_buf_mgr.h_buffer_pool ) NdisFreeBufferPool( p_port->cm_buf_mgr.h_buffer_pool ); @@ -565,6 +570,7 @@ pkt_pool_failed: return ib_status; } + void endpt_cm_buf_mgr_reset( IN ipoib_port_t* const p_port ) @@ -647,7 +653,8 @@ __cm_recv_desc_ctor( if( p_desc->p_alloc_buf == NULL ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Failed to allocate receive buffer size %d bytes.\n", p_desc->alloc_buf_size ) ); + ("Failed to allocate CM recv buffer size %d bytes.\n", + p_desc->alloc_buf_size ) ); return CL_INSUFFICIENT_MEMORY; } @@ -655,16 +662,15 @@ __cm_recv_desc_ctor( create_mr.length = p_desc->alloc_buf_size; create_mr.access_ctrl = IB_AC_LOCAL_WRITE; - - if( p_port->p_adapter->p_ifc->reg_mem( - p_port->ib_mgr.h_pd, - &create_mr, - &p_desc->lkey, - &rkey, - &p_desc->h_mr ) != IB_SUCCESS ) + if( p_port->p_adapter->p_ifc->reg_mem( p_port->ib_mgr.h_pd, + &create_mr, + &p_desc->lkey, + &rkey, + &p_desc->h_mr ) != IB_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Failed to create Memory Region size %d bytes.\n", p_desc->alloc_buf_size ) ); + ("Failed to create Memory Region size %d bytes.\n", + p_desc->alloc_buf_size ) ); goto ctor_failed; } p_desc->p_buf = p_desc->p_alloc_buf + (BUF_ALIGN - sizeof( ipoib_hdr_t)); @@ -679,9 +685,11 @@ __cm_recv_desc_ctor( p_desc->wr.wr_id = (uintn_t)p_desc; p_desc->wr.ds_array = p_desc->local_ds; p_desc->wr.num_ds = 1; + p_desc->type = PKT_TYPE_CM_UCAST; *pp_pool_item = &p_desc->item; + return CL_SUCCESS; ctor_failed: @@ -990,25 +998,28 @@ endpt_cm_recv_mgr_filter( if( p_wc->length < (sizeof(ipoib_hdr_t) + sizeof(ipoib_arp_pkt_t)) ) { IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Received ARP packet too short\n") ); + ("Received ARP packet too short (wc_len %d)\n", p_wc->length) ); ib_status = IB_ERROR; break; } - ib_status = - __endpt_cm_recv_arp( p_port, p_ipoib, p_eth, p_endpt ); + ib_status = __endpt_cm_recv_arp( p_port, p_ipoib, p_eth, p_endpt ); break; + case ETH_PROT_TYPE_IP: if( p_wc->length < (sizeof(ipoib_hdr_t) + sizeof(ip_hdr_t)) ) { IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Received IP packet too short\n") ); + ("Received IP packet too short (wc_len %d)\n", p_wc->length) ); ib_status = IB_ERROR; break; } if( p_ipoib->type.ip.hdr.prot == IP_PROT_UDP ) { - ib_status = - __endpt_cm_recv_udp( p_port, p_wc, p_ipoib, p_eth, p_endpt ); + ib_status = __endpt_cm_recv_udp( p_port, + p_wc, + p_ipoib, + p_eth, + p_endpt ); } break; @@ -1151,8 +1162,11 @@ __endpt_cm_recv_udp( } if( __cm_recv_is_dhcp( p_ipoib ) ) { - ib_status = ipoib_recv_dhcp( - p_port, p_ipoib, p_eth, p_src_endpt, p_port->p_local_endpt ); + ib_status = ipoib_recv_dhcp( p_port, + p_ipoib, + p_eth, + p_src_endpt, + p_port->p_local_endpt ); } return ib_status; diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.h b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.h index a6d25e82..6f027a00 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.h +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.h @@ -197,7 +197,7 @@ ipoib_endpt_ref( cl_obj_ref( &p_endpt->obj ); #if DBG IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("[%p] Endpt refcount raised to %d\n", p_endpt, p_endpt->obj.ref_cnt)); + ("[%#x] Endpt refcount raised to %d\n", p_endpt, p_endpt->obj.ref_cnt)); #endif /* * Anytime we reference the endpoint, we're either receiving data @@ -215,7 +215,7 @@ ipoib_endpt_deref( cl_obj_deref( &p_endpt->obj ); #if DBG IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("[%p] Endpt refcount decremented to %d\n", p_endpt, p_endpt->obj.ref_cnt)); + ("[%#x] Endpt refcount decremented to %d\n", p_endpt, p_endpt->obj.ref_cnt)); #endif } @@ -233,7 +233,7 @@ endpt_cm_set_state( IN ipoib_endpt_t* const p_endpt, IN cm_state_t state ) { - return(cm_state_t)InterlockedExchange( + return (cm_state_t)InterlockedExchange( (volatile LONG *)&p_endpt->conn.state, (LONG)state ); } diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp index 8def696c..b14ef238 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp @@ -580,7 +580,7 @@ inline void ipoib_port_ref( ipoib_port_t * p_port, int type ) #if DBG cl_atomic_inc( &p_port->ref[type % ref_mask] ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("Port[%d] refcount raised to %d\n", p_port->port_num, p_port->obj.ref_cnt)); + ("Port[%d] refcount raised to %d\n", p_port->port_num, p_port->obj.ref_cnt)); if ((p_port->obj.ref_cnt % 20)==0) IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, @@ -597,7 +597,8 @@ inline void ipoib_port_deref(ipoib_port_t * p_port, int type) #if DBG cl_atomic_dec( &p_port->ref[type % ref_mask] ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, - ("Port[%d] refcount decremented to %d\n", p_port->port_num, p_port->obj.ref_cnt)); + ("Port[%d] refcount-- to %d\n", p_port->port_num, p_port->obj.ref_cnt)); + if ((p_port->obj.ref_cnt % 20) == 0) IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, ("deref type %d ref_cnt %d\n", type, p_port->obj.ref_cnt) ); @@ -943,11 +944,7 @@ static void __ib_mgr_construct( IN ipoib_port_t* const p_port ) { - IPOIB_ENTER( IPOIB_DBG_INIT ); - cl_memclr( &p_port->ib_mgr, sizeof(ipoib_ib_mgr_t) ); - - IPOIB_EXIT( IPOIB_DBG_INIT ); } @@ -967,16 +964,18 @@ __ib_mgr_init( IPOIB_ENTER( IPOIB_DBG_INIT ); /* Open the CA. */ - status = p_port->p_adapter->p_ifc->open_ca( - p_port->p_adapter->h_al, p_port->p_adapter->guids.ca_guid, - NULL, p_port, &p_port->ib_mgr.h_ca ); + status = p_port->p_adapter->p_ifc->open_ca( p_port->p_adapter->h_al, + p_port->p_adapter->guids.ca_guid, + NULL, + p_port, + &p_port->ib_mgr.h_ca ); if( status != IB_SUCCESS ) { NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter, EVENT_IPOIB_OPEN_CA, 1, status ); IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("ib_open_ca returned %s\n", - p_port->p_adapter->p_ifc->get_err_str( status )) ); + ("ib_open_ca(port %p) returns %s\n", + p_port, p_port->p_adapter->p_ifc->get_err_str( status )) ); return status; } @@ -991,20 +990,23 @@ __ib_mgr_init( if( p_port->p_adapter->params.cm_enabled ) { uint32_t payload_mtu = __port_attr_to_mtu_size( - p_port->p_ca_attrs->p_port_attr[p_port->port_num - 1].mtu ) - - sizeof(ipoib_hdr_t); + p_port->p_ca_attrs->p_port_attr[p_port->port_num - 1].mtu ) + - sizeof(ipoib_hdr_t); + /* adjust ipoib UD payload MTU to actual port MTU size. */ p_port->p_adapter->params.payload_mtu = - max( DEFAULT_PAYLOAD_MTU, payload_mtu ); + max( DEFAULT_PAYLOAD_MTU, payload_mtu ); p_port->p_adapter->params.xfer_block_size = (sizeof(eth_hdr_t) + p_port->p_adapter->params.payload_mtu); } #endif + #if IPOIB_USE_DMA /* init DMA only once while running MiniportInitialize */ if ( !p_port->p_adapter->reset ) { ULONG max_phys_mapping; + if( p_port->p_adapter->params.cm_enabled ) { max_phys_mapping = p_port->p_adapter->params.cm_xfer_block_size; @@ -1199,7 +1201,7 @@ __ib_mgr_init( else { if ( p_port->p_adapter->params.send_chksum_offload ) - p_port->p_adapter->params.send_chksum_offload = CSUM_DISABLED; + p_port->p_adapter->params.send_chksum_offload = CSUM_DISABLED; } } #endif @@ -1378,8 +1380,6 @@ static void __buf_mgr_construct( IN ipoib_port_t* const p_port ) { - IPOIB_ENTER( IPOIB_DBG_INIT ); - cl_qpool_construct( &p_port->buf_mgr.recv_pool ); p_port->buf_mgr.h_packet_pool = NULL; @@ -1389,8 +1389,6 @@ __buf_mgr_construct( NULL, NULL, 0, MAX_LSO_PAYLOAD_MTU, 'bipi', 0 ); p_port->buf_mgr.h_send_pkt_pool = NULL; - - IPOIB_EXIT( IPOIB_DBG_INIT ); } @@ -1411,7 +1409,7 @@ __buf_mgr_init( /* Allocate the receive descriptor pool */ cl_status = cl_qpool_init( &p_port->buf_mgr.recv_pool, - p_params->rq_depth * p_params->recv_pool_ratio, + p_params->rq_depth * p_params->recv_pool_ratio, #if IPOIB_INLINE_RECV 0, 0, sizeof(ipoib_recv_desc_t), __recv_ctor, NULL, p_port ); #else /* IPOIB_INLINE_RECV */ @@ -1439,8 +1437,8 @@ __buf_mgr_init( pool_parameters.DataSize = 0; p_port->buf_mgr.h_packet_pool = NdisAllocateNetBufferListPool( - p_port->p_adapter->h_adapter, - &pool_parameters); + p_port->p_adapter->h_adapter, + &pool_parameters ); if( !p_port->buf_mgr.h_packet_pool ) { @@ -1455,8 +1453,8 @@ __buf_mgr_init( pool_parameters.PoolTag = 'XTPI'; p_port->buf_mgr.h_send_pkt_pool = NdisAllocateNetBufferListPool( - p_port->p_adapter->h_adapter, - &pool_parameters); + p_port->p_adapter->h_adapter, + &pool_parameters ); if( !p_port->buf_mgr.h_send_pkt_pool) { NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter, @@ -1548,8 +1546,8 @@ __recv_ctor( { /* The buffer crosses page boundaries. */ p_desc->local_ds[0].length = ds0_len; - p_desc->local_ds[1].vaddr = cl_get_physaddr( - ((uint8_t*)&p_desc->buf) + ds0_len ); + p_desc->local_ds[1].vaddr = + cl_get_physaddr( ((uint8_t*)&p_desc->buf) + ds0_len ); p_desc->local_ds[1].lkey = p_port->ib_mgr.lkey; p_desc->local_ds[1].length = sizeof(recv_buf_t) - ds0_len; p_desc->wr.num_ds = 2; @@ -1611,6 +1609,7 @@ __buf_mgr_get_recv( ipoib_recv_desc_t *p_desc; IPOIB_ENTER( IPOIB_DBG_RECV ); p_desc = (ipoib_recv_desc_t*)cl_qpool_get( &p_port->buf_mgr.recv_pool ); + /* Reference the port object for the send. */ if( p_desc ) { @@ -1670,9 +1669,7 @@ __buf_mgr_put_recv_list( IN ipoib_port_t* const p_port, IN cl_qlist_t* const p_list ) { - //IPOIB_ENTER( IPOIB_DBG_RECV ); cl_qpool_put_list( &p_port->buf_mgr.recv_pool, p_list ); - //IPOIB_EXIT( IPOIB_DBG_RECV ); } @@ -1731,13 +1728,8 @@ static void __recv_mgr_construct( IN ipoib_port_t* const p_port ) { - IPOIB_ENTER( IPOIB_DBG_INIT ); - cl_qlist_init( &p_port->recv_mgr.done_list ); - p_port->recv_mgr.recv_NBL_array = NULL; - - IPOIB_EXIT( IPOIB_DBG_INIT ); } @@ -1950,12 +1942,13 @@ ipoib_return_net_buffer_list( if ( !p_port ) { ASSERT(p_port); IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("return_NBL callback called when port pointer was already cleared\n") ); + (" port pointer; already cleared?\n") ); return; } cl_perf_start( ReturnPacket ); cl_spinlock_acquire( &p_port->recv_lock ); + NBL_cnt = __free_received_NBL( p_port, p_net_buffer_lists ); shutter_sub( &p_port->p_adapter->recv_shutter, -NBL_cnt ); @@ -2042,8 +2035,9 @@ __recv_cb( p_free = wc; cl_perf_start( PollRecv ); - status = p_port->p_adapter->p_ifc->poll_cq( - p_port->ib_mgr.h_recv_cq, &p_free, &p_wc ); + status = p_port->p_adapter->p_ifc->poll_cq( p_port->ib_mgr.h_recv_cq, + &p_free, + &p_wc ); cl_perf_stop( &p_port->p_adapter->perf, PollRecv ); CL_ASSERT( status == IB_SUCCESS || status == IB_NOT_FOUND ); @@ -2086,8 +2080,7 @@ __recv_cb( cl_perf_start( BuildNBLArray ); /* Notify NDIS of any and all possible receive buffers. */ - NBL_cnt = __recv_mgr_build_NBL_array( - p_port, &done_list, &discarded); + NBL_cnt = __recv_mgr_build_NBL_array( p_port, &done_list, &discarded); cl_perf_stop( &p_port->p_adapter->perf, BuildNBLArray ); /* Only indicate receives if we actually had any. */ @@ -2111,36 +2104,35 @@ __recv_cb( if (shortage <= 0) { res = shutter_add( &p_port->p_adapter->recv_shutter, NBL_cnt ); - if (res) { + if (res) + { NdisMIndicateReceiveNetBufferLists( - p_port->p_adapter->h_adapter, - p_port->recv_mgr.recv_NBL_array[0], - NDIS_DEFAULT_PORT_NUMBER, - NBL_cnt, - recv_complete_flags); + p_port->p_adapter->h_adapter, + p_port->recv_mgr.recv_NBL_array[0], + NDIS_DEFAULT_PORT_NUMBER, + NBL_cnt, + recv_complete_flags ); } else { - __free_received_NBL (p_port, p_port->recv_mgr.recv_NBL_array[0]); + __free_received_NBL( p_port, p_port->recv_mgr.recv_NBL_array[0] ); } } else { - - // If shortage >0, we already set the status to NDIS_RECEIVE_FLAGS_RESOURCES - // That is, IPoIB driver regain ownership of the NET_BUFFER_LIST structures immediately + /* If shortage >0, we already set the status to + NDIS_RECEIVE_FLAGS_RESOURCES. That is, IPoIB driver regain + ownership of the NET_BUFFER_LIST structures immediately. + */ res = shutter_add( &p_port->p_adapter->recv_shutter, 1 ); if (res) { NdisMIndicateReceiveNetBufferLists( - p_port->p_adapter->h_adapter, - p_port->recv_mgr.recv_NBL_array[0], - NDIS_DEFAULT_PORT_NUMBER, - NBL_cnt, - recv_complete_flags); + p_port->p_adapter->h_adapter, + p_port->recv_mgr.recv_NBL_array[0], + NDIS_DEFAULT_PORT_NUMBER, + NBL_cnt, + recv_complete_flags ); shutter_sub( &p_port->p_adapter->recv_shutter, -1 ); } - } - - cl_perf_stop( &p_port->p_adapter->perf, RecvNdisIndicate ); @@ -2150,15 +2142,16 @@ __recv_cb( */ if( shortage > 0 ) { - cl_dbg_out("GOT SHORTAGE <===============\n"); /* Return all but the last packet to the pool. */ cl_spinlock_acquire( &p_port->recv_lock ); //while( shortage-- > 1 ) while ( NBL_cnt-- > 0) { - __buf_mgr_put_recv( p_port, - (ipoib_recv_desc_t *)IPOIB_RECV_FROM_NBL( p_port->recv_mgr.recv_NBL_array[NBL_cnt] ), + __buf_mgr_put_recv( + p_port, + (ipoib_recv_desc_t *) + IPOIB_RECV_FROM_NBL( p_port->recv_mgr.recv_NBL_array[NBL_cnt] ), p_port->recv_mgr.recv_NBL_array[NBL_cnt] ); } __recv_mgr_repost( p_port ); @@ -2182,8 +2175,10 @@ __recv_cb( * __endpt_mgr_insert find a duplicate. */ cl_perf_start( RearmRecv ); - status = p_port->p_adapter->p_ifc->rearm_cq( - p_port->ib_mgr.h_recv_cq, FALSE ); + + status = + p_port->p_adapter->p_ifc->rearm_cq( p_port->ib_mgr.h_recv_cq, FALSE ); + cl_perf_stop( &p_port->p_adapter->perf, RearmRecv ); CL_ASSERT( status == IB_SUCCESS ); @@ -2192,7 +2187,6 @@ __recv_cb( // Please note the reference is still up KeInsertQueueDpc(&p_port->recv_dpc, NULL, NULL); } - cl_perf_stop( &p_port->p_adapter->perf, RecvCb ); IPOIB_EXIT( IPOIB_DBG_RECV ); @@ -2494,7 +2488,8 @@ __recv_mgr_filter( break; } if ((p_ipoib->type.ip.hdr.ver_hl & 0x0f) != 5 ) { - // If there are IP options in this message, we are in trouble in any case + // If there are IP options in this message, we are in + // trouble in any case status = IB_INVALID_SETTING; break; } @@ -2544,8 +2539,7 @@ __recv_mgr_filter( else { ip_stat_sel_t ip_stat; - p_desc->len = - len + sizeof(eth_hdr_t) - sizeof(ipoib_hdr_t); + p_desc->len = len + sizeof(eth_hdr_t) - sizeof(ipoib_hdr_t); if( p_dst->h_mcast) { if( p_dst->dgid.multicast.raw_group_id[10] == 0xFF && @@ -2810,7 +2804,7 @@ __recv_arp( if( p_ib_arp->prot_type != ETH_PROT_TYPE_IP ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("ARP protocal type not IP\n") ); + ("ARP protocal type not IP?\n") ); return IB_INVALID_SETTING; } @@ -2828,8 +2822,7 @@ __recv_arp( */ if( *pp_src ) { - if( cl_memcmp( &(*pp_src)->dgid, &p_ib_arp->src_hw.gid, - sizeof(ib_gid_t) ) ) + if( cl_memcmp( &(*pp_src)->dgid, &p_ib_arp->src_hw.gid, sizeof(ib_gid_t) ) ) { /* * GIDs for the endpoint are different. The ARP must @@ -2837,14 +2830,14 @@ __recv_arp( */ *pp_src = NULL; } - else if( (*pp_src)->dlid && - (*pp_src)->dlid != p_wc->recv.ud.remote_lid ) + else if( (*pp_src)->dlid && (*pp_src)->dlid != p_wc->recv.ud.remote_lid ) { /* Out of date! Destroy the endpoint and replace it. */ __endpt_mgr_remove( p_port, *pp_src ); *pp_src = NULL; } - else if ( ! ((*pp_src)->dlid)) { + else if ( ! ((*pp_src)->dlid)) + { /* Out of date! Destroy the endpoint and replace it. */ __endpt_mgr_remove( p_port, *pp_src ); *pp_src = NULL; @@ -2852,7 +2845,7 @@ __recv_arp( else if( ipoib_is_voltaire_router_gid( &(*pp_src)->dgid ) ) { if( (*pp_src)->qpn != ipoib_addr_get_qpn( &p_ib_arp->src_hw ) && - p_wc->recv.ud.remote_qp != ipoib_addr_get_qpn( &p_ib_arp->src_hw ) ) + p_wc->recv.ud.remote_qp != ipoib_addr_get_qpn( &p_ib_arp->src_hw ) ) { /* Out of date! Destroy the endpoint and replace it. */ __endpt_mgr_remove( p_port, *pp_src ); @@ -2872,25 +2865,31 @@ __recv_arp( { /* Copy the src GID to allow aligned access */ cl_memcpy( &gid, &p_ib_arp->src_hw.gid, sizeof(ib_gid_t) ); - status = ipoib_mac_from_guid( gid.unicast.interface_id, p_port->p_adapter->params.guid_mask, &mac ); + status = ipoib_mac_from_guid( gid.unicast.interface_id, + p_port->p_adapter->params.guid_mask, + &mac ); if (status == IB_INVALID_GUID_MASK) { IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_ERROR, ("Invalid GUID mask received, rejecting it") ); - ipoib_create_log(p_port->p_adapter->h_adapter, GUID_MASK_LOG_INDEX, EVENT_IPOIB_WRONG_PARAMETER_WRN); + ipoib_create_log( p_port->p_adapter->h_adapter, + GUID_MASK_LOG_INDEX, + EVENT_IPOIB_WRONG_PARAMETER_WRN ); + return status; } else if( status != IB_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("ipoib_mac_from_guid returned %s\n", - p_port->p_adapter->p_ifc->get_err_str( status )) ); + p_port->p_adapter->p_ifc->get_err_str( status )) ); return status; } + /* * Create the endpoint. */ *pp_src = ipoib_endpt_create( &p_ib_arp->src_hw.gid, - p_wc->recv.ud.remote_lid, ipoib_addr_get_qpn( &p_ib_arp->src_hw ) ); + p_wc->recv.ud.remote_lid, ipoib_addr_get_qpn( &p_ib_arp->src_hw ) ); if( !*pp_src ) { @@ -2909,7 +2908,6 @@ __recv_arp( p_port->p_adapter->p_ifc->get_err_str( status )) ); return status; } - cl_obj_unlock( &p_port->obj ); } @@ -2962,9 +2960,8 @@ __recv_arp( if( cl_memcmp( &p_dst->dgid, &p_ib_arp->dst_hw.gid, sizeof(ib_gid_t) ) ) { /* - * We received bcast ARP packet that means - * remote port lets everyone know it was changed IP/MAC - * or just activated + * We received bcast ARP packet that means the remote port + * lets everyone know it was changed IP/MAC or just activated */ /* Guy: TODO: Check why this check fails in case of Voltaire IPR */ @@ -2992,7 +2989,7 @@ __recv_arp( CL_ASSERT( p_dst->qpn == ipoib_addr_get_qpn( &p_ib_arp->dst_hw ) ); } } - else /* we got ARP reqeust */ + else /* we got ARP request */ { cl_memclr( &p_arp->dst_hw, sizeof(mac_addr_t) ); p_arp->dst_ip = p_ib_arp->dst_ip; @@ -3003,6 +3000,7 @@ __recv_arp( * we have a chance to create a new endpoint. */ status = __recv_gen( p_ipoib, p_eth, *pp_src, p_dst ); + if( status != IB_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -3024,9 +3022,7 @@ __recv_mgr_prepare_NBL( { NDIS_STATUS status; uint32_t pkt_filter; - //NDIS60 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO chksum; - //NDIS_TCP_IP_CHECKSUM_PACKET_INFO chksum; PERF_DECLARE( GetNdisPkt ); @@ -3046,7 +3042,7 @@ __recv_mgr_prepare_NBL( { /* OK to report. */ status = NDIS_STATUS_SUCCESS; - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_ERROR, + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_RECV, ("Received UCAST PKT.\n")); } else @@ -3069,7 +3065,7 @@ __recv_mgr_prepare_NBL( { status = NDIS_STATUS_FAILURE; IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Received BCAST PKT with ERROR !!!!\n")); + ("Received BCAST PKT with ERROR!!!! pkt_filter 0x%x\n",pkt_filter)); } break; case PKT_TYPE_MCAST: @@ -3128,9 +3124,11 @@ __recv_mgr_prepare_NBL( (void*)(uintn_t)chksum.Value; break; case CSUM_ENABLED: - /* Get the checksums directly from packet information. */ - /* In this case, no one of cheksum's cat get false value */ - /* If hardware checksum failed or wasn't calculated, NDIS will recalculate it again */ + /* Get the checksums directly from packet information. + * In this case, no one of cheksum's cat get false value + * If hardware checksum failed or wasn't calculated, NDIS will recalculate + * it again + */ NET_BUFFER_LIST_INFO(*pp_net_buffer_list, TcpIpChecksumNetBufferListInfo) = (void*)(uintn_t)(p_desc->ndis_csum.Value); break; @@ -3152,9 +3150,9 @@ __recv_mgr_prepare_NBL( static uint32_t __recv_mgr_build_NBL_array( - IN ipoib_port_t* const p_port, - OUT cl_qlist_t* p_done_list OPTIONAL, - OUT int32_t* const p_discarded) + IN ipoib_port_t* const p_port, + OUT cl_qlist_t* p_done_list OPTIONAL, + OUT int32_t* const p_discarded ) { cl_list_item_t *p_item; ipoib_recv_desc_t *p_desc; @@ -3167,7 +3165,7 @@ __recv_mgr_build_NBL_array( *p_discarded = 0; - /* Move any existing receives to the head of p_done_list to preserve ordering. */ + /* to preserve ordering move existing receives to the head of p_done_list */ if ( p_done_list ) { cl_qlist_insert_list_head( p_done_list, &p_port->recv_mgr.done_list ); } else { @@ -3186,11 +3184,11 @@ __recv_mgr_build_NBL_array( { CL_ASSERT( p_port->recv_mgr.recv_NBL_array[i] ); - if (i) { - // Link NBLs together + if (i) + { // Link NBLs together NET_BUFFER_LIST_NEXT_NBL(p_port->recv_mgr.recv_NBL_array[i-1]) = p_port->recv_mgr.recv_NBL_array[i]; - } + } i++; } else if( status == IB_NOT_DONE ) @@ -3270,6 +3268,7 @@ __send_mgr_init( IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("cl_qpool_init for sends returned %#x\n", cl_status) ); + IPOIB_EXIT(IPOIB_DBG_SEND ); return IB_INSUFFICIENT_MEMORY; } @@ -3287,15 +3286,15 @@ __send_mgr_init( NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter, EVENT_IPOIB_RECV_POOL, 1, cl_status ); //TODO EVENT_IPOIB_SEND_POOL IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("cl_qpool_init for sends returned %#x\n", - cl_status) ); + ("cl_qpool_init for sends returned %#x\n", cl_status) ); cl_qpool_destroy(&p_port->send_mgr.sg_pool); return IB_INSUFFICIENT_MEMORY; } - //This send descriptor can't be allocated on the stack because of boundary violation !!! - p_port->p_desc = - (ipoib_send_desc_t *)ExAllocatePoolWithTag(NonPagedPool ,sizeof (ipoib_send_desc_t), 'XMXA'); + //This send descriptor can't be allocated on the stack because of boundary + // violation !!! + p_port->p_desc = (ipoib_send_desc_t *) + ExAllocatePoolWithTag(NonPagedPool ,sizeof (ipoib_send_desc_t), 'XMXA'); if (!p_port->p_desc) { NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter, EVENT_IPOIB_RECV_POOL, 1, CL_INSUFFICIENT_MEMORY); //TODO EVENT_IPOIB_SEND_POOL @@ -3363,7 +3362,7 @@ __send_mgr_filter( IN const eth_hdr_t* const p_eth_hdr, IN MDL* const p_mdl, IN size_t buf_len, - IN OUT ipoib_send_NB_SG *s_buf) + IN OUT ipoib_send_NB_SG *s_buf ) { NDIS_STATUS status; @@ -3575,8 +3574,7 @@ __send_mgr_get_eth_hdr( if( *p_mdl_len < sizeof(eth_hdr_t) ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("First buffer in packet smaller than eth_hdr_t: %d.\n", - *p_mdl_len) ); + ("First buffer in packet smaller than eth_hdr_t: %d.\n", *p_mdl_len) ); return NDIS_STATUS_BUFFER_TOO_SHORT; } @@ -3600,6 +3598,7 @@ __send_mgr_get_eth_hdr( #if !IPOIB_USE_DMA + /* Send using the MDL's page information rather than the SGL. */ static ib_api_status_t __send_gen( @@ -3743,7 +3742,6 @@ __send_gen( ULONG g_ipoib_send_mcast = 0; - // returns true if buffer was sent bool @@ -3752,7 +3750,7 @@ ipoib_process_sg_list_real( IN PVOID pIrp, IN PSCATTER_GATHER_LIST p_sgl, IN PVOID context ) -{ +{ NDIS_STATUS status; ipoib_port_t *p_port; MDL *p_mdl; @@ -3766,6 +3764,8 @@ ipoib_process_sg_list_real( boolean_t from_queue; ib_api_status_t ib_status; ULONG complete_flags = 0; + ipoib_send_NB_SG *s_buf; + ipoib_send_desc_t *p_desc; IPOIB_ENTER( IPOIB_DBG_SEND ); @@ -3786,18 +3786,21 @@ ipoib_process_sg_list_real( ++g_ipoib_send_SG_real; //Read Data from the buffer passed as a context - ipoib_send_NB_SG * s_buf = (ipoib_send_NB_SG *)context; + s_buf = (ipoib_send_NB_SG *)context; p_net_buffer_list = s_buf->p_nbl; p_netbuf = s_buf->p_curr_nb; p_port = s_buf->p_port; + p_desc = p_port->p_desc; - - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_SEND, - ("Processing netbuffer list: %p \n", p_net_buffer_list) ); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_BUF, + ("Processing netbuffer list %p s_buf %p\n", p_net_buffer_list, s_buf) ); //TODO Define this function as void if we are not in DBG mode //cl_qlist_check_validity(&p_port->send_mgr.pending_list); - NDIS_SET_SEND_COMPLETE_FLAG(complete_flags, NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL); + + NDIS_SET_SEND_COMPLETE_FLAG(complete_flags, + NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL); + CL_ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); p_port->p_desc->p_netbuf_list = p_net_buffer_list; @@ -3827,13 +3830,19 @@ ipoib_process_sg_list_real( ret = true; goto send_end; } + from_queue = (boolean_t)(s_buf->p_sgl != NULL); if (from_queue) { cl_perf_start( GetEndpt ); - status = __endpt_mgr_ref( p_port, p_eth_hdr->dst, &(p_port->p_desc->p_endpt) ); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,("__endpt_mgr_ref called for %p\n", p_port->p_desc->p_endpt)); + status = __endpt_mgr_ref( p_port, + p_eth_hdr->dst, + &(p_port->p_desc->p_endpt) ); + + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("__endpt_mgr_ref called on EP %p\n", p_port->p_desc->p_endpt)); + cl_perf_stop( &p_port->p_adapter->perf, GetEndpt ); if( status == NDIS_STATUS_PENDING ) { @@ -3852,33 +3861,43 @@ ipoib_process_sg_list_real( if( ETH_IS_MULTICAST( p_eth_hdr->dst.addr ) ) { - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, ("recived a mc packet (from the queue) %p\n", p_net_buffer_list)); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("recived a mc packet (from the queue) %p\n", + p_net_buffer_list)); if( ipoib_port_join_mcast( p_port, p_eth_hdr->dst, IB_MC_REC_STATE_FULL_MEMBER) == IB_SUCCESS ) { s_buf->p_sgl = p_sgl; - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST,("We insert this MULTICAST item back to the pending list: %p \n", p_net_buffer_list)); - cl_qlist_insert_head( &p_port->send_mgr.pending_list, (cl_list_item_t*) s_buf ); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("Insert MULTICAST item back to the pending list %p\n", + p_net_buffer_list)); + cl_qlist_insert_head( &p_port->send_mgr.pending_list, + (cl_list_item_t*) s_buf ); ret = false; ++g_ipoib_send_SG_pending; goto send_end; } } + /* * Complete the send as if we sent it - WHQL tests don't like the * sends to fail. */ - IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,("We got bad status and the packet had not been sent\n")); + IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + ("Bad status: packet has not been sent\n")); cl_perf_start( ProcessFailedSends ); - __send_complete_net_buffer(s_buf, NDIS_STATUS_SUCCESS, complete_flags, TRUE); + __send_complete_net_buffer( s_buf, + NDIS_STATUS_SUCCESS, + complete_flags, + TRUE ); ret = true; goto send_end; } } else //We got this Net Buffer and its SG list directly from NDIS { - ASSERT(s_buf->p_sgl ==NULL); + ASSERT(s_buf->p_sgl == NULL); s_buf->p_sgl = p_sgl; cl_perf_start( SendMgrQueue ); @@ -3886,17 +3905,14 @@ ipoib_process_sg_list_real( p_eth_hdr->type == ETH_PROT_TYPE_IP && !ETH_IS_BROADCAST( p_eth_hdr->dst.addr ) ) { - - IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, - ("recived a Multicast NBL= %p\n", p_net_buffer_list) ); - - - ip_hdr_t *p_ip_hdr; uint8_t *p_tmp; MDL *p_ip_hdr_mdl; UINT ip_hdr_mdl_len; + IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("Sent a Multicast NBL=%p\n", p_net_buffer_list) ); + g_ipoib_send_mcast++; if(mdl_len >= sizeof(ip_hdr_t) + sizeof(eth_hdr_t)) @@ -3930,7 +3946,6 @@ ipoib_process_sg_list_real( p_ip_hdr = (ip_hdr_t*)(p_tmp + NET_BUFFER_CURRENT_MDL_OFFSET(p_netbuf)); } - p_eth_hdr->dst.addr[1] = ((unsigned char*)&p_ip_hdr->dst_ip)[0] & 0x0f; p_eth_hdr->dst.addr[3] = ((unsigned char*)&p_ip_hdr->dst_ip)[1]; @@ -3939,9 +3954,7 @@ ipoib_process_sg_list_real( mc_end: ASSERT(s_buf->p_sgl); - status = __send_mgr_queue( p_port, - p_eth_hdr, - &(p_port->p_desc->p_endpt) ); + status = __send_mgr_queue( p_port, p_eth_hdr, &(p_port->p_desc->p_endpt) ); cl_perf_stop( &p_port->p_adapter->perf, SendMgrQueue ); if( status == NDIS_STATUS_PENDING ) @@ -3967,8 +3980,10 @@ mc_end: */ //TODO - check previous comment ! cl_perf_start( ProcessFailedSends ); - __send_complete_net_buffer( s_buf, NDIS_STATUS_SUCCESS, - complete_flags, TRUE); + __send_complete_net_buffer( s_buf, + NDIS_STATUS_SUCCESS, + complete_flags, + TRUE ); cl_perf_stop( &p_port->p_adapter->perf, ProcessFailedSends ); ret = true; goto send_end; @@ -4023,6 +4038,8 @@ send_end: } +// This routine called during execution of NdisMAllocateNetBufferSGList(). + void ipoib_process_sg_list( IN PDEVICE_OBJECT pDO, @@ -4040,7 +4057,7 @@ ipoib_process_sg_list( //ASSERT(g_ipoib_send_SG-2 <= g_ipoib_send + g_ipoib_send_mcast+p_port->send_mgr.pending_list.count+ g_ipoib_send_SG_failed); } - ipoib_process_sg_list_real(pDO, pIrp, p_sgl, context); + ipoib_process_sg_list_real( pDO, pIrp, p_sgl, context ); if (g_ipoib_send_SG > 1) { //ASSERT(g_ipoib_send_SG-1 <= g_ipoib_send + g_ipoib_send_mcast+p_port->send_mgr.pending_list.count + g_ipoib_send_SG_failed); @@ -4074,25 +4091,29 @@ __send_gen( return NDIS_STATUS_FAILURE; } ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; - //TODO: Copy only essential data - // That is, copy only 2 chunks of ETH header if it contained in several first SG elements - // Copy only N+1-MAX_SEND_SGE, where N is a lenght of SG List - /* Remember that one of the DS entries is reserved for the IPoIB header. */ + + /* TODO: Copy only essential data + That is, copy only 2 chunks of ETH header if it contained in several + first SG elements. + Copy only N+1-MAX_SEND_SGE, where N is a lenght of SG List + Remember that one of the DS entries is reserved for the IPoIB header. + */ if( ( p_sgl->NumberOfElements >= MAX_SEND_SGE || p_sgl->Elements[0].Length < sizeof(eth_hdr_t)) ) { - IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_SEND, ("Too many buffers %d to fit in WR ds_array[%d] \ Or buffer[0] length %d < Eth header. Copying data.\n", - p_sgl->NumberOfElements, MAX_SEND_SGE, p_sgl->Elements[0].Length ) ); - status = NDIS_STATUS_RESOURCES; + p_sgl->NumberOfElements, MAX_SEND_SGE, p_sgl->Elements[0].Length ) ); + if( !s_buf->p_port->p_adapter->params.cm_enabled ) { cl_perf_start( SendCopy ); status = __send_copy( s_buf->p_port, s_buf, lso_header_size ); cl_perf_stop( &s_buf->p_port->p_adapter->perf, SendCopy ); } + + status = NDIS_STATUS_RESOURCES; IPOIB_EXIT( IPOIB_DBG_SEND ); return status; } @@ -4206,6 +4227,7 @@ __send_mgr_filter_ip( { p_ip_hdr = (ip_hdr_t*)(p_eth_hdr + 1); } + if( buf_len < sizeof(ip_hdr_t) ) { /* This buffer is done for. Get the next buffer. */ @@ -4217,9 +4239,9 @@ __send_mgr_filter_ip( switch( p_ip_hdr->prot ) { case IP_PROT_UDP: - cl_perf_start( FilterUdp ); - status = __send_mgr_filter_udp( p_ip_hdr, p_mdl, (buf_len - sizeof(ip_hdr_t)), s_buf ); + status = __send_mgr_filter_udp( p_ip_hdr, p_mdl, + (buf_len - sizeof(ip_hdr_t)), s_buf ); cl_perf_stop( &p_port->p_adapter->perf, FilterUdp ); if( status == NDIS_STATUS_PENDING ) { /* not DHCP packet, keep going */ @@ -4239,19 +4261,22 @@ __send_mgr_filter_ip( In igmp packet I saw that iph arrive in 2 NDIS_BUFFERs: 1. iph 2. ip options - So to get the IGMP packet we need to skip the ip options NDIS_BUFFER - */ + So to get the IGMP packet we need to skip the ip options NDIS_BUFFER + */ iph_size_in_bytes = (p_ip_hdr->ver_hl & 0xf) * 4; iph_options_size = iph_size_in_bytes - buf_len; buf_len -= sizeof(ip_hdr_t);//without ipheader - /* + /* Could be a case that arrived igmp packet not from type IGMPv2 , but IGMPv1 or IGMPv3. We anyway pass it to __send_mgr_filter_igmp_v2(). */ - status = - __send_mgr_filter_igmp_v2( s_buf->p_port, p_ip_hdr, iph_options_size, p_mdl, buf_len ); + status = __send_mgr_filter_igmp_v2( s_buf->p_port, + p_ip_hdr, + iph_options_size, + p_mdl, + buf_len ); if( status != NDIS_STATUS_SUCCESS ) return status; @@ -4277,10 +4302,17 @@ __send_mgr_filter_ip( { //TODO: NDIS60 #if 0 - status = __send_fragments( p_port, p_desc, (eth_hdr_t* const)p_eth_hdr, - (ip_hdr_t* const)p_ip_hdr, (uint32_t)buf_len, p_mdl ); + status = __send_fragments( p_port, + p_desc, + (eth_hdr_t* const)p_eth_hdr, + (ip_hdr_t* const)p_ip_hdr, + (uint32_t)buf_len, + p_mdl ); return status; #endif + IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + ("TODO NDIS6 SEND_UD_QP fragments @ line #%d file %s\n", + __LINE__,__FILE__) ); ASSERT(FALSE); } } @@ -4310,11 +4342,13 @@ __send_mgr_filter_igmp_v2( IPOIB_ENTER( IPOIB_DBG_SEND ); IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, - ("buf_len = %d,iph_options_size = %d\n",(int)buf_len,(int)iph_options_size ) ); + ("buf_len = %d,iph_options_size = %d\n", + (int)buf_len, (int)iph_options_size) ); if( !buf_len ) { - // To get the IGMP packet we need to skip the ip options NDIS_BUFFER (if exists) + // To get the IGMP packet we need to skip the ip options NDIS_BUFFER + // (if exists) while ( iph_options_size ) { NdisGetNextMdl( p_mdl, &p_mdl ); @@ -4379,9 +4413,10 @@ __send_mgr_filter_igmp_v2( collector will not delete this mcast endpt. */ IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, - ("Catched IGMP_V2_MEMBERSHIP_REPORT message\n") ); + ("Received IGMP_V2_MEMBERSHIP_REPORT message\n") ); endpt_status = __endpt_mgr_ref( p_port, fake_mcast_mac, &p_endpt ); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,("__endpt_mgr_ref called for %p\n", p_endpt)); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("__endpt_mgr_ref called for %p\n", p_endpt)); if ( p_endpt ) { cl_obj_lock( &p_port->obj ); @@ -4398,9 +4433,10 @@ __send_mgr_filter_igmp_v2( garbage collector will delete this mcast endpt next time. */ IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, - ("Catched IGMP_V2_LEAVE_GROUP message\n") ); + ("Received IGMP_V2_LEAVE_GROUP message\n") ); endpt_status = __endpt_mgr_ref( p_port, fake_mcast_mac, &p_endpt ); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,("__endpt_mgr_ref called for %p\n", p_endpt)); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("__endpt_mgr_ref called for %p\n", p_endpt)); if ( p_endpt ) { cl_obj_lock( &p_port->obj ); @@ -4698,7 +4734,9 @@ __send_mgr_filter_dhcp( /* no chksum for udp */ s_buf->p_send_buf->ip.prot.udp.hdr.chksum = 0; p_desc->send_wr[0].local_ds[1].vaddr = cl_get_physaddr( s_buf->p_send_buf ); - p_desc->send_wr[0].local_ds[1].length = sizeof(ip_hdr_t) + sizeof(udp_hdr_t) + sizeof(dhcp_pkt_t); + p_desc->send_wr[0].local_ds[1].length = sizeof(ip_hdr_t) + + sizeof(udp_hdr_t) + + sizeof(dhcp_pkt_t); p_desc->send_wr[0].local_ds[1].lkey = s_buf->p_port->ib_mgr.lkey; p_desc->send_wr[0].wr.num_ds = 2; p_desc->send_dir = SEND_UD_QP; @@ -4741,9 +4779,7 @@ __send_mgr_filter_arp( } } else - { p_arp = (arp_pkt_t*)(p_eth_hdr + 1); - } /* Single buffer ARP packet. */ if( buf_len < sizeof(arp_pkt_t) ) @@ -4763,7 +4799,8 @@ __send_mgr_filter_arp( /* Allocate our scratch buffer. */ ASSERT(s_buf->p_send_buf == NULL); s_buf->p_send_buf = (send_buf_t*) - NdisAllocateFromNPagedLookasideList( &s_buf->p_port->buf_mgr.send_buf_list ); + NdisAllocateFromNPagedLookasideList( + &s_buf->p_port->buf_mgr.send_buf_list ); if( !s_buf->p_send_buf ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -4789,14 +4826,18 @@ __send_mgr_filter_arp( #endif ib_gid_set_default( &p_ib_arp->src_hw.gid, - s_buf->p_port->p_adapter->guids.port_guid.guid ); + s_buf->p_port->p_adapter->guids.port_guid.guid ); + p_ib_arp->src_ip = p_arp->src_ip; + if( cl_memcmp( &p_arp->dst_hw, &null_hw, sizeof(mac_addr_t) ) ) { /* Get the endpoint referenced by the dst_hw address. */ net32_t qpn = 0; - status = __endpt_mgr_get_gid_qpn( s_buf->p_port, p_arp->dst_hw, - &p_ib_arp->dst_hw.gid, &qpn ); + status = __endpt_mgr_get_gid_qpn( s_buf->p_port, + p_arp->dst_hw, + &p_ib_arp->dst_hw.gid, + &qpn ); if( status != NDIS_STATUS_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -4838,11 +4879,12 @@ __send_mgr_filter_arp( case IPOIB_CM_CONNECT: /* queue ARP REP packet until connected */ - NdisFreeToNPagedLookasideList( + NdisFreeToNPagedLookasideList( &p_port->buf_mgr.send_buf_list, s_buf->p_send_buf ); - cl_qlist_insert_tail( &p_port->send_mgr.pending_list, - IPOIB_LIST_ITEM_FROM_NBL( p_desc->p_pkt ) ); - return NDIS_STATUS_PENDING; + cl_qlist_insert_tail( &p_port->send_mgr.pending_list, + IPOIB_LIST_ITEM_FROM_NBL( s_buf->p_nbl ) ); + + return NDIS_STATUS_PENDING; default: break; } @@ -4898,7 +4940,7 @@ __send_mgr_queue( if( cl_qlist_count( &p_port->send_mgr.pending_list ) ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_WARNING, IPOIB_DBG_SEND, - ("Pending list not empty.\n") ); + ("Pending list not empty p_eth_hdr %p\n",p_eth_hdr) ); return NDIS_STATUS_PENDING; } @@ -4919,7 +4961,8 @@ __send_mgr_queue( if( status == NDIS_STATUS_NO_ROUTE_TO_DESTINATION && ETH_IS_MULTICAST( p_eth_hdr->dst.addr ) ) { - IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST,("Calling join mcast from send_mgr_queue\n")); + IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("Calling join mcast from send_mgr_queue\n")); if( ipoib_port_join_mcast( p_port, p_eth_hdr->dst, IB_MC_REC_STATE_FULL_MEMBER) == IB_SUCCESS ) { @@ -4998,14 +5041,17 @@ __build_send_desc( hdr_idx = cl_atomic_inc( &s_buf->p_port->hdr_idx ); hdr_idx &= (s_buf->p_port->p_adapter->params.sq_depth - 1); ASSERT( hdr_idx < s_buf->p_port->p_adapter->params.sq_depth ); + s_buf->p_port->hdr[hdr_idx].type = p_eth_hdr->type; s_buf->p_port->hdr[hdr_idx].resv = 0; - //TODO why we enter this block for LSO ??? - p_desc->send_wr[0].local_ds[0].vaddr = cl_get_physaddr( &s_buf->p_port->hdr[hdr_idx] ); + //TODO why enter this block for LSO ??? + p_desc->send_wr[0].local_ds[0].vaddr = + cl_get_physaddr( &s_buf->p_port->hdr[hdr_idx] ); p_desc->send_wr[0].local_ds[0].length = sizeof(ipoib_hdr_t); p_desc->send_wr[0].local_ds[0].lkey = s_buf->p_port->ib_mgr.lkey; p_desc->send_wr[0].wr.send_opt = 0; + //Init send buffer to 0 s_buf->p_send_buf = NULL; @@ -5015,7 +5061,12 @@ __build_send_desc( ASSERT( mss == (p_lso_info->LsoV1Transmit.MSS & p_lso_info->LsoV2Transmit.MSS)); //ASSERT ( (mss & (1<<20)) == mss); - status = __build_lso_desc( s_buf->p_port, mss, hdr_idx, p_lso_info, s_buf->p_curr_nb); + status = __build_lso_desc( s_buf->p_port, + mss, + hdr_idx, + p_lso_info, + s_buf->p_curr_nb ); + if( status != NDIS_STATUS_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -5071,6 +5122,7 @@ __build_send_desc( CL_ASSERT( p_desc->send_dir == SEND_RC_QP ); p_desc->send_qp = p_desc->p_endpt->conn.h_work_qp; } + for( i = 0; i < p_desc->num_wrs; i++ ) { p_desc->send_wr[i].wr.wr_type = WR_SEND; @@ -5091,6 +5143,7 @@ __build_send_desc( return NDIS_STATUS_SUCCESS; } + static NDIS_STATUS __build_lso_desc( IN ipoib_port_t* const p_port, @@ -5188,11 +5241,8 @@ CreateFragList( ULONG PhysBufCount, PNET_BUFFER NetBuff, ULONG PacketLength, - PMP_FRAG_LIST pFragList - ) + PMP_FRAG_LIST pFragList ) { - - ULONG i = 0; int j=0; @@ -5202,7 +5252,6 @@ CreateFragList( ULONG CurrentMdlDataOffset = NET_BUFFER_CURRENT_MDL_OFFSET(NetBuff); ASSERT(MmGetMdlByteCount(pMdl) >= CurrentMdlDataOffset); - ASSERT(NetBuff != NULL); #ifdef DBG ASSERT(PhysBufCount <= MAX_PHYS_BUF_FRAG_ELEMENTS); @@ -5214,7 +5263,8 @@ CreateFragList( UNREFERENCED_PARAMETER(PacketLength); - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ("CreateFragList: NetBuff %p, Length =0x%x\n", NetBuff, buf_len)); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, + ("CreateFragList: NetBuff %p, Length =0x%x\n", NetBuff, buf_len)); while ( (pMdl != NULL) && (buf_len != 0) ) { @@ -5233,7 +5283,9 @@ CreateFragList( ASSERT( (buf_len > 0) && (MdlBytesCount > 0) ); - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ("CreateFragList: pMdl=%p, MdlBytesCount=x%x, MdlBufCount=0x%x\n", pMdl, MdlBytesCount, MdlBufCount)); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, + ("CreateFragList: pMdl=%p, MdlBytesCount=x%x, MdlBufCount=0x%x\n", + pMdl, MdlBytesCount, MdlBufCount)); if (MdlBytesCount > 0) { @@ -5247,22 +5299,21 @@ CreateFragList( buf_len = 0; } // - // In some cases the mdlcount is greater than needed and in the last page - // there is 0 bytes + // In some cases the mdlcount is greater than needed and in the last + // page there is 0 bytes // for (j=0; ((j< MdlBufCount) && (MdlBytesCount > 0)); j++) { ASSERT(MdlBytesCount > 0); if (j ==0 ) { - // // First page // ULONG64 ul64PageNum = page_array[j]; - pFragList->Elements[i].Address.QuadPart = (ul64PageNum << PAGE_SHIFT)+ offset; + pFragList->Elements[i].Address.QuadPart = + (ul64PageNum << PAGE_SHIFT)+ offset; if( offset + MdlBytesCount > PAGE_SIZE ) { - // // the data slides behind the page boundry // ASSERT(PAGE_SIZE > offset); @@ -5271,14 +5322,16 @@ CreateFragList( } else { - // // All the data is hold in one page // pFragList->Elements[i].Length = MdlBytesCount; MdlBytesCount = 0; } - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ( "CreateFragList: j == 0, MdlBytesCount=x%x, i = %d, element.length=0x%x \n", MdlBytesCount, i, pFragList->Elements[i].Length)); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, + ("CreateFragList: j == 0, MdlBytesCount=x%x, i = %d, " + "element.length=0x%x \n", + MdlBytesCount, i, pFragList->Elements[i].Length)); } else { @@ -5292,8 +5345,8 @@ CreateFragList( } else { - // - // Not first page. so the data always start at the begining of the page + // Not first page. so the data always start at the + // begining of the page // ULONG64 ul64PageNum = page_array[j]; pFragList->Elements[i].Address.QuadPart = (ul64PageNum << PAGE_SHIFT); @@ -5301,49 +5354,51 @@ CreateFragList( MdlBytesCount -= pFragList->Elements[i].Length; } - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ( "CreateFragList: j != 0, MdlBytesCount=x%x, i = %d, element.length=0x%x \n", MdlBytesCount, i, pFragList->Elements[i].Length)); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, + ( "CreateFragList: j != 0, MdlBytesCount=x%x, i = %d, " + "element.length=0x%x \n", + MdlBytesCount, i, pFragList->Elements[i].Length)); } i++; ASSERT(i <= MAX_PHYS_BUF_FRAG_ELEMENTS); } } - pMdl = pMdl->Next; } if (buf_len != 0) { - // - // In some cases the size in MDL isn't equal to the buffer size. In such - // a case we need to add the rest of packet to last chunk + // In some cases the size in MDL isn't equal to the buffer size. + // In such a case we need to add the rest of packet to last chunk // ASSERT(i > 0); // To prevent array underflow pFragList->Elements[i-1].Length += buf_len; - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ( "CreateFragList: buf_len != 0, i = %d, element.length=0x%x \n", i -1, pFragList->Elements[i-1].Length)); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, + ( "CreateFragList: buf_len != 0, i = %d, element.length=0x%x \n", + i-1, pFragList->Elements[i-1].Length)); } ASSERT(i <= PhysBufCount); pFragList->NumberOfElements = i; #ifdef DBG -{ - ULONG size = 0; - for (i = 0; i < pFragList->NumberOfElements; ++i) - { - size += pFragList->Elements[i].Length; - } - ASSERT(size == PacketLength); -} + { + ULONG size = 0; + for (i = 0; i < pFragList->NumberOfElements; ++i) + { + size += pFragList->Elements[i].Length; + } + ASSERT(size == PacketLength); + } #endif - } void ipoib_port_send( - IN ipoib_port_t* const p_port, - IN NET_BUFFER_LIST *p_net_buffer_list, - IN ULONG send_flags) + IN ipoib_port_t* const p_port, + IN NET_BUFFER_LIST *p_net_buffer_list, + IN ULONG send_flags ) { NDIS_STATUS status; PNET_BUFFER p_netbuf, p_next_netbuf = NULL; @@ -5370,23 +5425,21 @@ ipoib_port_send( NDIS_RAISE_IRQL_TO_DISPATCH(&old_irql); //ASSERT (KeGetCurrentIrql() == PASSIVE_LEVEL); // Happens } - NDIS_SET_SEND_COMPLETE_FLAG(send_complete_flags, NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL); - + NDIS_SET_SEND_COMPLETE_FLAG( send_complete_flags, + NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL ); cl_obj_lock( &p_port->obj ); if( p_port->state != IB_QPS_RTS ) { cl_obj_unlock( &p_port->obj ); IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, - ("QP state isnt RTS, exiting from port_send\n")); + ("Invalid QP state: not RTS, exiting from port_send\n")); NET_BUFFER_LIST_STATUS(p_net_buffer_list) = NDIS_STATUS_FAILURE; ipoib_inc_send_stat( p_port->p_adapter, IP_STAT_DROPPED, 0 ); - NdisMSendNetBufferListsCompleteX( - p_port->p_adapter, - p_net_buffer_list, - send_complete_flags); - + NdisMSendNetBufferListsCompleteX( p_port->p_adapter, + p_net_buffer_list, + send_complete_flags ); return; } cl_obj_unlock( &p_port->obj ); @@ -5395,9 +5448,10 @@ ipoib_port_send( // You are already here at dispatch // We need to init the status here - // When completing the send, we will set the status NDIS_STATUS_FAILURE if AT LEAST - // one of NBs will fail. - // That is, status can't be updated back to SUCCESS if it previosly was set to FAILURE + // When completing the send, we will set the status NDIS_STATUS_FAILURE if + // AT LEAST one of NBs will fail. + // That is, status can't be updated back to SUCCESS if it previosly was set + // to FAILURE. NET_BUFFER_LIST_STATUS(p_net_buffer_list) = NDIS_STATUS_SUCCESS; for (p_netbuf = NET_BUFFER_LIST_FIRST_NB(p_net_buffer_list); @@ -5414,7 +5468,8 @@ ipoib_port_send( ASSERT(buf_cnt); // Raise reference count of the NBL to the number of its NBs - IPOIB_GET_NET_BUFFER_LIST_REF_COUNT(p_net_buffer_list) = (PVOID)(ULONG_PTR)buf_cnt; + IPOIB_GET_NET_BUFFER_LIST_REF_COUNT(p_net_buffer_list) = + (PVOID)(ULONG_PTR)buf_cnt; for (p_netbuf = NET_BUFFER_LIST_FIRST_NB(p_net_buffer_list); p_netbuf != NULL; @@ -5422,15 +5477,16 @@ ipoib_port_send( { p_next_netbuf = NET_BUFFER_NEXT_NB(p_netbuf); - ipoib_send_NB_SG * s_buf = (ipoib_send_NB_SG*) (PVOID) (cl_qpool_get(&p_port->send_mgr.send_pool)); - if (s_buf == NULL) { + ipoib_send_NB_SG * s_buf = (ipoib_send_NB_SG*) (PVOID) + (cl_qpool_get(&p_port->send_mgr.send_pool)); + if (s_buf == NULL) + { ASSERT(FALSE); NET_BUFFER_LIST_STATUS(p_net_buffer_list) = NDIS_STATUS_RESOURCES; - NdisMSendNetBufferListsCompleteX( - p_port->p_adapter, - p_net_buffer_list, - send_complete_flags); - break; + NdisMSendNetBufferListsCompleteX( p_port->p_adapter, + p_net_buffer_list, + send_complete_flags ); + break; } //Set all the data needed for process_sg_list @@ -5475,35 +5531,31 @@ ipoib_port_send( ++g_ipoib_send_SW_in_loop; - ASSERT(s_buf->p_sg_buf); - status = NdisMAllocateNetBufferSGList( - p_port->p_adapter->NdisMiniportDmaHandle, - p_netbuf, - s_buf, - NDIS_SG_LIST_WRITE_TO_DEVICE, - (PUCHAR )s_buf->p_sg_buf + sizeof(cl_pool_item_t), - p_port->p_adapter->sg_list_size); + status = NdisMAllocateNetBufferSGList( + p_port->p_adapter->NdisMiniportDmaHandle, + p_netbuf, + s_buf, + NDIS_SG_LIST_WRITE_TO_DEVICE, + (PUCHAR )s_buf->p_sg_buf + sizeof(cl_pool_item_t), + p_port->p_adapter->sg_list_size); - - cl_spinlock_acquire( &p_port->send_lock ); + cl_spinlock_acquire( &p_port->send_lock ); #endif -// } - + if( status != NDIS_STATUS_SUCCESS ) { - + IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + ("Partial Send @ line #%d\n %s\n",__LINE__,__FILE__) ); ASSERT(FALSE); - // TODOD: There is a bug here if we have succeeded in sending some and failed - // with the otheres. - + // TODOD: There is a bug here if we have succeeded in sending some + // and failed with the others. /* fail net buffer list */ NET_BUFFER_LIST_STATUS(p_net_buffer_list) = status; - NdisMSendNetBufferListsCompleteX( - p_port->p_adapter, - p_net_buffer_list, - send_complete_flags); - break; + NdisMSendNetBufferListsCompleteX( p_port->p_adapter, + p_net_buffer_list, + send_complete_flags ); + break; } } @@ -5519,19 +5571,19 @@ __send_complete_net_buffer( IN ipoib_send_NB_SG *s_buf, IN NDIS_STATUS status, IN ULONG compl_flags, - IN boolean_t bLock ) + IN boolean_t bLock ) { CL_ASSERT( s_buf ); - IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, - ("Processing send completion for NBL=0x%p .\n", s_buf->p_nbl )); + IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_BUF, + ("Processing send completion for NBL %p s_buf %p\n", + s_buf->p_nbl, s_buf)); // Free SGL element allocated by NDIS // We should do it before freeing the whole NBL - NdisMFreeNetBufferSGList( - s_buf->p_port->p_adapter->NdisMiniportDmaHandle, - s_buf->p_sgl, - s_buf->p_curr_nb); + NdisMFreeNetBufferSGList( s_buf->p_port->p_adapter->NdisMiniportDmaHandle, + s_buf->p_sgl, + s_buf->p_curr_nb ); // No need to delete p_sg_buf at this state, we will destroy the whole list // at the end of the execution @@ -5561,15 +5613,16 @@ __send_complete_net_buffer( case NDIS_STATUS_RESOURCES: default: ASSERT(FALSE); - } IPOIB_DEC_NET_BUFFER_LIST_REF_COUNT(s_buf->p_nbl); /* Complete the NBL */ - if (IPOIB_GET_NET_BUFFER_LIST_REF_COUNT(s_buf->p_nbl) == 0) { + if (IPOIB_GET_NET_BUFFER_LIST_REF_COUNT(s_buf->p_nbl) == 0) + { NET_BUFFER_LIST_STATUS(s_buf->p_nbl) = status; PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO pLsoInfo = - (PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO) (PULONG)&NET_BUFFER_LIST_INFO(s_buf->p_nbl, TcpLargeSendNetBufferListInfo); + (PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO) + (PULONG)&NET_BUFFER_LIST_INFO(s_buf->p_nbl, TcpLargeSendNetBufferListInfo); if(pLsoInfo->Transmit.Type == NDIS_TCP_LARGE_SEND_OFFLOAD_V1_TYPE) { UINT TcpPayLoad = 0; @@ -5652,9 +5705,8 @@ ipoib_port_resume( if( p_port->state != IB_QPS_RTS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_SEND, - ("Invalid port state =%d - Flushing the penging list\n", p_port->state) ); + ("Invalid port state =%d - Flush pending list\n", p_port->state) ); b_good_port_state = FALSE; - } cl_obj_unlock( &p_port->obj ); @@ -5665,16 +5717,14 @@ ipoib_port_resume( p_item = cl_qlist_remove_head( &p_port->send_mgr.pending_list ); while (p_item != cl_qlist_end(&p_port->send_mgr.pending_list)) { - s_buf = (ipoib_send_NB_SG*) (PVOID) p_item; // TODO: Check this casting if (!b_good_port_state) { // Port is in error state, flush the list ipoib_inc_send_stat( p_port->p_adapter, IP_STAT_DROPPED, 0 ); - __send_complete_net_buffer( - s_buf, NDIS_STATUS_FAILURE, NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, FALSE); + __send_complete_net_buffer( s_buf, NDIS_STATUS_FAILURE, + NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, FALSE); } else { - /* Check the send queue and pend the request if not empty. */ if( p_port->send_mgr.depth == p_port->p_adapter->params.sq_depth ) { @@ -5689,17 +5739,19 @@ ipoib_port_resume( //cl_qlist_check_validity(&p_port->send_mgr.pending_list); if (!continue_sending) { - ASSERT (cl_is_item_in_qlist(&p_port->send_mgr.pending_list, (cl_list_item_t*)(PVOID)s_buf)); + ASSERT( cl_is_item_in_qlist(&p_port->send_mgr.pending_list, + (cl_list_item_t*)(PVOID)s_buf) ); goto Cleanup; } } - p_item = cl_qlist_remove_head( &p_port->send_mgr.pending_list ); } + Cleanup: IPOIB_EXIT( IPOIB_DBG_SEND ); } + //TODO: use s_buf-> directly, instead of useless copies static void @@ -5750,14 +5802,18 @@ __send_cb( { p_free = wc; cl_perf_start( PollSend ); - status = p_port->p_adapter->p_ifc->poll_cq( p_port->ib_mgr.h_send_cq, &p_free, &p_wc ); + status = p_port->p_adapter->p_ifc->poll_cq( p_port->ib_mgr.h_send_cq, + &p_free, + &p_wc ); cl_perf_stop( &p_port->p_adapter->perf, PollSend ); CL_ASSERT( status == IB_SUCCESS || status == IB_NOT_FOUND ); while( p_wc ) { cl_perf_start( SendComp ); - CL_ASSERT( p_wc->status != IB_WCS_SUCCESS || p_wc->wc_type == IB_WC_SEND || p_wc->wc_type == IB_WC_LSO); + CL_ASSERT( p_wc->status != IB_WCS_SUCCESS || + p_wc->wc_type == IB_WC_SEND || p_wc->wc_type == IB_WC_LSO); + s_buf = (ipoib_send_NB_SG*)(uintn_t)p_wc->wr_id; IPOIB_PRINT(TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ("Successfull send completion for NBL=0x%p .\n", s_buf->p_nbl )); @@ -5790,14 +5846,15 @@ __send_cb( } p_netbuffer = s_buf->p_curr_nb; - ipoib_inc_send_stat( p_port->p_adapter, type, NET_BUFFER_DATA_LENGTH(p_netbuffer) ); + ipoib_inc_send_stat( p_port->p_adapter, type, + NET_BUFFER_DATA_LENGTH(p_netbuffer) ); status = NDIS_STATUS_SUCCESS; break; case IB_WCS_WR_FLUSHED_ERR: IPOIB_PRINT(TRACE_LEVEL_INFORMATION, IPOIB_DBG_SEND, ("Flushed send completion.\n") ); - ipoib_inc_send_stat( p_port->p_adapter, IP_STAT_DROPPED, 0 ); + ipoib_inc_send_stat( p_port->p_adapter, IP_STAT_DROPPED, 0 ); status = NDIS_STATUS_RESET_IN_PROGRESS; break; @@ -5807,13 +5864,16 @@ __send_cb( ("Send failed with %s (vendor specific %#x)\n", p_port->p_adapter->p_ifc->get_wc_status_str( p_wc->status ), (int)p_wc->vendor_specific) ); - ipoib_inc_send_stat( p_port->p_adapter, IP_STAT_ERROR, 0 ); + ipoib_inc_send_stat( p_port->p_adapter, IP_STAT_ERROR, 0 ); status = NDIS_STATUS_FAILURE; break; } - __send_complete_net_buffer(s_buf, status, NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, FALSE); + __send_complete_net_buffer( s_buf, + status, + NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, + FALSE ); cl_atomic_dec( &p_port->send_mgr.depth ); @@ -5855,11 +5915,9 @@ static void __endpt_mgr_construct( IN ipoib_port_t* const p_port ) { - IPOIB_ENTER( IPOIB_DBG_INIT ); cl_qmap_init( &p_port->endpt_mgr.mac_endpts ); cl_qmap_init( &p_port->endpt_mgr.lid_endpts ); cl_fmap_init( &p_port->endpt_mgr.gid_endpts, __gid_cmp ); - IPOIB_EXIT( IPOIB_DBG_INIT ); } //TODO Restore CM @@ -5936,19 +5994,22 @@ IN void* p_context ) if( !p_endpt->conn.h_send_qp ) { - ib_status = endpt_cm_create_qp( p_endpt, &p_endpt->conn.h_send_qp ); + ib_status = endpt_cm_create_qp( p_endpt, + &p_endpt->conn.h_send_qp ); if( ib_status != IB_SUCCESS ) { IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Endpt [%p ] CM create QP failed status %#x\n", p_endpt, ib_status ) ); + ("Endpt %p CM create QP failed status %#x\n", + p_endpt, ib_status ) ); } else { ib_status = ipoib_endpt_connect( p_endpt ); if( ib_status != IB_SUCCESS && ib_status != IB_PENDING ) { - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - ("Endpt [ %p ] conn REQ failed status %#x\n", p_endpt, ib_status ) ); + IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + ("Endpt %p conn REQ failed status %#x\n", + p_endpt, ib_status ) ); } } if( ib_status != IB_SUCCESS && ib_status != IB_PENDING ) @@ -5985,7 +6046,7 @@ IN void* p_context ) NdisFreeSpinLock( &p_port->endpt_mgr.conn_lock ); IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, - (" Port [%d] Endpt thread is done\n", p_port->port_num ) ); + (" Port [%d] Endpt_mgr thread is done\n", p_port->port_num ) ); } #endif @@ -6064,15 +6125,19 @@ __endpt_mgr_reset_all( link_state.MediaConnectState = MediaConnectStateDisconnected; link_state.MediaDuplexState = MediaDuplexStateFull; link_state.XmitLinkSpeed = - link_state.RcvLinkSpeed = link_state.RcvLinkSpeed = SET_PORT_RATE_BPS( p_port->p_adapter->port_rate ); + link_state.RcvLinkSpeed = + link_state.RcvLinkSpeed = + SET_PORT_RATE_BPS( p_port->p_adapter->port_rate ); IPOIB_INIT_NDIS_STATUS_INDICATION(&status_indication, p_port->p_adapter->h_adapter, NDIS_STATUS_LINK_STATE, (PVOID)&link_state, sizeof(link_state)); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, ("Indicate DISCONNECT!\n") ); - NdisMIndicateStatusEx(p_port->p_adapter->h_adapter,&status_indication); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + ("Indicate DISCONNECT!\n") ); + NdisMIndicateStatusEx( p_port->p_adapter->h_adapter, + &status_indication ); link_state.MediaConnectState = MediaConnectStateConnected; IPOIB_INIT_NDIS_STATUS_INDICATION(&status_indication, @@ -6080,8 +6145,10 @@ __endpt_mgr_reset_all( NDIS_STATUS_LINK_STATE, (PVOID)&link_state, sizeof(link_state)); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, ("Indicate Connect\n") ); - NdisMIndicateStatusEx(p_port->p_adapter->h_adapter,&status_indication); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + ("Indicate Connect\n") ); + NdisMIndicateStatusEx( p_port->p_adapter->h_adapter, + &status_indication ); // IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, @@ -6184,14 +6251,16 @@ __endpt_mgr_reset_all( KeSetEvent( &p_port->leave_mcast_event, EVENT_INCREMENT, FALSE ); } - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,("p_port->mcast_cnt = %d\n", p_port->mcast_cnt - local_exist)); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("p_port->mcast_cnt = %d\n", p_port->mcast_cnt - local_exist)); /* Destroy all multicast endpoints now that we have released the lock. */ while( cl_qlist_count( &mc_list ) ) { cl_list_item_t *p_item; p_item = cl_qlist_remove_head( &mc_list ); - p_endpt = PARENT_STRUCT(p_item, ipoib_endpt_t, mac_item.pool_item.list_item); + p_endpt = PARENT_STRUCT(p_item, ipoib_endpt_t, + mac_item.pool_item.list_item); cl_obj_destroy( &p_endpt->obj); } @@ -6239,14 +6308,13 @@ __endpt_mgr_remove( if( p_fmap_item != cl_fmap_end( &p_port->endpt_mgr.conn_endpts ) ) { cl_fmap_remove_item( &p_port->endpt_mgr.conn_endpts, - &p_endpt->conn_item ); + &p_endpt->conn_item ); } } #endif if( p_endpt->dlid ) { - cl_qmap_remove_item( &p_port->endpt_mgr.lid_endpts, - &p_endpt->lid_item ); + cl_qmap_remove_item( &p_port->endpt_mgr.lid_endpts, &p_endpt->lid_item ); } cl_obj_unlock( &p_port->obj ); @@ -6544,7 +6612,7 @@ __endpt_mgr_insert_locked( cl_obj_unlock( &p_port->obj ); cl_obj_lock( &p_port->obj ); } - /* __endpt_mgr_insert expects *one* reference to be held when being called. */ + /* __endpt_mgr_insert expects *1* reference to be held when being called */ cl_atomic_inc( &p_port->endpt_rdr ); status= __endpt_mgr_insert( p_port, mac, p_endpt ); cl_atomic_dec( &p_port->endpt_rdr ); @@ -6590,16 +6658,21 @@ __endpt_mgr_insert( p_endpt->mac = mac; key = 0; cl_memcpy( &key, &mac, sizeof(mac_addr_t) ); - p_qitem = cl_qmap_insert( - &p_port->endpt_mgr.mac_endpts, key, &p_endpt->mac_item ); + p_qitem = cl_qmap_insert( &p_port->endpt_mgr.mac_endpts, + key, + &p_endpt->mac_item ); CL_ASSERT( p_qitem == &p_endpt->mac_item ); - p_fitem = cl_fmap_insert( - &p_port->endpt_mgr.gid_endpts, &p_endpt->dgid, &p_endpt->gid_item ); + + p_fitem = cl_fmap_insert( &p_port->endpt_mgr.gid_endpts, + &p_endpt->dgid, + &p_endpt->gid_item ); CL_ASSERT( p_fitem == &p_endpt->gid_item ); + if( p_endpt->dlid ) { - p_qitem = cl_qmap_insert( - &p_port->endpt_mgr.lid_endpts, p_endpt->dlid, &p_endpt->lid_item ); + p_qitem = cl_qmap_insert( &p_port->endpt_mgr.lid_endpts, + p_endpt->dlid, + &p_endpt->lid_item ); CL_ASSERT( p_qitem == &p_endpt->lid_item ); if (p_qitem != &p_endpt->lid_item) { // Since we failed to insert into the list, make sure it is not removed @@ -6630,7 +6703,8 @@ __endpt_mgr_add_bcast( /* Allocate the broadcast endpoint. */ p_endpt = ipoib_endpt_create( &p_mcast_rec->p_member_rec->mgid, - 0 , CL_HTON32(0x00FFFFFF) ); + 0, + CL_HTON32(0x00FFFFFF) ); if( !p_endpt ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -6640,8 +6714,10 @@ __endpt_mgr_add_bcast( /* set reference to transport to be used while is not attached to the port */ p_endpt->is_mcast_listener = TRUE; p_endpt->p_ifc = p_port->p_adapter->p_ifc; - status = ipoib_endpt_set_mcast( p_endpt, p_port->ib_mgr.h_pd, - p_port->port_num, p_mcast_rec ); + status = ipoib_endpt_set_mcast( p_endpt, + p_port->ib_mgr.h_pd, + p_port->port_num, + p_mcast_rec ); if( status != IB_SUCCESS ) { cl_obj_destroy( &p_endpt->obj ); @@ -6678,6 +6754,7 @@ ipoib_port_remove_endpt( /* Remove the endpoint from the maps so further requests don't find it. */ cl_obj_lock( &p_port->obj ); + /* Wait for all readers to finish */ while( p_port->endpt_rdr ) ; @@ -6690,7 +6767,7 @@ ipoib_port_remove_endpt( { p_endpt = PARENT_STRUCT( p_item, ipoib_endpt_t, mac_item ); /* - * The enpoints are *ALWAYS* in both the MAC and GID maps. They are only + * The enpoints are *ALWAYS* in both the MAC and GID maps. They are only * in the LID map if the GID has the same subnet prefix as us. */ cl_fmap_remove_item( @@ -6698,7 +6775,8 @@ ipoib_port_remove_endpt( #if 0 if( p_port->p_adapter->params.cm_enabled ) { - p_fmap_item = cl_fmap_get( &p_port->endpt_mgr.conn_endpts, &p_endpt->dgid ); + p_fmap_item = cl_fmap_get( &p_port->endpt_mgr.conn_endpts, + &p_endpt->dgid ); if( p_fmap_item != cl_fmap_end( &p_port->endpt_mgr.conn_endpts ) ) { @@ -6725,12 +6803,9 @@ ipoib_port_remove_endpt( IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, ("ref type %d ref_cnt %d\n", ref_endpt_track, p_port->obj.ref_cnt) ); #endif - } else - { cl_obj_unlock( &p_port->obj ); - } IPOIB_EXIT( IPOIB_DBG_ENDPT ); } @@ -6819,9 +6894,10 @@ ipoib_port_up( mad_in->class_ver =1; mad_in->mgmt_class = IB_MCLASS_SUBN_LID; - status = p_port->p_adapter->p_ifc->local_mad( - p_port->ib_mgr.h_ca ,p_port->port_num ,mad_in ,mad_out); - + status = p_port->p_adapter->p_ifc->local_mad( p_port->ib_mgr.h_ca, + p_port->port_num, + mad_in, + mad_out ); if( status != IB_SUCCESS ) { ipoib_set_inactive( p_port->p_adapter ); @@ -6834,19 +6910,21 @@ ipoib_port_up( p_port_info = (ib_port_info_t*)(((ib_smp_t*)mad_out)->data); p_port->base_lid = p_pnp_rec->p_port_attr->lid; IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, - ("Received port info: link width = %d.\n", + ("Received port info: link width = %d.\n", p_port_info->link_width_active) ); - p_port->ib_mgr.rate = - ib_port_info_compute_rate( p_port_info ); + p_port->ib_mgr.rate = ib_port_info_compute_rate( p_port_info ); ipoib_set_rate( p_port->p_adapter, - p_port_info->link_width_active, - ib_port_info_get_link_speed_active( p_port_info ) ); + p_port_info->link_width_active, + ib_port_info_get_link_speed_active( p_port_info ) ); status = __port_get_bcast( p_port ); if (status != IB_SUCCESS) + { IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, - (" __port_get_bcast returned %s\n",p_port->p_adapter->p_ifc->get_err_str( status ))); + (" __port_get_bcast returned %s\n", + p_port->p_adapter->p_ifc->get_err_str( status ))); + } up_done: if( status != IB_SUCCESS ) @@ -6883,8 +6961,7 @@ __endpt_mgr_add_local( IPOIB_ENTER( IPOIB_DBG_INIT ); ib_gid_set_default( &gid, p_port->p_adapter->guids.port_guid.guid ); - p_endpt = ipoib_endpt_create( - &gid, p_port_info->base_lid, p_port->ib_mgr.qpn ); + p_endpt = ipoib_endpt_create( &gid, p_port_info->base_lid, p_port->ib_mgr.qpn ); if( !p_endpt ) { p_port->p_adapter->hung = TRUE; @@ -6897,7 +6974,8 @@ __endpt_mgr_add_local( av_attr.port_num = p_port->port_num; av_attr.sl = 0; IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, - (" av_attr.dlid = p_port_info->base_lid = %d\n", cl_ntoh16( p_port_info->base_lid ) )); + (" av_attr.dlid = p_port_info->base_lid = %d\n", + cl_ntoh16( p_port_info->base_lid ) )); av_attr.dlid = p_port_info->base_lid; av_attr.static_rate = p_port->ib_mgr.rate; av_attr.path_bits = 0; @@ -6908,19 +6986,21 @@ __endpt_mgr_add_local( cl_obj_destroy( &p_endpt->obj ); IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("ib_create_av for local endpoint returned %s\n", - p_port->p_adapter->p_ifc->get_err_str( status )) ); + p_port->p_adapter->p_ifc->get_err_str( status )) ); return status; } /* __endpt_mgr_insert expects *one* reference to be held. */ cl_atomic_inc( &p_port->endpt_rdr ); - status = __endpt_mgr_insert( p_port, p_port->p_adapter->params.conf_mac, p_endpt ); + status = __endpt_mgr_insert( p_port, + p_port->p_adapter->params.conf_mac, + p_endpt ); cl_atomic_dec( &p_port->endpt_rdr ); if( status != IB_SUCCESS ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("__endpt_mgr_insert for local endpoint returned %s\n", - p_port->p_adapter->p_ifc->get_err_str( status )) ); + p_port->p_adapter->p_ifc->get_err_str( status )) ); return status; } @@ -6931,8 +7011,6 @@ __endpt_mgr_add_local( } - - static ib_api_status_t __port_get_bcast( IN ipoib_port_t* const p_port ) @@ -6969,8 +7047,9 @@ __port_get_bcast( /* reference the object for the multicast query. */ ipoib_port_ref( p_port, ref_get_bcast ); - status = p_port->p_adapter->p_ifc->query( - p_port->p_adapter->h_al, &query, &p_port->ib_mgr.h_query ); + status = p_port->p_adapter->p_ifc->query( p_port->p_adapter->h_al, + &query, + &p_port->ib_mgr.h_query ); if( status != IB_SUCCESS ) { ipoib_port_deref( p_port, ref_get_bcast ); @@ -7013,7 +7092,7 @@ __bcast_get_cb( IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, ("status of request %s\n", - p_port->p_adapter->p_ifc->get_err_str( status )) ); + p_port->p_adapter->p_ifc->get_err_str( status )) ); switch( status ) { @@ -7159,7 +7238,7 @@ __port_create_bcast( mcast_req.member_rec.mgid.raw[4] = (uint8_t) (p_port->p_adapter->guids.port_guid.pkey >> 8); mcast_req.member_rec.mgid.raw[5] = (uint8_t) p_port->p_adapter->guids.port_guid.pkey; ib_gid_set_default( &mcast_req.member_rec.port_gid, - p_port->p_adapter->guids.port_guid.guid ); + p_port->p_adapter->guids.port_guid.guid ); /* * IPOIB spec requires that the QKEY have the MSb set so that the QKEY * from the QP is used rather than the QKEY in the send WR. @@ -7293,7 +7372,8 @@ __bcast_cb( if( p_mcast_rec->status == IB_SUCCESS ) { ipoib_port_ref(p_port, ref_leave_mcast); - p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, __leave_error_mcast_cb ); + p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, + __leave_error_mcast_cb ); } KeSetEvent( &p_port->sa_event, EVENT_INCREMENT, FALSE ); ipoib_port_deref( p_port, ref_bcast_inv_state ); @@ -7388,7 +7468,8 @@ __bcast_cb( ("__endpt_mgr_add_bcast returned %s\n", p_port->p_adapter->p_ifc->get_err_str( status )) ); ipoib_port_ref(p_port, ref_leave_mcast); - status = p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, __leave_error_mcast_cb ); + status = p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, + __leave_error_mcast_cb ); CL_ASSERT( status == IB_SUCCESS ); goto err; } @@ -7455,13 +7536,13 @@ err: ipoib_port_deref( p_port, ref_join_bcast ); return; } -#if 0 //CM +#if IPOIB_CM //CM if( p_port->p_adapter->params.cm_enabled && !p_port->p_local_endpt->conn.h_cm_listen ) { if( ipoib_port_listen( p_port ) != IB_SUCCESS ) { - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("Port CM Listen failed\n" ) ); /*keep going with UD only */ p_port->p_adapter->params.cm_enabled = FALSE; @@ -7563,6 +7644,7 @@ __ib_mgr_activate( /* Transition to a passive level thread. */ + ib_api_status_t ipoib_port_join_mcast( IN ipoib_port_t* const p_port, @@ -7597,10 +7679,12 @@ ipoib_port_join_mcast( case NDIS_STATUS_PENDING: IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, (" PENDING\n") ); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,("__endpt_mgr_ref called for %p\n", p_endpt)); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("__endpt_mgr_ref called for %p\n", p_endpt)); return IB_SUCCESS; } - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,("__endpt_mgr_ref called for %p\n", p_endpt)); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("__endpt_mgr_ref called for %p\n", p_endpt)); /* * Issue the mcast request, using the parameters of the broadcast group. * This allows us to do a create request that should always succeed since @@ -7653,8 +7737,9 @@ ipoib_port_join_mcast( * mcast callback is invoked, it would not find the corresponding endpoint * and would be undone. */ - p_endpt = ipoib_endpt_create( - &mcast_req.member_rec.mgid, 0, CL_HTON32(0x00FFFFFF) ); + p_endpt = ipoib_endpt_create( &mcast_req.member_rec.mgid, + 0, + CL_HTON32(0x00FFFFFF) ); if( !p_endpt ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -7722,11 +7807,14 @@ __mcast_cb( { ipoib_port_ref(p_port, ref_leave_mcast); - p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, __leave_error_mcast_cb ); + p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, + __leave_error_mcast_cb ); } ipoib_port_deref( p_port, ref_mcast_inv_state ); - IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST ,("Invalid state - Aborting.\n") ); - IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT ,("Invalid state - Aborting.\n") ); + IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("Invalid state - Aborting.\n") ); + IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + ("Invalid state - Aborting.\n") ); cl_spinlock_acquire(&p_port->send_lock); //ipoib_port_resume(p_port , FALSE); @@ -7740,7 +7828,7 @@ __mcast_cb( cl_obj_unlock( &p_port->obj ); IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, ("Multicast join request failed with status %s.\n", - p_port->p_adapter->p_ifc->get_err_str( p_mcast_rec->status )) ); + p_port->p_adapter->p_ifc->get_err_str( p_mcast_rec->status )) ); /* Flag the adapter as hung. */ p_port->p_adapter->hung =TRUE; ipoib_port_deref( p_port, ref_mcast_req_failed ); @@ -7748,8 +7836,8 @@ __mcast_cb( return; } - p_item = cl_fmap_get( - &p_port->endpt_mgr.gid_endpts, &p_mcast_rec->p_member_rec->mgid ); + p_item = cl_fmap_get( &p_port->endpt_mgr.gid_endpts, + &p_mcast_rec->p_member_rec->mgid ); if( p_item == cl_fmap_end( &p_port->endpt_mgr.gid_endpts ) ) { /* @@ -7762,7 +7850,8 @@ __mcast_cb( ("Failed to find endpoint for update.\n") ); ipoib_port_ref(p_port, ref_leave_mcast); - p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, __leave_error_mcast_cb ); + p_port->p_adapter->p_ifc->leave_mcast( p_mcast_rec->h_mcast, + __leave_error_mcast_cb ); ipoib_port_deref( p_port, ref_mcast_no_endpt ); IPOIB_EXIT( IPOIB_DBG_MCAST ); return; @@ -7772,14 +7861,16 @@ __mcast_cb( p_endpt->p_ifc = p_port->p_adapter->p_ifc; /* Setup the endpoint for use. */ - status = ipoib_endpt_set_mcast( - p_endpt, p_port->ib_mgr.h_pd, p_port->port_num, p_mcast_rec ); + status = ipoib_endpt_set_mcast( p_endpt, + p_port->ib_mgr.h_pd, + p_port->port_num, + p_mcast_rec ); if( status != IB_SUCCESS ) { cl_obj_unlock( &p_port->obj ); IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_MCAST, ("ipoib_endpt_set_mcast returned %s.\n", - p_port->p_adapter->p_ifc->get_err_str( status )) ); + p_port->p_adapter->p_ifc->get_err_str( status )) ); /* Flag the adapter as hung. */ p_port->p_adapter->hung = TRUE; ipoib_port_deref( p_port, ref_mcast_av_failed ); @@ -7798,7 +7889,8 @@ __mcast_cb( /* Try to send all pending sends. */ cl_spinlock_acquire( &p_port->send_lock ); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, ("Calling ipoib_port_resume from mcast_cb\n")); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, + ("Calling ipoib_port_resume from mcast_cb, xmit pending sends\n")); ipoib_port_resume(p_port , FALSE); cl_spinlock_release( &p_port->send_lock ); @@ -7818,7 +7910,8 @@ ipoib_leave_mcast_cb( p_port = (ipoib_port_t*)context; - IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_MCAST,("p_port->mcast_cnt = %d\n", p_port->mcast_cnt)); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_MCAST, + ("p_port->mcast_cnt %d\n", p_port->mcast_cnt)); ipoib_port_deref( p_port, ref_leave_mcast); //It happens @@ -8197,12 +8290,11 @@ ipoib_port_cancel_xmit( //TODO don't use DISPATCH LEVEL - __send_complete_net_buffer( - s_buf, NDIS_STATUS_SEND_ABORTED ,NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, TRUE); + __send_complete_net_buffer( s_buf, NDIS_STATUS_SEND_ABORTED, + NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL, TRUE); } } - IPOIB_EXIT( IPOIB_DBG_SEND ); } diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.h b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.h index bec11309..fa1835c9 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.h +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.h @@ -85,8 +85,11 @@ //Used in SEND flow -#define IPOIB_GET_NET_BUFFER_LIST_REF_COUNT(_NetBufferList) ((_NetBufferList)->MiniportReserved[0]) -#define IPOIB_DEC_NET_BUFFER_LIST_REF_COUNT(_NetBufferList) (*(PULONG)&(_NetBufferList)->MiniportReserved[0])-- +#define IPOIB_GET_NET_BUFFER_LIST_REF_COUNT(_NetBufferList) \ + ((_NetBufferList)->MiniportReserved[0]) + +#define IPOIB_DEC_NET_BUFFER_LIST_REF_COUNT(_NetBufferList) \ + (*(PULONG)&(_NetBufferList)->MiniportReserved[0])-- @@ -328,7 +331,6 @@ typedef struct _ipoib_buf_mgr * than can fit in the local data segments). *********/ - typedef enum _ipoib_pkt_type { PKT_TYPE_UCAST, @@ -398,6 +400,8 @@ typedef struct _ipoib_recv_desc * The pool item is always first to allow casting form a cl_pool_item_t or * cl_list_item_t to the descriptor. *********/ + + typedef struct __ipoib_send_wr { ib_send_wr_t wr; @@ -451,29 +455,24 @@ typedef struct _ipoib_send_desc typedef struct _ipoib_recv_mgr { int32_t depth; - NET_BUFFER_LIST **recv_NBL_array; - cl_qlist_t done_list; } ipoib_recv_mgr_t; /* * FIELDS * depth -* Current number of WRs posted. -* -* p_head -* Pointer to work completion in descriptor at the head of the QP. -* -* p_tail -* Pointer to the work completion in the descriptor at the tail of the QP. +* Current number of RX WRs posted. * * recv_NBL_array -* Array of pointers to NDIS_PACKET used to indicate receives. +* Array of NBLs (NET_BUFFER_LIST) pointers used to indicate receives. * * done_list -* List of receive descriptors that need to be indicated to NDIS. +* List of receive descriptors (ipoib_desc_t) polled from the RX CQ which +* are used to construct the recv_NBL_array, which is then used to indicated +* received packets to NDIS 6. *********/ + #if 0 class ItemListElement: public cl_list_item_t { public: @@ -610,7 +609,6 @@ typedef struct _ipoib_port KDPC recv_dpc; ipoib_endpt_mgr_t endpt_mgr; - endpt_buf_mgr_t cm_buf_mgr; endpt_recv_mgr_t cm_recv_mgr; @@ -685,6 +683,7 @@ public: ipoib_send_NB_SG(): p_port(NULL), p_nbl (NULL), p_curr_nb(NULL), p_endpt(NULL), p_send_buf(NULL), p_sgl(NULL) {}; virtual ~ipoib_send_NB_SG(); #endif + typedef struct ipoib_send_NB_SG_t { //private: //TODO make data private cl_pool_item_t pool_item; @@ -771,11 +770,11 @@ ipoib_process_sg_list( IN PVOID Context); inline void ipoib_port_ref( - IN ipoib_port_t * p_port, + IN ipoib_port_t * p_port, IN int type); inline void ipoib_port_deref( - IN ipoib_port_t * p_port, + IN ipoib_port_t * p_port, IN int type); #if 0 @@ -929,7 +928,8 @@ static inline VOID NdisMSendNetBufferListsCompleteX( if (NET_BUFFER_LIST_STATUS(NetBufferLists) != NDIS_STATUS_SUCCESS) { IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ALL, - ("NBL completed with error %d to NDIS\n", NET_BUFFER_LIST_STATUS(NetBufferLists))); + ("NBL completed with error %d to NDIS\n", + NET_BUFFER_LIST_STATUS(NetBufferLists))); } IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ("Completing NBL=%x, g_NBL=%d, g_NBL_completed=%d \n", NetBufferLists, g_NBL, g_NBL_complete) );