| From foo@baz Sat Apr 16 10:02:53 PDT 2016 | 
 | From: Eric Dumazet <edumazet@google.com> | 
 | Date: Thu, 17 Mar 2016 11:57:06 -0700 | 
 | Subject: net: bcmgenet: fix dma api length mismatch | 
 |  | 
 | From: Eric Dumazet <edumazet@google.com> | 
 |  | 
 | [ Upstream commit eee577232203842b4dcadb7ab477a298479633ed ] | 
 |  | 
 | When un-mapping skb->data in __bcmgenet_tx_reclaim(), | 
 | we must use the length that was used in original dma_map_single(), | 
 | instead of skb->len that might be bigger (includes the frags) | 
 |  | 
 | We simply can store skb_len into tx_cb_ptr->dma_len and use it | 
 | at unmap time. | 
 |  | 
 | Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file") | 
 | Signed-off-by: Eric Dumazet <edumazet@google.com> | 
 | Acked-by: Florian Fainelli <f.fainelli@gmail.com> | 
 | Signed-off-by: David S. Miller <davem@davemloft.net> | 
 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 
 | --- | 
 |  drivers/net/ethernet/broadcom/genet/bcmgenet.c |    4 ++-- | 
 |  1 file changed, 2 insertions(+), 2 deletions(-) | 
 |  | 
 | --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c | 
 | +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c | 
 | @@ -1197,7 +1197,7 @@ static unsigned int __bcmgenet_tx_reclai | 
 |  			dev->stats.tx_bytes += tx_cb_ptr->skb->len; | 
 |  			dma_unmap_single(&dev->dev, | 
 |  					 dma_unmap_addr(tx_cb_ptr, dma_addr), | 
 | -					 tx_cb_ptr->skb->len, | 
 | +					 dma_unmap_len(tx_cb_ptr, dma_len), | 
 |  					 DMA_TO_DEVICE); | 
 |  			bcmgenet_free_cb(tx_cb_ptr); | 
 |  		} else if (dma_unmap_addr(tx_cb_ptr, dma_addr)) { | 
 | @@ -1308,7 +1308,7 @@ static int bcmgenet_xmit_single(struct n | 
 |  	} | 
 |   | 
 |  	dma_unmap_addr_set(tx_cb_ptr, dma_addr, mapping); | 
 | -	dma_unmap_len_set(tx_cb_ptr, dma_len, skb->len); | 
 | +	dma_unmap_len_set(tx_cb_ptr, dma_len, skb_len); | 
 |  	length_status = (skb_len << DMA_BUFLENGTH_SHIFT) | dma_desc_flags | | 
 |  			(priv->hw_params->qtag_mask << DMA_TX_QTAG_SHIFT) | | 
 |  			DMA_TX_APPEND_CRC; |