]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[ipoib] cm
authoraestrin <aestrin@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 16 Oct 2008 22:34:18 +0000 (22:34 +0000)
committeraestrin <aestrin@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 16 Oct 2008 22:34:18 +0000 (22:34 +0000)
-seem max send sges wasn't large enough and was the reason why large mtu sends could fail. Set to default max.
- on recv buffer destructor - validate pool_item and context.

git-svn-id: svn://openib.tc.cornell.edu/gen1@1662 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/ipoib_cm/kernel/ipoib_driver.c
branches/ipoib_cm/kernel/ipoib_driver.h
branches/ipoib_cm/kernel/ipoib_endpoint.c
branches/ipoib_cm/kernel/ipoib_port.c

index 0052b029523ea202c9dbd91686e0cf080624e98c..1861ed33c1bdbb8e5541c4562fcbba2c4100b8d1 100644 (file)
@@ -597,7 +597,7 @@ ipoib_get_adapter_params(
        p_adapter->params.rq_low_watermark =\r
                        p_adapter->params.rq_depth / p_adapter->params.rq_low_watermark;\r
        \r
-       /* disable CM if LSO active because LSO uses UD transport only */\r
+       /* disable CM if LSO is active */\r
        if( p_adapter->params.cm_enabled )\r
        {\r
                p_adapter->params.cm_enabled = !p_adapter->params.lso;\r
@@ -988,8 +988,11 @@ ipoib_query_info(
        case OID_GEN_MAXIMUM_FRAME_SIZE:\r
                IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID,\r
                        ("Port %d received query for OID_GEN_MAXIMUM_FRAME_SIZE\n", port_num) );\r
+               if( p_adapter->params.cm_enabled )\r
+                       info = p_adapter->params.cm_payload_mtu;\r
+               else\r
                        info = p_adapter->params.payload_mtu;\r
-                       break;\r
+               break;\r
 \r
        case OID_GEN_LINK_SPEED:\r
                IPOIB_PRINT( TRACE_LEVEL_VERBOSE,IPOIB_DBG_OID,\r
index 0660f59313ace95f057f7246d01721cd85b767bc..aa611f95d7fb655b9c5cdc1205ce453f4ad6efd4 100644 (file)
 #define DATA_OFFSET                            (sizeof(eth_hdr_t) - sizeof(ipoib_hdr_t))\r
 \r
 //#define IPOIB_CM_FLAG_RC             (0x01) // RC flag\r
-//#define IPOIB_CM_FLAG_SVCID          (0x01) // IETF bit\r
+//#define IPOIB_CM_FLAG_SVCID  (0x01) // IETF bit\r
 #define IPOIB_CM_FLAG_RC               (0x80) //OFED set RC flag this way\r
 #define IPOIB_CM_FLAG_SVCID            (0x10) // OFED set IETF bit this way ( open OFED PR 1121 )\r
 \r
-/* Max send data segment list size. Segments are PAGE_SIZE each */\r
-/* + 2 to roundup( since fisrt and last segments could be partial pages )\r
-   + 1 reserved for ipoib header, add another 2 for IP and TCP headers */\r
-#define MAX_SEND_SGE   (( MAX_CM_PAYLOAD_MTU >> PAGE_SHIFT ) + 5)\r
+#define MAX_SEND_SGE                   (30)\r
 \r
 /* Amount of physical memory to register. */\r
 #define MEM_REG_SIZE   0xFFFFFFFFFFFFFFFF\r
index ac0ff411a35fadb2c442c39a2e92c02a65724e92..f572f6607dc4bdefefb3e3f4ba6dd8fa0d503eea 100644 (file)
@@ -789,7 +789,9 @@ __cm_recv_desc_dtor(
        ipoib_cm_desc_t *p_desc;\r
        ipoib_port_t*   p_port;\r
 \r
-       UNUSED_PARAM( context );\r
+       if( p_pool_item == NULL || context == NULL )\r
+               return;\r
+       \r
        p_port = (ipoib_port_t*)context;\r
        p_desc = PARENT_STRUCT( p_pool_item, ipoib_cm_desc_t, item );\r
 \r
index 5b405aa367099ac34b90822c48516753237df766..f639f4c6e738f4f11d6bdbf078ff5bafbc3b7f9f 100644 (file)
@@ -985,7 +985,7 @@ __ib_mgr_init(
                IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,\r
                        ("ipoib_port_srq_init failed %s\n",\r
                        p_port->p_adapter->p_ifc->get_err_str( status )) );\r
-               // disable further CM initialization \r
+               /* disable further CM initialization */\r
                p_port->p_adapter->params.cm_enabled = FALSE;\r
 \r
                NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter,\r
@@ -1005,6 +1005,12 @@ __ib_mgr_init(
                        NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter,\r
                                EVENT_IPOIB_CONNECTED_MODE_ERR, 1, 0xbadc0de2 );\r
                }\r
+               else \r
+               {\r
+                       /* now we can adjust csum capabilities */\r
+                       p_port->p_adapter->params.send_chksum_offload = CSUM_DISABLED;\r
+                       p_port->p_adapter->params.recv_chksum_offload = CSUM_BYPASS;\r
+               }\r
        }\r
        IPOIB_EXIT( IPOIB_DBG_INIT );\r
        return IB_SUCCESS;\r
@@ -3278,7 +3284,7 @@ __send_gen(
        }\r
 \r
        /* Remember that one of the DS entries is reserved for the IPoIB header. */\r
-       if( ( p_sgl->NumberOfElements >= MAX_SEND_SGE ||\r
+       if( ( p_sgl->NumberOfElements > MAX_SEND_SGE ||\r
                p_sgl->Elements[0].Length < sizeof(eth_hdr_t)) )\r
        {\r
 \r
@@ -3998,8 +4004,8 @@ __send_mgr_filter_arp(
        if( p_port->p_adapter->params.cm_enabled )\r
        {\r
                IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT,\r
-               (" %s SEND to ENDPT[%p] State: %d flag: %#x, QPN: %#x MAC %02x:%02x:%02x:%02x:%02x:%02x\n",\r
-                       (( p_arp->op == ARP_OP_REQ )? "ARP REQUEST" : "ARP REPLY" ),\r
+               (" ARP %s SEND to ENDPT[%p] State: %d flag: %#x, QPN: %#x MAC %02x:%02x:%02x:%02x:%02x:%02x\n",\r
+                       (( p_arp->op == ARP_OP_REQ )? "REQUEST" : "REPLY" ),\r
                        p_desc->p_endpt, \r
                        endpt_cm_get_state( p_desc->p_endpt ),\r
                        p_desc->p_endpt->cm_flag, \r