On Fri, 22 Nov 2019 06:30:01 +0530, Rahul Lakkireddy wrote: > The FW_ETH_TX_EO_WR used for sending UDP Segmentation Offload (USO) > requests expects the headers to be part of the descriptor and the > payload to be part of the SGL containing the DMA mapped addresses. > Hence, the DMA address in the first entry of the SGL can start after > the packet headers. Currently, unmap_sgl() tries to unmap from this > wrong offset, instead of the originally mapped DMA address. > > So, use existing unmap_skb() instead, which takes originally saved DMA > addresses as input. Update all necessary Tx paths to save the original > DMA addresses, so that unmap_skb() can unmap them properly. > > v2: > - No change. > > Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@xxxxxxxxxxx> > diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h > index 3121ed83d8e2..61a2cf62f694 100644 > --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h > +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h > @@ -735,7 +735,12 @@ struct tx_desc { > __be64 flit[8]; > }; > > -struct tx_sw_desc; > +struct ulptx_sgl; >From this patch alone the forward declaration of struct ulptx_sgl; appears unnecessary or a left over from some previous version of the code? > +struct tx_sw_desc { > + struct sk_buff *skb; /* SKB to free after getting completion */ > + dma_addr_t addr[MAX_SKB_FRAGS + 1]; /* DMA mapped addresses */ > +}; > > struct sge_txq { > unsigned int in_use; /* # of in-use Tx descriptors */