lkml.org 
[lkml]   [2022]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 38/55] xsk: Clear page contiguity bit when unmapping pool
    Date
    From: Ivan Malov <ivan.malov@oktetlabs.ru>

    [ Upstream commit 512d1999b8e94a5d43fba3afc73e774849674742 ]

    When a XSK pool gets mapped, xp_check_dma_contiguity() adds bit 0x1
    to pages' DMA addresses that go in ascending order and at 4K stride.

    The problem is that the bit does not get cleared before doing unmap.
    As a result, a lot of warnings from iommu_dma_unmap_page() are seen
    in dmesg, which indicates that lookups by iommu_iova_to_phys() fail.

    Fixes: 2b43470add8c ("xsk: Introduce AF_XDP buffer allocation API")
    Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
    Link: https://lore.kernel.org/bpf/20220628091848.534803-1-ivan.malov@oktetlabs.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/xdp/xsk_buff_pool.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c
    index 2ef6f926610e..e63a285a9856 100644
    --- a/net/xdp/xsk_buff_pool.c
    +++ b/net/xdp/xsk_buff_pool.c
    @@ -318,6 +318,7 @@ static void __xp_dma_unmap(struct xsk_dma_map *dma_map, unsigned long attrs)
    for (i = 0; i < dma_map->dma_pages_cnt; i++) {
    dma = &dma_map->dma_pages[i];
    if (*dma) {
    + *dma &= ~XSK_NEXT_PG_CONTIG_MASK;
    dma_unmap_page_attrs(dma_map->dev, *dma, PAGE_SIZE,
    DMA_BIDIRECTIONAL, attrs);
    *dma = 0;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-11 11:22    [W:4.106 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site