• Ben Hutchings's avatar
    sfc: Fix efx_rx_buf_offset() for recycled pages · 43cbf1f4
    Ben Hutchings authored
    This bug fix is only for stable branches older than 3.10.  The bug was
    fixed upstream by commit 2768935a ('sfc: reuse pages to avoid DMA
    mapping/unmapping costs'), but that change is totally unsuitable for
    stable.
    
    Commit b590ace0 ('sfc: Fix efx_rx_buf_offset() in the presence of
    swiotlb') added an explicit page_offset member to struct
    efx_rx_buffer, which must be set consistently with the u.page and
    dma_addr fields.  However, it failed to add the necessary assignment
    in efx_resurrect_rx_buffer().  It also did not correct the calculation
    of efx_rx_buffer::dma_addr in efx_resurrect_rx_buffer(), which assumes
    that DMA-mapping a page will result in a page-aligned DMA address
    (exactly what swiotlb violates).
    
    Add the assignment of efx_rx_buffer::page_offset and change the
    calculation of dma_addr to make use of it.
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    Acked-by: default avatarDavid Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    43cbf1f4
rx.c 22.2 KB