[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