]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[[IPoIB_NDIS6_CM] LSO bug fix
authorAlex Naslednikov <alex@mellanox.co.il>
Tue, 21 Sep 2010 16:07:09 +0000 (16:07 +0000)
committerAlex Naslednikov <alex@mellanox.co.il>
Tue, 21 Sep 2010 16:07:09 +0000 (16:07 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1@2943 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp

index 3fd3d1fe8fd35dab2e831281e271ca69e1de0cbb..c89bc65b48952709a872071f6318b86377f05fd7 100644 (file)
@@ -4157,7 +4157,8 @@ __send_gen(
        NDIS_STATUS             status;\r
        uint32_t                i, j            = 1;\r
        ULONG                   DataOffset      = 0;    \r
-       uint32_t                offset          = sizeof(eth_hdr_t);\r
+       uint32_t                EthHeaderOffset                 = sizeof(eth_hdr_t);\r
+       static const    EthIPoIBHeaderOffset    = EthHeaderOffset - sizeof(ipoib_hdr_t);\r
        \r
        PERF_DECLARE( SendCopy );\r
 \r
@@ -4219,27 +4220,27 @@ __send_gen(
                        ****************************/\r
                        \r
                        p_desc->send_wr[0].local_ds[j].vaddr = \r
-                               p_sgl->Elements[0].Address.QuadPart + lso_header_size;\r
+                               p_sgl->Elements[0].Address.QuadPart + lso_header_size + DataOffset + EthIPoIBHeaderOffset;\r
                        p_desc->send_wr[0].local_ds[j].length = \r
-                               p_sgl->Elements[0].Length - lso_header_size;\r
+                               p_sgl->Elements[0].Length - lso_header_size - DataOffset - EthIPoIBHeaderOffset;\r
                        p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey;\r
                        /* Set the number of data segments. */\r
                        p_desc->send_wr[0].wr.num_ds = 1;\r
                        return NDIS_STATUS_SUCCESS;\r
                }               \r
        }\r
-       else while( offset )\r
+       else while( EthHeaderOffset )\r
        {\r
-               if( p_sgl->Elements[i].Length <= offset )\r
+               if( p_sgl->Elements[i].Length <= EthHeaderOffset )\r
                {\r
-                       offset -= p_sgl->Elements[i++].Length;\r
+                       EthHeaderOffset -= p_sgl->Elements[i++].Length;\r
                }\r
                else\r
                {\r
                        p_desc->send_wr[0].local_ds[j].vaddr =\r
-                               p_sgl->Elements[i].Address.QuadPart + offset + DataOffset;\r
+                               p_sgl->Elements[i].Address.QuadPart + EthHeaderOffset + DataOffset;\r
                        p_desc->send_wr[0].local_ds[j].length =\r
-                               p_sgl->Elements[i].Length - offset - DataOffset;\r
+                               p_sgl->Elements[i].Length - EthHeaderOffset - DataOffset;\r
                        p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey;\r
                        i++;\r
                        j++;\r