LSO bug fix

Signed-off by: Alexander Naslednikov (xalex  at mellanox.co.il)

Index: B:/users/xalex/MLNX_VPI_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp
===================================================================
--- B:/users/xalex/MLNX_VPI_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp      
(revision 5274)
+++ B:/users/xalex/MLNX_VPI_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp      
(revision 5275)
@@ -3989,7 +3989,8 @@
        NDIS_STATUS             status;
        uint32_t                i, j            = 1;
        ULONG                   DataOffset      = 0;    
-       uint32_t                offset          = sizeof(eth_hdr_t);
+       uint32_t                EthHeaderOffset                 = 
sizeof(eth_hdr_t);
+       static const    EthIPoIBHeaderOffset    = EthHeaderOffset - 
sizeof(ipoib_hdr_t);
        
        PERF_DECLARE( SendCopy );
 
@@ -4047,27 +4048,27 @@
                        ****************************/
                        
                        p_desc->send_wr[0].local_ds[j].vaddr = 
-                               p_sgl->Elements[0].Address.QuadPart + 
lso_header_size;
+                               p_sgl->Elements[0].Address.QuadPart + 
lso_header_size + DataOffset + EthIPoIBHeaderOffset;
                        p_desc->send_wr[0].local_ds[j].length = 
-                               p_sgl->Elements[0].Length - lso_header_size;
+                               p_sgl->Elements[0].Length - lso_header_size - 
DataOffset - EthIPoIBHeaderOffset;
                        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;
                }               
        }
-       else while( offset )
+       else while( EthHeaderOffset )
        {
-               if( p_sgl->Elements[i].Length <= offset )
+               if( p_sgl->Elements[i].Length <= EthHeaderOffset )
                {
-                       offset -= p_sgl->Elements[i++].Length;
+                       EthHeaderOffset -= p_sgl->Elements[i++].Length;
                }
                else
                {
                        p_desc->send_wr[0].local_ds[j].vaddr =
-                               p_sgl->Elements[i].Address.QuadPart + offset + 
DataOffset;
+                               p_sgl->Elements[i].Address.QuadPart + 
EthHeaderOffset + DataOffset;
                        p_desc->send_wr[0].local_ds[j].length =
-                               p_sgl->Elements[i].Length - offset - DataOffset;
+                               p_sgl->Elements[i].Length - EthHeaderOffset - 
DataOffset;
                        p_desc->send_wr[0].local_ds[j].lkey = 
s_buf->p_port->ib_mgr.lkey;
                        i++;
                        j++;
_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to