[ofw] [PATCH] remove unused CM code 3 of 3
Smith, Stan
stan.smith at intel.com
Mon Jan 10 09:00:27 PST 2011
Alex Naslednikov wrote:
> Please, commit.
> I inserted "#if 0" just to make future CM patches clear,
> but I saw a lot of changes on CM branch. So it will be good idea to
> apply the CM patches
> directly on UD code without "#if 0".
The reason for these patches was based on the observation that applying patches to code base which has numerous #if 0 clauses was extremely confusing and very hard to make any sense from the patches.
Believe it or not, I'm attempting to make your life a little easier.
stan.
>
> -----Original Message-----
> From: Smith, Stan [mailto:stan.smith at intel.com]
> Sent: Friday, January 07, 2011 10:39 PM
> To: Alex Naslednikov
> Cc: ofw at lists.openfabrics.org
> Subject: [PATCH] remove unused CM code 3 of 3
>
>
> In order to make IPoIB-CM patches clear, remove #if 0 unused CM code.
>
> signed-off-by: stan smith <stan.smith at intel.com>
>
> --- A/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp Fri Jan 07
> 12:01:19 2011 +++ B/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp
> Fri Jan 07 10:48:53 2011 @@ -75,74 +75,8 @@
> __endpt_resolve(
> IN ipoib_endpt_t* const
> p_endpt );
>
> -static void
> -__endpt_cm_send_cb(
> - IN const ib_cq_handle_t h_cq,
> - IN void
> *cq_context );
> -static void
> -__endpt_cm_recv_cb(
> - IN const ib_cq_handle_t h_cq,
> - IN void
> *cq_context ); -
> -static void
> -__endpt_cm_buf_mgr_construct(
> - IN endpt_buf_mgr_t * const p_buf_mgr );
> -static void
> -__conn_reply_cb(
> - IN ib_cm_rep_rec_t *p_cm_rep );
> -
> -static void
> -__conn_mra_cb(
> - IN ib_cm_mra_rec_t *p_mra_rec );
> -
> -static void
> -__conn_rej_cb(
> - IN ib_cm_rej_rec_t *p_rej_rec );
> -
> -static void
> -__conn_dreq_cb(
> - IN ib_cm_dreq_rec_t *p_dreq_rec );
> -
> -#if 0 //CM
> -static cl_status_t
> -__cm_recv_desc_ctor(
> - IN void* const
> p_object,
> - IN void*
> context,
> - OUT cl_pool_item_t** const pp_pool_item
> ); -
> -static void
> -__cm_recv_desc_dtor(
> - IN const cl_pool_item_t* const
> p_pool_item,
> - IN void
> *context ); -
> -static NDIS_PACKET*
> -__endpt_cm_get_ndis_pkt(
> - IN ipoib_port_t* const
> p_port,
> - IN ipoib_cm_desc_t* const p_desc );
> -
> -static inline ipoib_cm_desc_t*
> -__endpt_cm_buf_mgr_get_recv(
> - IN endpt_buf_mgr_t * const p_buf_mgr );
> -
> -static boolean_t
> -__cm_recv_is_dhcp(
> - IN const ipoib_pkt_t* const p_ipoib );
>
> -static ib_api_status_t
> -__endpt_cm_recv_arp(
> - IN ipoib_port_t* const
> p_port,
> - IN const ipoib_pkt_t* const p_ipoib,
> - OUT eth_pkt_t* const p_eth,
> - IN ipoib_endpt_t* const p_src_endpt );
>
> -static ib_api_status_t
> -__endpt_cm_recv_udp(
> - IN ipoib_port_t* const
> p_port,
> - IN ib_wc_t* const p_wc,
> - IN const ipoib_pkt_t* const p_ipoib,
> - OUT eth_pkt_t* const p_eth,
> - IN ipoib_endpt_t* const p_src_endpt );
> -#endif
>
> ipoib_endpt_t*
> ipoib_endpt_create(
> @@ -296,13 +230,6 @@
> 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 )
> - {
> - p_endpt->cm_flag = 0;
> - CL_ASSERT( endpt_cm_get_state( p_endpt ) ==
> IPOIB_CM_DISCONNECTED );
> - }
> -#endif
>
> cl_obj_unlock( p_obj );
>
> @@ -449,735 +376,3 @@
> IPOIB_EXIT( IPOIB_DBG_ENDPT );
> return NDIS_STATUS_SUCCESS;
> }
> -
> -#if 0
> -
> -static void
> -__endpt_cm_buf_mgr_construct(
> - IN endpt_buf_mgr_t * const p_buf_mgr )
> -{
> - IPOIB_ENTER( IPOIB_DBG_INIT );
> -
> - cl_qpool_construct( &p_buf_mgr->recv_pool );
> -
> - p_buf_mgr->h_packet_pool = NULL;
> - p_buf_mgr->h_buffer_pool = NULL;
> -
> - IPOIB_EXIT( IPOIB_DBG_INIT );
> -}
> -
> -ib_api_status_t
> -endpt_cm_buf_mgr_init(
> - IN ipoib_port_t* const
> p_port ) -{
> - cl_status_t cl_status;
> - NDIS_STATUS ndis_status;
> - ib_api_status_t ib_status = IB_SUCCESS;
> -
> - IPOIB_ENTER( IPOIB_DBG_INIT );
> -
> - if( p_port->cm_buf_mgr.pool_init )
> - return ib_status;
> -
> - cl_qlist_init( &p_port->cm_buf_mgr.posted_list );
> -
> - __endpt_cm_buf_mgr_construct( &p_port->cm_buf_mgr );
> - p_port->cm_recv_mgr.rq_depth =
> - min( (uint32_t)p_port->p_adapter->params.rq_depth * 8,
> - p_port->p_ca_attrs->max_srq_wrs/2 );
> - p_port->cm_recv_mgr.depth = 0;
> - /* Allocate the receive descriptors pool */
> - cl_status = cl_qpool_init( &p_port->cm_buf_mgr.recv_pool,
> - p_port->cm_recv_mgr.rq_depth ,
> - 0,
> - 0,
> - sizeof( ipoib_cm_desc_t ),
> - __cm_recv_desc_ctor,
> - __cm_recv_desc_dtor,
> - p_port );
> -
> - if( cl_status != CL_SUCCESS )
> - {
> - 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(cm_buf_mgr.recv_pool)
> returned %#x\n", cl_status) );
> - return IB_INSUFFICIENT_MEMORY;
> - }
> -
> - /* Allocate the NDIS buffer and packet pools for receive
> indication. */
> - NdisAllocatePacketPool( &ndis_status,
> -
> &p_port->cm_buf_mgr.h_packet_pool,
> -
> p_port->cm_recv_mgr.rq_depth,
> -
> PROTOCOL_RESERVED_SIZE_IN_PACKET );
> - if( ndis_status != NDIS_STATUS_SUCCESS )
> - {
> - NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter,
> - EVENT_IPOIB_RECV_PKT_POOL, 1, ndis_status );
> -
> - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("NdisAllocatePacketPool returned %08X\n",
> ndis_status) ); -
> - ib_status = IB_INSUFFICIENT_RESOURCES;
> - goto pkt_pool_failed;
> - }
> -
> - NdisAllocateBufferPool( &ndis_status,
> -
> &p_port->cm_buf_mgr.h_buffer_pool,
> -
> p_port->cm_recv_mgr.rq_depth );
> - if( ndis_status != NDIS_STATUS_SUCCESS )
> - {
> - NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter,
> - EVENT_IPOIB_RECV_BUF_POOL, 1, ndis_status );
> -
> - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("NdisAllocateBufferPool returned %08X\n",
> ndis_status) ); -
> - ib_status = IB_INSUFFICIENT_RESOURCES;
> - goto buf_pool_failed;
> - }
> - //NDIS60
> - //p_port->cm_recv_mgr.recv_pkt_array =
> - //cl_zalloc( sizeof(NDIS_PACKET*) *
> p_port->cm_recv_mgr.rq_depth );
> - p_port->cm_recv_mgr.recv_lst_array =
> - cl_zalloc( sizeof(NET_BUFFER_LIST*) *
> p_port->cm_recv_mgr.rq_depth ); -
> -
> -
> - if( !p_port->cm_recv_mgr.recv_NBL_array )
> - {
> - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("cl_zalloc for cm_recv_mgr NET_BUFFER_LIST
> array failed.\n") ); -
> - ib_status = IB_INSUFFICIENT_MEMORY;
> - goto pkt_array_failed;
> - }
> -
> - 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
> );
> -buf_pool_failed:
> - if( p_port->cm_buf_mgr.h_packet_pool )
> - NdisFreePacketPool( p_port->cm_buf_mgr.h_packet_pool
> );
> -pkt_pool_failed:
> - cl_qpool_destroy( &p_port->cm_buf_mgr.recv_pool );
> -
> - IPOIB_EXIT( IPOIB_DBG_INIT );
> - return ib_status;
> -}
> -
> -
> -void
> -endpt_cm_buf_mgr_reset(
> - IN ipoib_port_t* const p_port )
> -{
> - cl_list_item_t *p_item;
> -
> - if( !p_port->cm_buf_mgr.pool_init )
> - return;
> -
> - if( cl_qlist_count( &p_port->cm_buf_mgr.posted_list ) )
> - {
> - for( p_item = cl_qlist_remove_head(
> &p_port->cm_buf_mgr.posted_list );
> - p_item != cl_qlist_end(
> &p_port->cm_buf_mgr.posted_list );
> - p_item = cl_qlist_remove_head(
> &p_port->cm_buf_mgr.posted_list ) )
> - {
> - cl_qpool_put( &p_port->cm_buf_mgr.recv_pool,
> - &( PARENT_STRUCT( p_item,
> ipoib_cm_desc_t, list_item ))->item );
> - }
> - }
> -}
> -
> -void
> -endpt_cm_buf_mgr_destroy(
> - IN ipoib_port_t* const p_port )
> -{
> -
> - IPOIB_ENTER(IPOIB_DBG_INIT );
> -
> - CL_ASSERT( p_port );
> -
> - /* Free the receive descriptors. */
> - if( !p_port->cm_buf_mgr.pool_init )
> - return;
> -
> - endpt_cm_buf_mgr_reset( p_port );
> -
> - p_port->cm_buf_mgr.pool_init = FALSE;
> -
> - if( p_port->cm_recv_mgr.recv_NBL_array )
> - {
> - cl_free( p_port->cm_recv_mgr.recv_NBL_array );
> - }
> -
> - /* Destroy the receive packet and buffer pools. */
> - if( p_port->cm_buf_mgr.h_buffer_pool )
> - NdisFreeBufferPool( p_port->cm_buf_mgr.h_buffer_pool
> );
> - if( p_port->cm_buf_mgr.h_packet_pool )
> - NdisFreePacketPool( p_port->cm_buf_mgr.h_packet_pool
> ); -
> - cl_qpool_destroy( &p_port->cm_buf_mgr.recv_pool );
> -
> - IPOIB_EXIT( IPOIB_DBG_INIT );
> -}
> -
> -static cl_status_t
> -__cm_recv_desc_ctor(
> - IN void* const
> p_object,
> - IN void*
> context,
> - OUT cl_pool_item_t** const
> pp_pool_item ) -{
> - ipoib_cm_desc_t* p_desc;
> - ipoib_port_t* p_port;
> - ib_mr_create_t create_mr;
> - net32_t rkey;
> -
> - CL_ASSERT( p_object );
> - CL_ASSERT( context );
> -
> - p_desc = (ipoib_cm_desc_t*)p_object;
> - p_port = (ipoib_port_t*)context;
> -
> -#define BUF_ALIGN (16)
> -
> - p_desc->alloc_buf_size =
> - ROUNDUP(
> p_port->p_adapter->params.cm_xfer_block_size, BUF_ALIGN ); -
> - p_desc->p_alloc_buf = (uint8_t *)ExAllocatePoolWithTag(
> - NonPagedPool, p_desc->alloc_buf_size, 'DOMC' );
> -
> - if( p_desc->p_alloc_buf == NULL )
> - {
> - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("Failed to allocate CM recv buffer size %d
> bytes.\n",
> - p_desc->alloc_buf_size ) );
> - return CL_INSUFFICIENT_MEMORY;
> - }
> -
> - create_mr.vaddr = p_desc->p_alloc_buf;
> - 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 )
> - {
> - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("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));
> - p_desc->buf_size = p_desc->alloc_buf_size - (BUF_ALIGN -
> sizeof( ipoib_hdr_t)); -
> - /* Setup the local data segment. */
> - p_desc->local_ds[0].vaddr = (uint64_t)(uintn_t)p_desc->p_buf;
> - p_desc->local_ds[0].length = p_desc->buf_size;
> - p_desc->local_ds[0].lkey = p_desc->lkey;
> -
> - /* Setup the work request. */
> - 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:
> - ExFreePoolWithTag( p_desc->p_alloc_buf, 'DOMC' );
> - return CL_INSUFFICIENT_MEMORY;
> -}
> -
> -static void
> -__cm_recv_desc_dtor(
> - IN const cl_pool_item_t* const
> p_pool_item,
> - IN void
> *context ) -{
> - ipoib_cm_desc_t *p_desc;
> - ipoib_port_t* p_port;
> -
> - if( p_pool_item == NULL || context == NULL )
> - return;
> -
> - p_port = (ipoib_port_t*)context;
> - p_desc = PARENT_STRUCT( p_pool_item, ipoib_cm_desc_t, item );
> -
> - if( p_desc->h_mr )
> - p_port->p_adapter->p_ifc->dereg_mr( p_desc->h_mr );
> -
> - if( p_desc->p_alloc_buf )
> - ExFreePoolWithTag( p_desc->p_alloc_buf, 'DOMC' );
> -}
> -
> -
> -static NDIS_PACKET*
> -__endpt_cm_get_ndis_pkt(
> - IN ipoib_port_t* const
> p_port,
> - IN ipoib_cm_desc_t* const p_desc )
> -{
> - NDIS_STATUS status;
> - NDIS_PACKET *p_packet;
> - NDIS_BUFFER *p_buffer;
> -
> - IPOIB_ENTER( IPOIB_DBG_RECV );
> -
> - NdisDprAllocatePacketNonInterlocked( &status, &p_packet,
> - p_port->cm_buf_mgr.h_packet_pool );
> - if( status != NDIS_STATUS_SUCCESS )
> - {
> - IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("Failed to allocate NDIS_PACKET: %08x\n",
> status) );
> - return NULL;
> - }
> -
> - IPOIB_PORT_FROM_PACKET( p_packet ) = p_port;
> - IPOIB_RECV_FROM_PACKET( p_packet ) = p_desc;
> -
> - NdisAllocateBuffer(
> - &status,
> - &p_buffer,
> - p_port->cm_buf_mgr.h_buffer_pool,
> - (void *)(p_desc->p_buf - DATA_OFFSET),
> - p_desc->len + DATA_OFFSET );
> -
> - if( status != NDIS_STATUS_SUCCESS )
> - {
> - IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("Failed to allocate NDIS_BUFFER: %08x\n",
> status) );
> - NdisDprFreePacketNonInterlocked( p_packet );
> - return NULL;
> - }
> -
> - NdisChainBufferAtFront( p_packet, p_buffer );
> - NDIS_SET_PACKET_HEADER_SIZE( p_packet, sizeof(eth_hdr_t) );
> -
> - IPOIB_EXIT( IPOIB_DBG_RECV );
> - return p_packet;
> -}
> -
> -static inline ipoib_cm_desc_t*
> -__endpt_cm_buf_mgr_get_recv(
> - IN endpt_buf_mgr_t * const p_buf_mgr )
> -{
> - ipoib_cm_desc_t *p_desc;
> -
> - p_desc = (ipoib_cm_desc_t*)cl_qpool_get(
> &p_buf_mgr->recv_pool );
> - if( p_desc )
> - cl_qlist_insert_tail( &p_buf_mgr->posted_list,
> &p_desc->list_item ); -
> - return p_desc;
> -}
> -
> -void
> -endpt_cm_buf_mgr_put_recv(
> - IN endpt_buf_mgr_t * const p_buf_mgr,
> - IN ipoib_cm_desc_t* const p_desc )
> -{
> -
> - IPOIB_ENTER(IPOIB_DBG_RECV );
> -
> - /* Return the descriptor to it's pool. */
> - cl_qlist_remove_item( &p_buf_mgr->posted_list,
> &p_desc->list_item );
> - cl_qpool_put( &p_buf_mgr->recv_pool, &p_desc->item );
> -
> - IPOIB_EXIT( IPOIB_DBG_RECV );
> -}
> -
> -void
> -endpt_cm_buf_mgr_put_recv_list(
> - IN endpt_buf_mgr_t * const p_buf_mgr,
> - IN cl_qlist_t* const
> p_list ) -{
> - cl_qpool_put_list( &p_buf_mgr->recv_pool, p_list );
> -}
> -
> -uint32_t
> -endpt_cm_recv_mgr_build_pkt_array(
> - IN ipoib_port_t* const
> p_port,
> - IN ipoib_endpt_t* const
> p_endpt,
> - IN cl_qlist_t* const
> p_done_list,
> - IN OUT uint32_t*
> p_bytes_recv ) -{
> - cl_list_item_t *p_item;
> - ipoib_cm_desc_t *p_desc;
> - uint32_t i = 0;
> - NDIS_PACKET *p_packet;
> - NDIS_TCP_IP_CHECKSUM_PACKET_INFO chksum;
> -
> - IPOIB_ENTER( IPOIB_DBG_RECV );
> - UNUSED_PARAM( p_endpt );
> -
> - p_item = cl_qlist_remove_head( p_done_list );
> -
> - *p_bytes_recv = 0;
> -
> - for( p_item; p_item != cl_qlist_end( p_done_list );
> - p_item = cl_qlist_remove_head( p_done_list ) )
> - {
> - p_desc = (ipoib_cm_desc_t*)p_item;
> -
> - p_packet = __endpt_cm_get_ndis_pkt( p_port, p_desc );
> - if( !p_packet )
> - {
> - IPOIB_PRINT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> - ("Failed to get Packet from
> descriptor\n" ) );
> - endpt_cm_buf_mgr_put_recv(
> &p_port->cm_buf_mgr, p_desc );
> - p_port->cm_recv_mgr.depth--;
> - continue;
> - }
> - chksum.Value = 0;
> - switch( p_port->p_adapter->params.recv_chksum_offload
> )
> - {
> - default:
> - CL_ASSERT( FALSE );
> - case CSUM_DISABLED:
> - case CSUM_ENABLED:
> - NDIS_PER_PACKET_INFO_FROM_PACKET( p_packet,
> TcpIpChecksumPacketInfo ) =
> - (void*)(uintn_t)chksum.Value;
> - break;
> - case CSUM_BYPASS:
> - /* Flag the checksums as having been
> calculated. */
> - chksum.Receive.NdisPacketTcpChecksumSucceeded
> = TRUE;
> - chksum.Receive.NdisPacketUdpChecksumSucceeded
> = TRUE;
> - chksum.Receive.NdisPacketIpChecksumSucceeded
> = TRUE;
> - NDIS_PER_PACKET_INFO_FROM_PACKET( p_packet,
> TcpIpChecksumPacketInfo ) =
> - (void*)(uintn_t)chksum.Value;
> - break;
> - }
> -
> - NDIS_SET_PACKET_STATUS( p_packet, NDIS_STATUS_SUCCESS
> );
> - p_port->cm_recv_mgr.recv_NBL_array[i] = p_packet;
> - i++;
> - *p_bytes_recv += p_desc->len;
> - }
> -
> - IPOIB_EXIT( IPOIB_DBG_RECV );
> - return i;
> -}
> -void
> -endpt_cm_flush_recv(
> - IN ipoib_port_t* const
> p_port,
> - IN ipoib_endpt_t* const
> p_endpt ) -{
> - ib_api_status_t ib_status = IB_SUCCESS;
> - ib_qp_mod_t mod_attr;
> - ib_wc_t wc[MAX_RECV_WC];
> - ib_wc_t *p_free_wc;
> - ib_wc_t *p_done_wc;
> - ib_wc_t *p_wc;
> - ipoib_cm_desc_t *p_desc;
> -
> - IPOIB_ENTER( IPOIB_DBG_RECV );
> -
> - CL_ASSERT( p_endpt );
> -
> - if( p_endpt->conn.h_recv_qp )
> - {
> - memset( &mod_attr, 0, sizeof( mod_attr ) );
> - mod_attr.req_state = IB_QPS_ERROR;
> - p_port->p_adapter->p_ifc->modify_qp(
> p_endpt->conn.h_send_qp, &mod_attr );
> - p_port->p_adapter->p_ifc->modify_qp(
> p_endpt->conn.h_recv_qp, &mod_attr ); -
> - for( p_free_wc=wc; p_free_wc < &wc[MAX_RECV_WC - 1];
> p_free_wc++ )
> - p_free_wc->p_next = p_free_wc + 1;
> - p_free_wc->p_next = NULL;
> -
> - do
> - {
> - p_free_wc = wc;
> - ib_status =
> - p_port->p_adapter->p_ifc->poll_cq(
> p_endpt->conn.h_recv_cq,
> - &p_free_wc, &p_done_wc );
> - if( ib_status != IB_SUCCESS &&
> - ib_status != IB_NOT_FOUND )
> - {
> - /* connection CQ failed */
> - IPOIB_PRINT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> - ("Poll Recv CQ failed status
> %#x\n", ib_status ) );
> - break;
> - }
> - cl_spinlock_acquire( &p_port->recv_lock );
> - for( p_wc = p_done_wc; p_wc; p_wc =
> p_wc->p_next )
> - {
> - p_desc = (ipoib_cm_desc_t
> *)(uintn_t)p_wc->wr_id;
> - endpt_cm_buf_mgr_put_recv(
> &p_port->cm_buf_mgr, p_desc );
> - p_port->cm_recv_mgr.depth--;
> - }
> - cl_spinlock_release( &p_port->recv_lock );
> - } while( !p_free_wc );
> -
> - ib_status = p_port->p_adapter->p_ifc->destroy_qp(
> p_endpt->conn.h_recv_qp, NULL );
> - if( ib_status != IB_SUCCESS )
> - {
> - IPOIB_PRINT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> - ("Destroy Recv QP failed status
> %#x\n", ib_status ) );
> - }
> - p_endpt->conn.h_recv_qp = NULL;
> - }
> -
> - if( p_endpt->conn.h_send_qp )
> - {
> - ib_status = p_port->p_adapter->p_ifc->destroy_qp(
> p_endpt->conn.h_send_qp, NULL );
> - if( ib_status != IB_SUCCESS )
> - {
> - IPOIB_PRINT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> - ("Destroy Send QP failed status
> %#x\n", ib_status ) );
> - }
> - p_endpt->conn.h_send_qp = NULL;
> - }
> -
> - IPOIB_EXIT( IPOIB_DBG_RECV );
> -}
> -
> -int32_t
> -endpt_cm_recv_mgr_filter(
> - IN ipoib_endpt_t* const p_endpt,
> - IN ib_wc_t* const
> p_done_wc_list,
> - OUT cl_qlist_t* const
> p_done_list,
> - OUT cl_qlist_t* const
> p_bad_list ) -{
> - ib_api_status_t ib_status;
> - ipoib_cm_desc_t *p_desc;
> - ib_wc_t *p_wc;
> - ipoib_pkt_t *p_ipoib;
> - eth_pkt_t *p_eth;
> - ipoib_port_t* p_port;
> - int32_t recv_cnt;
> -
> - IPOIB_ENTER( IPOIB_DBG_RECV );
> -
> - p_port = ipoib_endpt_parent( p_endpt );
> -
> - for( p_wc = p_done_wc_list, recv_cnt = 0; p_wc; p_wc =
> p_wc->p_next )
> - {
> - p_desc = (ipoib_cm_desc_t *)(uintn_t)p_wc->wr_id;
> - recv_cnt++;
> - if( p_wc->status != IB_WCS_SUCCESS )
> - {
> - if( p_wc->status != IB_WCS_WR_FLUSHED_ERR )
> - {
> -
> - IPOIB_PRINT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> - ("Failed completion %s
> (vendor specific %#x)\n",
> -
> p_port->p_adapter->p_ifc->get_wc_status_str( p_wc->status ),
> - (int)p_wc->vendor_specific) );
> - }
> - else
> - {
> - IPOIB_PRINT(TRACE_LEVEL_INFORMATION,
> IPOIB_DBG_RECV,
> - ("Flushed completion %s\n",
> -
> p_port->p_adapter->p_ifc->get_wc_status_str( p_wc->status )) );
> - }
> -
> - ipoib_inc_recv_stat( p_port->p_adapter,
> IP_STAT_ERROR, 0, 0 ); -
> - cl_qlist_remove_item(
> &p_port->cm_buf_mgr.posted_list, &p_desc->list_item );
> - cl_qlist_insert_tail( p_bad_list,
> &p_desc->item.list_item );
> - continue;
> - }
> -
> - /* Successful completion
> - Setup the ethernet/ip/arp header and queue
> descriptor for report. */
> - ib_status = IB_SUCCESS;
> - p_ipoib = (ipoib_pkt_t *)((uint8_t*)p_desc->p_buf );
> - p_eth = (eth_pkt_t *)((uint8_t*)p_desc->p_buf -
> DATA_OFFSET ); -
> - switch( p_ipoib->hdr.type )
> - {
> - case ETH_PROT_TYPE_ARP:
> - 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
> (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 );
> - 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 (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 );
> - }
> -
> - break;
> - }
> -
> - if( ib_status != IB_SUCCESS )
> - {
> - ipoib_inc_recv_stat( p_port->p_adapter,
> IP_STAT_ERROR, 0, 0 );
> - cl_qlist_insert_tail( p_bad_list,
> &p_desc->item.list_item );
> - continue;
> - }
> -
> - p_eth->hdr.type = p_ipoib->hdr.type;
> - p_eth->hdr.src = p_endpt->mac;
> - p_eth->hdr.dst = p_port->p_adapter->mac;
> -
> - /* save payload length */
> - p_desc->len = p_wc->length;
> -
> - cl_qlist_insert_tail( p_done_list,
> &p_desc->item.list_item );
> - }
> -
> - IPOIB_EXIT( IPOIB_DBG_RECV );
> - return recv_cnt;
> -}
> -
> -ib_api_status_t
> -endpt_cm_post_recv(
> - IN ipoib_port_t* const
> p_port ) -{
> - ib_api_status_t ib_status = IB_SUCCESS;
> - ipoib_cm_desc_t *p_head_desc = NULL;
> - ipoib_cm_desc_t *p_tail_desc = NULL;
> - ipoib_cm_desc_t *p_next_desc;
> - ib_recv_wr_t *p_failed_wc = NULL;
> -
> - IPOIB_ENTER( IPOIB_DBG_RECV );
> -
> - while( cl_qpool_count( &p_port->cm_buf_mgr.recv_pool ) > 1 )
> - {
> - /* Pull receives out of the pool and chain
> them up. */
> - p_next_desc = __endpt_cm_buf_mgr_get_recv(
> -
> &p_port->cm_buf_mgr );
> - if( !p_next_desc )
> - {
> - IPOIB_PRINT(TRACE_LEVEL_INFORMATION,
> IPOIB_DBG_RECV,
> - ("Out of receive descriptors! Endpt
> recv queue depth 0x%x\n",
> - p_port->cm_recv_mgr.depth ) );
> - break;
> - }
> -
> - if( !p_tail_desc )
> - {
> - p_tail_desc = p_next_desc;
> - p_next_desc->wr.p_next = NULL;
> - }
> - else
> - {
> - p_next_desc->wr.p_next = &p_head_desc->wr;
> - }
> -
> - p_head_desc = p_next_desc;
> -
> - p_port->cm_recv_mgr.depth++;
> - }
> -
> - if( p_head_desc )
> - {
> - ib_status = p_port->p_adapter->p_ifc->post_srq_recv(
> - p_port->ib_mgr.h_srq, &p_head_desc->wr,
> &p_failed_wc ); -
> - if( ib_status != IB_SUCCESS )
> - {
> - IPOIB_PRINT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> - ("ip_post_recv returned %s\n",
> -
> p_port->p_adapter->p_ifc->get_err_str( ib_status )) ); -
> - /* put descriptors back to the pool */
> - while( p_failed_wc )
> - {
> - p_head_desc = PARENT_STRUCT(
> p_failed_wc, ipoib_cm_desc_t, wr );
> - p_failed_wc = p_failed_wc->p_next;
> - endpt_cm_buf_mgr_put_recv(
> &p_port->cm_buf_mgr, p_head_desc );
> - p_port->cm_recv_mgr.depth--;
> - }
> - }
> - }
> -
> -
> - IPOIB_EXIT( IPOIB_DBG_RECV );
> - return( ib_status );
> -}
> -
> -static ib_api_status_t
> -__endpt_cm_recv_arp(
> - IN ipoib_port_t* const
> p_port,
> - IN const ipoib_pkt_t* const
> p_ipoib,
> - OUT eth_pkt_t* const
> p_eth,
> - IN ipoib_endpt_t* const
> p_src_endpt ) -{
> - const ipoib_arp_pkt_t *p_ib_arp;
> - arp_pkt_t *p_arp;
> -
> - p_ib_arp = &p_ipoib->type.arp;
> - p_arp = &p_eth->type.arp;
> -
> - if( p_ib_arp->hw_type != ARP_HW_TYPE_IB ||
> - p_ib_arp->hw_size != sizeof(ipoib_hw_addr_t) ||
> - p_ib_arp->prot_type != ETH_PROT_TYPE_IP )
> - {
> - return IB_ERROR;
> - }
> -
> - p_arp->hw_type = ARP_HW_TYPE_ETH;
> - p_arp->hw_size = sizeof(mac_addr_t);
> - p_arp->src_hw = p_src_endpt->mac;
> - p_arp->src_ip = p_ib_arp->src_ip;
> - p_arp->dst_hw = p_port->p_local_endpt->mac;
> - p_arp->dst_ip = p_ib_arp->dst_ip;
> -
> - return IB_SUCCESS;
> -}
> -
> -static ib_api_status_t
> -__endpt_cm_recv_udp(
> - IN ipoib_port_t* const p_port,
> - IN ib_wc_t* const
> p_wc,
> - IN const ipoib_pkt_t* const
> p_ipoib,
> - OUT eth_pkt_t* const
> p_eth,
> - IN ipoib_endpt_t* const
> p_src_endpt ) -{
> - ib_api_status_t ib_status = IB_SUCCESS;
> -
> - if( p_wc->length <
> - (sizeof(ipoib_hdr_t) + sizeof(ip_hdr_t) +
> sizeof(udp_hdr_t)) )
> - {
> - IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> - ("Received UDP packet too short\n") );
> - return IB_ERROR;
> - }
> - 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 );
> - }
> -
> - return ib_status;
> -}
> -
> -static boolean_t
> -__cm_recv_is_dhcp(
> - IN const ipoib_pkt_t* const p_ipoib )
> -{
> - return( (p_ipoib->type.ip.prot.udp.hdr.dst_port ==
> DHCP_PORT_SERVER &&
> -
> p_ipoib->type.ip.prot.udp.hdr.src_port == DHCP_PORT_CLIENT) ||
> -
> (p_ipoib->type.ip.prot.udp.hdr.dst_port == DHCP_PORT_CLIENT &&
> -
> p_ipoib->type.ip.prot.udp.hdr.src_port == DHCP_PORT_SERVER) ); -}
> -#endif
More information about the ofw
mailing list