From 466dfaf6bc7d205802623798b7af8129ad0aa346 Mon Sep 17 00:00:00 2001 From: tzachid Date: Tue, 17 Nov 2009 11:31:39 +0000 Subject: [PATCH] [IPoIB NDIS 6.0 CM] Code cleanup Fixed printouts Bugfix: p_sgl member of s_buf should be initialized during error flow (mlnx 4995) git-svn-id: svn://openib.tc.cornell.edu/gen1@2561 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- .../ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp | 174 +++++++----------- 1 file changed, 69 insertions(+), 105 deletions(-) diff --git a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp index c336a70d..775d106e 100644 --- a/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp +++ b/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp @@ -327,26 +327,20 @@ __send_mgr_destroy( static NDIS_STATUS __send_gen( - IN ipoib_port_t* const p_port, IN ipoib_send_NB_SG * s_buf, - IN SCATTER_GATHER_LIST *p_sgl, IN INT lso_data_index, - IN NET_BUFFER *p_netbuf, IN UINT lso_header_size OPTIONAL); static NDIS_STATUS __send_mgr_filter_ip( - IN ipoib_port_t* const p_port, IN const eth_hdr_t* const p_eth_hdr, IN MDL* p_mdl, IN size_t buf_len, - IN SCATTER_GATHER_LIST *p_sgl, - IN OUT ipoib_send_NB_SG* const s_buf, - IN NET_BUFFER *p_netbuf); + IN OUT ipoib_send_NB_SG* const s_buf); static NDIS_STATUS __send_mgr_filter_igmp_v2( - IN ipoib_port_t* const p_port, + IN ipoib_port_t* const p_port, IN const ip_hdr_t* const p_ip_hdr, IN size_t iph_options_size, IN MDL* p_mdl, @@ -354,7 +348,6 @@ __send_mgr_filter_igmp_v2( static NDIS_STATUS __send_mgr_filter_udp( - IN ipoib_port_t* const p_port, IN const ip_hdr_t* const p_ip_hdr, IN MDL* p_mdl, IN size_t buf_len, @@ -362,7 +355,6 @@ __send_mgr_filter_udp( static NDIS_STATUS __send_mgr_filter_dhcp( - IN ipoib_port_t* const p_port, IN const udp_hdr_t* const p_udp_hdr, IN MDL* p_mdl, IN size_t buf_len, @@ -370,7 +362,6 @@ __send_mgr_filter_dhcp( static NDIS_STATUS __send_mgr_filter_arp( - IN ipoib_port_t* const p_port, IN const eth_hdr_t* const p_eth_hdr, IN MDL* p_mdl, IN size_t buf_len, @@ -392,12 +383,9 @@ __send_mgr_queue( static NDIS_STATUS __build_send_desc( - IN ipoib_port_t* const p_port, IN eth_hdr_t* const p_eth_hdr, IN MDL* const p_mdl, IN const size_t mdl_len, - IN SCATTER_GATHER_LIST *p_sgl, - IN NET_BUFFER *p_netbuf, IN ipoib_send_NB_SG *s_buf); @@ -418,7 +406,6 @@ static NDIS_STATUS __build_lso_desc( IN ipoib_port_t* const p_port, IN ULONG mss, - IN SCATTER_GATHER_LIST *p_sgl, IN int32_t hdr_idx, IN PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO p_lso_info, IN NET_BUFFER *p_netbuf); @@ -3314,13 +3301,10 @@ __send_mgr_destroy( static NDIS_STATUS __send_mgr_filter( - IN ipoib_port_t* const p_port, IN const eth_hdr_t* const p_eth_hdr, IN MDL* const p_mdl, IN size_t buf_len, - IN SCATTER_GATHER_LIST *p_sgl, - IN OUT ipoib_send_NB_SG *s_buf, - IN NET_BUFFER *p_netbuf) + IN OUT ipoib_send_NB_SG *s_buf) { NDIS_STATUS status; @@ -3334,22 +3318,20 @@ __send_mgr_filter( * We already checked the ethernet header length, so we know it's safe * to decrement the buf_len without underflowing. */ - ipoib_send_desc_t *p_desc = p_port->p_desc; + ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; buf_len -= sizeof(eth_hdr_t); switch( p_eth_hdr->type ) { case ETH_PROT_TYPE_IP: cl_perf_start( FilterIp ); - status = __send_mgr_filter_ip( - p_port, p_eth_hdr, p_mdl, buf_len, p_sgl, s_buf, p_netbuf); + status = __send_mgr_filter_ip( p_eth_hdr, p_mdl, buf_len, s_buf ); cl_perf_stop( &p_port->p_adapter->perf, FilterIp ); break; case ETH_PROT_TYPE_ARP: cl_perf_start( FilterArp ); - status = __send_mgr_filter_arp( - p_port, p_eth_hdr, p_mdl, buf_len, s_buf ); + status = __send_mgr_filter_arp( p_eth_hdr, p_mdl, buf_len, s_buf ); p_desc->send_dir = SEND_UD_QP; cl_perf_stop( &p_port->p_adapter->perf, FilterArp ); break; @@ -3362,7 +3344,7 @@ __send_mgr_filter( p_desc->send_dir = SEND_UD_QP; cl_perf_start( SendGen ); - status = __send_gen( p_port, s_buf, p_sgl, 0, p_netbuf,0 ); + status = __send_gen( s_buf, 0, 0 ); cl_perf_stop( &p_port->p_adapter->perf, SendGen ); break; } @@ -3822,9 +3804,11 @@ ipoib_process_sg_list_real( } s_buf->p_sgl = NULL; } - else + else //We got this Net Buffer and its SG list directly from NDIS { ASSERT(s_buf->p_sgl ==NULL); + s_buf->p_sgl = p_sgl; + cl_perf_start( SendMgrQueue ); if ( ETH_IS_MULTICAST( p_eth_hdr->dst.addr ) && p_eth_hdr->type == ETH_PROT_TYPE_IP && @@ -3887,13 +3871,11 @@ mc_end: { /* Queue net buffer list. */ cl_perf_start( QueuePacket ); - s_buf->p_sgl = p_sgl; cl_qlist_insert_tail( &p_port->send_mgr.pending_list, (cl_list_item_t*)s_buf ); - //cl_dbg_out("Inserting %x NB first time to the pending list\n", p_netbuf); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ("Inserting %p NB first time to the pending list\n", p_netbuf)); cl_perf_stop( &p_port->p_adapter->perf, QueuePacket ); -// cl_dbg_out("Fall into pending flow \n"); ++g_ipoib_send_SG_pending; ret = false; goto send_end; @@ -3907,7 +3889,6 @@ mc_end: */ //TODO - check previous comment ! cl_perf_start( ProcessFailedSends ); - __send_complete_net_buffer(s_buf, NDIS_STATUS_SUCCESS, complete_flags, TRUE); cl_perf_stop( &p_port->p_adapter->perf, ProcessFailedSends ); //++g_ipoib_send_SG_failed; @@ -3916,7 +3897,7 @@ mc_end: } } cl_perf_start( BuildSendDesc ); - status = __build_send_desc( p_port, p_eth_hdr, p_mdl, mdl_len, p_sgl, p_netbuf, s_buf ); + status = __build_send_desc( p_eth_hdr, p_mdl, mdl_len, s_buf ); cl_perf_stop( &p_port->p_adapter->perf, BuildSendDesc ); if( status != NDIS_STATUS_SUCCESS ) @@ -3931,11 +3912,8 @@ mc_end: /* Post the WR. */ cl_perf_start( PostSend ); -// cl_dbg_out("sending packet with wr-id =0x%x\n",p_net_buffer_list ); + IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, ("sending packet with wr-id =0x%p\n",p_net_buffer_list )); - // IF this value is NULL, this netbuffer was already sent and when working on its NBL it will be not sent again - ASSERT(s_buf->p_sgl == NULL); - s_buf->p_sgl = p_sgl; ib_status = p_port->p_adapter->p_ifc->post_send( p_port->ib_mgr.h_qp, &(p_port->p_desc->send_wr[0].wr), &p_wr_failed ); ret = true; cl_perf_stop( &p_port->p_adapter->perf, PostSend ); @@ -3992,11 +3970,8 @@ ipoib_process_sg_list( static NDIS_STATUS __send_gen( - IN ipoib_port_t* const p_port, IN ipoib_send_NB_SG * s_buf, - IN SCATTER_GATHER_LIST *p_sgl, IN INT lso_data_index, - IN NET_BUFFER *p_netbuf, IN UINT lso_header_size OPTIONAL) { NDIS_STATUS status; @@ -4008,6 +3983,8 @@ __send_gen( IPOIB_ENTER( IPOIB_DBG_SEND ); + PSCATTER_GATHER_LIST p_sgl = s_buf->p_sgl; + if( !p_sgl ) { ASSERT( p_sgl ); @@ -4015,7 +3992,7 @@ __send_gen( ("Failed to get SGL from packet.\n") ); return NDIS_STATUS_FAILURE; } - ipoib_send_desc_t *p_desc = p_port->p_desc; + ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; /* Remember that one of the DS entries is reserved for the IPoIB header. */ if( ( p_sgl->NumberOfElements >= MAX_SEND_SGE || @@ -4027,11 +4004,11 @@ __send_gen( 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; - if( !p_port->p_adapter->params.cm_enabled ) + if( !s_buf->p_port->p_adapter->params.cm_enabled ) { cl_perf_start( SendCopy ); - status = __send_copy( p_port, s_buf, lso_header_size ); - cl_perf_stop( &p_port->p_adapter->perf, SendCopy ); + status = __send_copy( s_buf->p_port, s_buf, lso_header_size ); + cl_perf_stop( &s_buf->p_port->p_adapter->perf, SendCopy ); } IPOIB_EXIT( IPOIB_DBG_SEND ); return status; @@ -4042,7 +4019,7 @@ __send_gen( * or part of it. */ i = 0; - DataOffset= (ULONG)(NET_BUFFER_CURRENT_MDL_OFFSET(p_netbuf)); + DataOffset= (ULONG)(NET_BUFFER_CURRENT_MDL_OFFSET(s_buf->p_curr_nb)); if( lso_data_index ) { /* we have an LSO packet */ @@ -4059,7 +4036,7 @@ __send_gen( p_sgl->Elements[0].Address.QuadPart + lso_header_size; p_desc->send_wr[0].local_ds[j].length = p_sgl->Elements[0].Length - lso_header_size; - p_desc->send_wr[0].local_ds[j].lkey = p_port->ib_mgr.lkey; + p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey; /* Set the number of data segments. */ p_desc->send_wr[0].wr.num_ds = 1; return NDIS_STATUS_SUCCESS; @@ -4077,7 +4054,7 @@ __send_gen( p_sgl->Elements[i].Address.QuadPart + offset + DataOffset; p_desc->send_wr[0].local_ds[j].length = p_sgl->Elements[i].Length - offset - DataOffset; - p_desc->send_wr[0].local_ds[j].lkey = p_port->ib_mgr.lkey; + p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey; i++; j++; break; @@ -4088,7 +4065,7 @@ __send_gen( { p_desc->send_wr[0].local_ds[j].vaddr = p_sgl->Elements[i].Address.QuadPart; p_desc->send_wr[0].local_ds[j].length = p_sgl->Elements[i].Length; - p_desc->send_wr[0].local_ds[j].lkey = p_port->ib_mgr.lkey; + p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey; i++; j++; } @@ -4104,13 +4081,10 @@ __send_gen( static NDIS_STATUS __send_mgr_filter_ip( - IN ipoib_port_t* const p_port, IN const eth_hdr_t* const p_eth_hdr, IN MDL* p_mdl, IN size_t buf_len, - IN SCATTER_GATHER_LIST *p_sgl, - IN ipoib_send_NB_SG *s_buf, - IN NET_BUFFER *p_netbuf) + IN ipoib_send_NB_SG *s_buf ) { NDIS_STATUS status; ip_hdr_t *p_ip_hdr; @@ -4124,7 +4098,7 @@ __send_mgr_filter_ip( IPOIB_ENTER( IPOIB_DBG_SEND ); - ipoib_send_desc_t *p_desc = p_port->p_desc; + ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; if( !buf_len ) { cl_perf_start( QueryIp ); @@ -4162,8 +4136,7 @@ __send_mgr_filter_ip( case IP_PROT_UDP: cl_perf_start( FilterUdp ); - status = __send_mgr_filter_udp( - p_port, 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 */ @@ -4195,7 +4168,7 @@ __send_mgr_filter_ip( We anyway pass it to __send_mgr_filter_igmp_v2(). */ status = - __send_mgr_filter_igmp_v2( p_port, p_ip_hdr, iph_options_size, p_mdl, buf_len ); + __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; @@ -4205,7 +4178,7 @@ __send_mgr_filter_ip( break; } - if( !p_port->p_adapter->params.cm_enabled ) + if( !s_buf->p_port->p_adapter->params.cm_enabled ) { p_desc->send_dir = SEND_UD_QP; goto send_gen; @@ -4217,7 +4190,7 @@ __send_mgr_filter_ip( if( p_desc->send_dir == SEND_UD_QP ) { ip_packet_len = cl_ntoh16( p_ip_hdr->length ); - if( ip_packet_len > p_port->p_adapter->params.payload_mtu ) + if( ip_packet_len > s_buf->p_port->p_adapter->params.payload_mtu ) { //TODO: NDIS60 #if 0 @@ -4231,7 +4204,7 @@ __send_mgr_filter_ip( send_gen: cl_perf_start( SendTcp ); - status = __send_gen( p_port, s_buf, p_sgl, 0, p_netbuf,0 ); + status = __send_gen( s_buf, 0, 0 ); cl_perf_stop( &p_port->p_adapter->perf, SendTcp ); IPOIB_EXIT( IPOIB_DBG_SEND ); @@ -4368,7 +4341,6 @@ __send_mgr_filter_igmp_v2( static NDIS_STATUS __send_mgr_filter_udp( - IN ipoib_port_t* const p_port, IN const ip_hdr_t* const p_ip_hdr, IN MDL* p_mdl, IN size_t buf_len, @@ -4398,7 +4370,7 @@ __send_mgr_filter_udp( ("Failed to query UDP header buffer.\n") ); return NDIS_STATUS_FAILURE; } - cl_perf_stop( &p_port->p_adapter->perf, QueryUdp ); + cl_perf_stop( &s_buf->p_port->p_adapter->perf, QueryUdp ); } else { @@ -4434,7 +4406,7 @@ __send_mgr_filter_udp( /* Allocate our scratch buffer. */ s_buf->p_send_buf = (send_buf_t*) - ExAllocateFromNPagedLookasideList( &p_port->buf_mgr.send_buf_list ); + ExAllocateFromNPagedLookasideList( &s_buf->p_port->buf_mgr.send_buf_list ); if( !s_buf->p_send_buf ) { IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, @@ -4447,8 +4419,7 @@ __send_mgr_filter_udp( &s_buf->p_send_buf->ip.prot.udp.hdr, p_udp_hdr, sizeof(udp_hdr_t) ); cl_perf_start( FilterDhcp ); - status = __send_mgr_filter_dhcp( - p_port, p_udp_hdr, p_mdl, buf_len, s_buf ); + status = __send_mgr_filter_dhcp( p_udp_hdr, p_mdl, buf_len, s_buf ); cl_perf_stop( &p_port->p_adapter->perf, FilterDhcp ); IPOIB_EXIT( IPOIB_DBG_SEND ); @@ -4470,7 +4441,6 @@ unsigned short ipchksum(unsigned short *ip, int len) static NDIS_STATUS __send_mgr_filter_dhcp( - IN ipoib_port_t* const p_port, IN const udp_hdr_t* const p_udp_hdr, IN NDIS_BUFFER* p_mdl, IN size_t buf_len, @@ -4485,7 +4455,7 @@ __send_mgr_filter_dhcp( IPOIB_ENTER( IPOIB_DBG_SEND ); - ipoib_send_desc_t *p_desc = p_port->p_desc; + ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; if( !buf_len ) { @@ -4562,7 +4532,7 @@ __send_mgr_filter_dhcp( { /* do we need to replace it ? len eq ETH MAC sz 'and' MAC is mine */ if( p_cid[1] == HW_ADDR_LEN+1 && !cl_memcmp( &p_cid[3], - &p_port->p_adapter->params.conf_mac.addr, HW_ADDR_LEN ) ) + &s_buf->p_port->p_adapter->params.conf_mac.addr, HW_ADDR_LEN ) ) { /* Make sure there's room to extend it. 23 is the size of * the CID option for IPoIB. @@ -4611,9 +4581,9 @@ __send_mgr_filter_dhcp( CL_ASSERT( p_cid[1] == 21 ); p_cid[23]= DHCP_OPT_END; - ib_gid_set_default( &gid, p_port->p_adapter->guids.port_guid.guid ); + ib_gid_set_default( &gid, s_buf->p_port->p_adapter->guids.port_guid.guid ); cl_memcpy( &p_cid[7], &gid, sizeof(ib_gid_t) ); - cl_memcpy( &p_cid[3], &p_port->ib_mgr.qpn, sizeof(p_port->ib_mgr.qpn) ); + cl_memcpy( &p_cid[3], &s_buf->p_port->ib_mgr.qpn, sizeof(s_buf->p_port->ib_mgr.qpn) ); p_ib_dhcp->htype = DHCP_HW_TYPE_IB; /* update lengths to include any change we made */ @@ -4644,7 +4614,7 @@ __send_mgr_filter_dhcp( 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].lkey = p_port->ib_mgr.lkey; + 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; IPOIB_EXIT( IPOIB_DBG_SEND ); @@ -4654,7 +4624,6 @@ __send_mgr_filter_dhcp( static NDIS_STATUS __send_mgr_filter_arp( - IN ipoib_port_t* const p_port, IN const eth_hdr_t* const p_eth_hdr, IN MDL* p_mdl, IN size_t buf_len, @@ -4667,7 +4636,7 @@ __send_mgr_filter_arp( IPOIB_ENTER( IPOIB_DBG_SEND ); - ipoib_send_desc_t *p_desc = p_port->p_desc; + ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; if( !buf_len ) { @@ -4709,7 +4678,7 @@ __send_mgr_filter_arp( /* Allocate our scratch buffer. */ ASSERT(s_buf->p_send_buf == NULL); s_buf->p_send_buf = (send_buf_t*) - NdisAllocateFromNPagedLookasideList( &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, @@ -4725,7 +4694,7 @@ __send_mgr_filter_arp( p_ib_arp->prot_size = p_arp->prot_size; p_ib_arp->op = p_arp->op; - ipoib_addr_set_qpn( &p_ib_arp->src_hw, p_port->ib_mgr.qpn ); + ipoib_addr_set_qpn( &p_ib_arp->src_hw, s_buf->p_port->ib_mgr.qpn ); #if 0 if( p_port->p_adapter->params.cm_enabled ) @@ -4735,13 +4704,13 @@ __send_mgr_filter_arp( #endif ib_gid_set_default( &p_ib_arp->src_hw.gid, - 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( p_port, p_arp->dst_hw, + 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 ) { @@ -4819,7 +4788,7 @@ __send_mgr_filter_arp( p_desc->send_wr[0].local_ds[1].vaddr = cl_get_physaddr( p_ib_arp ); p_desc->send_wr[0].local_ds[1].length = sizeof(ipoib_arp_pkt_t); - p_desc->send_wr[0].local_ds[1].lkey = p_port->ib_mgr.lkey; + 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_wr[0].wr.p_next = NULL; @@ -4888,12 +4857,9 @@ __send_mgr_queue( static NDIS_STATUS __build_send_desc( - IN ipoib_port_t* const p_port, IN eth_hdr_t* const p_eth_hdr, IN MDL* const p_mdl, IN const size_t mdl_len, - IN SCATTER_GATHER_LIST *p_sgl, - IN NET_BUFFER *p_netbuf, IN ipoib_send_NB_SG *s_buf) { NDIS_STATUS status; @@ -4906,14 +4872,14 @@ __build_send_desc( IPOIB_ENTER( IPOIB_DBG_SEND ); - ipoib_send_desc_t *p_desc = p_port->p_desc; + ipoib_send_desc_t *p_desc = s_buf->p_port->p_desc; /* Format the send descriptor. */ PVOID* ppTemp = &NET_BUFFER_LIST_INFO(s_buf->p_nbl, TcpIpChecksumNetBufferListInfo); p_checksum_list_info = (PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO) ((PULONG)ppTemp); // Calculate LSO - if( p_port->p_adapter->params.lso ) { + if( s_buf->p_port->p_adapter->params.lso ) { p_lso_info = (PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO) (PULONG) &NET_BUFFER_LIST_INFO(s_buf->p_nbl, TcpLargeSendNetBufferListInfo); @@ -4921,7 +4887,7 @@ __build_send_desc( ULONG LsoType = p_lso_info->Transmit.Type; mss = p_lso_info->LsoV1Transmit.MSS; - ULONG PacketLength = NET_BUFFER_DATA_LENGTH(p_netbuf); + ULONG PacketLength = NET_BUFFER_DATA_LENGTH(s_buf->p_curr_nb); if (PacketLength < mss) { ASSERT(FALSE); return NDIS_STATUS_INVALID_PACKET; @@ -4936,18 +4902,18 @@ __build_send_desc( } /* Format the send descriptor. */ - hdr_idx = cl_atomic_inc( &p_port->hdr_idx ); - hdr_idx &= (p_port->p_adapter->params.sq_depth - 1); - ASSERT( hdr_idx < p_port->p_adapter->params.sq_depth ); - p_port->hdr[hdr_idx].type = p_eth_hdr->type; - p_port->hdr[hdr_idx].resv = 0; + 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( &p_port->hdr[hdr_idx] ); + 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 = p_port->ib_mgr.lkey; + 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; - //Set this value to 0 + //Init send buffer to 0 s_buf->p_send_buf = NULL; @@ -4956,7 +4922,7 @@ __build_send_desc( ASSERT( mss == (p_lso_info->LsoV1Transmit.MSS & p_lso_info->LsoV2Transmit.MSS)); //ASSERT ( (mss & (1<<20)) == mss); - status = __build_lso_desc( p_port, mss, p_sgl, hdr_idx, p_lso_info, p_netbuf); + 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, @@ -4969,8 +4935,7 @@ __build_send_desc( { uint32_t i; cl_perf_start( SendMgrFilter ); - status = __send_mgr_filter( - p_port, p_eth_hdr, p_mdl, mdl_len,p_sgl, s_buf, p_netbuf ); + status = __send_mgr_filter( p_eth_hdr, p_mdl, mdl_len, s_buf ); cl_perf_stop( &p_port->p_adapter->perf, SendMgrFilter ); if( status != NDIS_STATUS_SUCCESS ) { @@ -4981,17 +4946,17 @@ __build_send_desc( if( p_desc->send_dir == SEND_UD_QP ) { - p_desc->send_qp = p_port->ib_mgr.h_qp; // UD QP + p_desc->send_qp = s_buf->p_port->ib_mgr.h_qp; // UD QP for( i = 0; i < p_desc->num_wrs; i++ ) { p_desc->send_wr[i].wr.dgrm.ud.remote_qp = p_desc->p_endpt->qpn; - p_desc->send_wr[i].wr.dgrm.ud.remote_qkey = p_port->ib_mgr.bcast_rec.qkey; + p_desc->send_wr[i].wr.dgrm.ud.remote_qkey = s_buf->p_port->ib_mgr.bcast_rec.qkey; p_desc->send_wr[i].wr.dgrm.ud.h_av = p_desc->p_endpt->h_av; - p_desc->send_wr[i].wr.dgrm.ud.pkey_index = p_port->pkey_index; + p_desc->send_wr[i].wr.dgrm.ud.pkey_index = s_buf->p_port->pkey_index; p_desc->send_wr[i].wr.dgrm.ud.rsvd = NULL; p_desc->send_wr[i].wr.send_opt = 0; - if( p_port->p_adapter->params.send_chksum_offload && + if( s_buf->p_port->p_adapter->params.send_chksum_offload && p_checksum_list_info && ( p_checksum_list_info->Transmit.IsIPv4 || p_checksum_list_info->Transmit.IsIPv6 )) @@ -5032,7 +4997,7 @@ __build_send_desc( /* Store context in our reserved area of the packet. */ - ASSERT(s_buf == (ipoib_send_NB_SG *) IPOIB_INFO_FROM_NB(p_netbuf)); + ASSERT(s_buf == (ipoib_send_NB_SG *) IPOIB_INFO_FROM_NB(s_buf->p_curr_nb)); s_buf->p_endpt = p_desc->p_endpt; //TODO IMPORTANT: Send buffer should not be allocated within global struct !!! // Otherwise, the next send may override its content @@ -5046,7 +5011,6 @@ static NDIS_STATUS __build_lso_desc( IN ipoib_port_t* const p_port, IN ULONG mss, - IN SCATTER_GATHER_LIST *p_sgl, IN int32_t hdr_idx, IN PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO p_lso_info, IN NET_BUFFER *p_netbuf) @@ -5115,7 +5079,7 @@ __build_lso_desc( p_desc->send_wr[0].wr.p_next = NULL; p_desc->send_qp = p_port->ib_mgr.h_qp; p_desc->send_dir = SEND_UD_QP; - status = __send_gen(p_port, s_buf, p_sgl, IndexOfData, p_netbuf, TheLsoData.LsoHeaderSize); + status = __send_gen( s_buf, IndexOfData, TheLsoData.LsoHeaderSize ); IPOIB_EXIT( IPOIB_DBG_SEND ); return status; @@ -5166,7 +5130,7 @@ CreateFragList( UNREFERENCED_PARAMETER(PacketLength); -// ETH_PRINT(TRACE_LEVEL_VERBOSE, ETH_SND, "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) ) { @@ -5185,7 +5149,7 @@ CreateFragList( ASSERT( (buf_len > 0) && (MdlBytesCount > 0) ); -// ETH_PRINT(TRACE_LEVEL_VERBOSE, ETH_SND, "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) { @@ -5230,7 +5194,7 @@ CreateFragList( MdlBytesCount = 0; } -// ETH_PRINT(TRACE_LEVEL_VERBOSE, ETH_SND, "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 { @@ -5253,7 +5217,7 @@ CreateFragList( MdlBytesCount -= pFragList->Elements[i].Length; } -// ETH_PRINT(TRACE_LEVEL_VERBOSE, ETH_SND, "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); @@ -5271,7 +5235,7 @@ CreateFragList( // ASSERT(i > 0); // To prevent array underflow pFragList->Elements[i-1].Length += buf_len; -// ETH_PRINT(TRACE_LEVEL_ERROR, ETH_SND, "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); @@ -7721,7 +7685,7 @@ __mcast_cb( /* Try to send all pending sends. */ cl_spinlock_acquire( &p_port->send_lock ); - //cl_dbg_out("Calling ipoib_port_resume from mcast_cb\n"); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_MCAST, ("Calling ipoib_port_resume from mcast_cb\n")); ipoib_port_resume(p_port , FALSE); cl_spinlock_release( &p_port->send_lock ); -- 2.46.0