• Ben Hutchings's avatar
    sfc: Fix efx_rx_buf_offset() for recycled pages · 5f7f65da
    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>
    5f7f65da
rx.c 22 KB