lkml.org 
[lkml]   [2017]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[GIT PULL for-4.4 18/25] net: mvpp2: release reference to txq_cpu[] entry after unmapping
    Date
    From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

    [ Upstream commit 36fb7435b6ac4d288a2d4deea8934f9456ab46b6 ]

    The mvpp2_txq_bufs_free() function is called upon TX completion to DMA
    unmap TX buffers, and free the corresponding SKBs. It gets the
    references to the SKB to free and the DMA buffer to unmap from a per-CPU
    txq_pcpu data structure.

    However, the code currently increments the pointer to the next entry
    before doing the DMA unmap and freeing the SKB. It does not cause any
    visible problem because for a given SKB the TX completion is guaranteed
    to take place on the CPU where the TX was started. However, it is much
    more logical to increment the pointer to the next entry once the current
    entry has been completely unmapped/released.

    Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    drivers/net/ethernet/marvell/mvpp2.c | 9 ++++-----
    1 file changed, 4 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
    index 0e67145bc418..4f34e1b79705 100644
    --- a/drivers/net/ethernet/marvell/mvpp2.c
    +++ b/drivers/net/ethernet/marvell/mvpp2.c
    @@ -4415,13 +4415,12 @@ static void mvpp2_txq_bufs_free(struct mvpp2_port *port,
    struct mvpp2_txq_pcpu_buf *tx_buf =
    txq_pcpu->buffs + txq_pcpu->txq_get_index;

    - mvpp2_txq_inc_get(txq_pcpu);
    -
    dma_unmap_single(port->dev->dev.parent, tx_buf->phys,
    tx_buf->size, DMA_TO_DEVICE);
    - if (!tx_buf->skb)
    - continue;
    - dev_kfree_skb_any(tx_buf->skb);
    + if (tx_buf->skb)
    + dev_kfree_skb_any(tx_buf->skb);
    +
    + mvpp2_txq_inc_get(txq_pcpu);
    }
    }

    --
    2.11.0
    \
     
     \ /
      Last update: 2017-10-11 02:48    [W:4.185 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site