• Dave Jiang's avatar
    ntb: Force physically contiguous allocation of rx ring buffers · 061a785a
    Dave Jiang authored
    Physical addresses under IOVA on x86 platform are mapped contiguously
    as a side effect before the patch that removed CONFIG_DMA_REMAP. The
    NTB rx buffer ring is a single chunk DMA buffer that is allocated
    against the NTB PCI device. If the receive side is using a DMA device,
    then the buffers are remapped against the DMA device before being
    submitted via the dmaengine API. This scheme becomes a problem when
    the physical memory is discontiguous. When dma_map_page() is called
    on the kernel virtual address from the dma_alloc_coherent() call, the
    new IOVA mapping no longer points to all the physical memory allocated
    due to being discontiguous. Change dma_alloc_coherent() to dma_alloc_attrs()
    in order to force DMA_ATTR_FORCE_CONTIGUOUS attribute. This is the best
    fix for the circumstance. A potential future solution may be having the DMA
    mapping API providing a way to alias an existing IOVA mapping to a new
    device perhaps.
    
    This fix is not to fix the patch pointed to by the fixes tag, but to fix
    the issue arised in the ntb_transport driver on x86 platforms after the
    said patch is applied.
    Reported-by: default avatarJerry Dai <jerry.dai@intel.com>
    Fixes: f5ff79fd ("dma-mapping: remove CONFIG_DMA_REMAP")
    Tested-by: default avatarJerry Dai <jerry.dai@intel.com>
    Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
    Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
    061a785a
ntb_transport.c 62.1 KB