lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 465/717] dpaa2-eth: fix the size of the mapped SGT buffer
    Date
    From: Ioana Ciornei <ioana.ciornei@nxp.com>

    [ Upstream commit 54a57d1c449275ee727154ac106ec1accae012e3 ]

    This patch fixes an error condition triggered when the code path which
    transmits a S/G frame descriptor when the skb's headroom is not enough
    for DPAA2's needs.

    We are greated with a splat like the one below when a SGT structure is
    recycled and that is because even though a dma_unmap is performed on the
    Tx confirmation path, the unmap is not done with the proper size.

    [ 714.464927] WARNING: CPU: 13 PID: 0 at drivers/iommu/io-pgtable-arm.c:281 __arm_lpae_map+0x2d4/0x30c
    (...)
    [ 714.465343] Call trace:
    [ 714.465348] __arm_lpae_map+0x2d4/0x30c
    [ 714.465353] __arm_lpae_map+0x114/0x30c
    [ 714.465357] __arm_lpae_map+0x114/0x30c
    [ 714.465362] __arm_lpae_map+0x114/0x30c
    [ 714.465366] arm_lpae_map+0xf4/0x180
    [ 714.465373] arm_smmu_map+0x4c/0xc0
    [ 714.465379] __iommu_map+0x100/0x2bc
    [ 714.465385] iommu_map_atomic+0x20/0x30
    [ 714.465391] __iommu_dma_map+0xb0/0x110
    [ 714.465397] iommu_dma_map_page+0xb8/0x120
    [ 714.465404] dma_map_page_attrs+0x1a8/0x210
    [ 714.465413] __dpaa2_eth_tx+0x384/0xbd0 [fsl_dpaa2_eth]
    [ 714.465421] dpaa2_eth_tx+0x84/0x134 [fsl_dpaa2_eth]
    [ 714.465427] dev_hard_start_xmit+0x10c/0x2b0
    [ 714.465433] sch_direct_xmit+0x1a0/0x550
    (...)

    The dpaa2-eth driver uses an area of software annotations to transmit
    necessary information from the Tx path to the Tx confirmation one. This
    SWA structure has a different layout for each kind of frame that we are
    dealing with: linear, S/G or XDP.

    The commit referenced was incorrectly setting up the 'sgt_size' field
    for the S/G type of SWA even though we are dealing with a linear skb
    here.

    Fixes: d70446ee1f40 ("dpaa2-eth: send a scatter-gather FD instead of realloc-ing")
    Reported-by: Daniel Thompson <daniel.thompson@linaro.org>
    Tested-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://lore.kernel.org/r/20201211171607.108034-1-ciorneiioana@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    index cf9400a9886d7..d880ab2a7d962 100644
    --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    @@ -878,7 +878,7 @@ static int dpaa2_eth_build_sg_fd_single_buf(struct dpaa2_eth_priv *priv,
    swa = (struct dpaa2_eth_swa *)sgt_buf;
    swa->type = DPAA2_ETH_SWA_SINGLE;
    swa->single.skb = skb;
    - swa->sg.sgt_size = sgt_buf_size;
    + swa->single.sgt_size = sgt_buf_size;

    /* Separately map the SGT buffer */
    sgt_addr = dma_map_single(dev, sgt_buf, sgt_buf_size, DMA_BIDIRECTIONAL);
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 15:51    [W:4.118 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site