Patch "net: bcmgenet: Utilize correct struct device for all DMA operations" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net: bcmgenet: Utilize correct struct device for all DMA operations
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-bcmgenet-utilize-correct-struct-device-for-all-dma-operations.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Dec 8 07:18:57 CET 2016
From: Florian Fainelli <[email protected]>
Date: Thu, 1 Dec 2016 09:45:45 -0800
Subject: net: bcmgenet: Utilize correct struct device for all DMA operations
From: Florian Fainelli <[email protected]>
[ Upstream commit 8c4799ac799665065f9bf1364fd71bf4f7dc6a4a ]
__bcmgenet_tx_reclaim() and bcmgenet_free_rx_buffers() are not using the same struct device during unmap that was used for the map operation, which makes DMA-API debugging warn about it. Fix this by always using &priv->pdev->dev throughout the driver, using an identical device reference for all map/unmap calls.
--- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/net/ethernet/broadcom/genet/bcmgenet.c +5 -3
@@ -1168,6 +1168,7 @@ static unsigned int __bcmgenet_tx_reclai struct bcmgenet_tx_ring *ring) {struct bcmgenet_priv *priv =netdev_priv (dev); +struct device *kdev = &priv->pdev->dev;struct enet_cb *tx_cb_ptr;struct netdev_queue *txq;unsigned int pkts_compl =0 ;
@@ -1195,7 +1196,7 @@ static unsigned int __bcmgenet_tx_reclai pkts_compl++; dev->stats.tx_packets++; dev->stats.tx_bytes += tx_cb_ptr->skb->len; -dma_unmap_single (&dev->dev, +dma_unmap_single (kdev,dma_unmap_addr (tx_cb_ptr, dma_addr),dma_unmap_len (tx_cb_ptr, dma_len),DMA_TO_DEVICE );
@@ -1203,7 +1204,7 @@ static unsigned int __bcmgenet_tx_reclai }else if (dma_unmap_addr (tx_cb_ptr, dma_addr)) { dev->stats.tx_bytes +=dma_unmap_len (tx_cb_ptr, dma_len); -dma_unmap_page (&dev->dev, +dma_unmap_page (kdev,dma_unmap_addr (tx_cb_ptr, dma_addr),dma_unmap_len (tx_cb_ptr, dma_len),DMA_TO_DEVICE );
@@ -1754,6 +1755,7 @@ static int bcmgenet_alloc_rx_buffers(strstatic void bcmgenet_free_rx_buffers (struct bcmgenet_priv *priv) { +struct device *kdev = &priv->pdev->dev;struct enet_cb *cb;int i;
@@ -1761,7 +1763,7 @@ static void bcmgenet_free_rx_buffers(str cb = &priv->rx_cbs[i];if (dma_unmap_addr (cb, dma_addr)) { -dma_unmap_single (&priv->dev->dev, +dma_unmap_single (kdev,dma_unmap_addr (cb, dma_addr), priv->rx_buf_len,DMA_FROM_DEVICE );dma_unmap_addr_set (cb, dma_addr,0 );
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/net-dsa-bcm_sf2-ensure-we-re-negotiate-eee-during-after-link-change.patch queue-4.4/net-bcmgenet-utilize-correct-struct-device-for-all-dma-operations.patch