Skip to content
Snippets Groups Projects
  • Akinobu Mita's avatar
    9c5a3621
    x86: enable DMA CMA with swiotlb · 9c5a3621
    Akinobu Mita authored
    
    The DMA Contiguous Memory Allocator support on x86 is disabled when
    swiotlb config option is enabled.  So DMA CMA is always disabled on
    x86_64 because swiotlb is always enabled.  This attempts to support for
    DMA CMA with enabling swiotlb config option.
    
    The contiguous memory allocator on x86 is integrated in the function
    dma_generic_alloc_coherent() which is .alloc callback in nommu_dma_ops
    for dma_alloc_coherent().
    
    x86_swiotlb_alloc_coherent() which is .alloc callback in swiotlb_dma_ops
    tries to allocate with dma_generic_alloc_coherent() firstly and then
    swiotlb_alloc_coherent() is called as a fallback.
    
    The main part of supporting DMA CMA with swiotlb is that changing
    x86_swiotlb_free_coherent() which is .free callback in swiotlb_dma_ops
    for dma_free_coherent() so that it can distinguish memory allocated by
    dma_generic_alloc_coherent() from one allocated by
    swiotlb_alloc_coherent() and release it with dma_generic_free_coherent()
    which can handle contiguous memory.  This change requires making
    is_swiotlb_buffer() global function.
    
    This also needs to change .free callback in the dma_map_ops for amd_gart
    and sta2x11, because these dma_ops are also using
    dma_generic_alloc_coherent().
    
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Acked-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Don Dutile <ddutile@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9c5a3621
    History
    x86: enable DMA CMA with swiotlb
    Akinobu Mita authored
    
    The DMA Contiguous Memory Allocator support on x86 is disabled when
    swiotlb config option is enabled.  So DMA CMA is always disabled on
    x86_64 because swiotlb is always enabled.  This attempts to support for
    DMA CMA with enabling swiotlb config option.
    
    The contiguous memory allocator on x86 is integrated in the function
    dma_generic_alloc_coherent() which is .alloc callback in nommu_dma_ops
    for dma_alloc_coherent().
    
    x86_swiotlb_alloc_coherent() which is .alloc callback in swiotlb_dma_ops
    tries to allocate with dma_generic_alloc_coherent() firstly and then
    swiotlb_alloc_coherent() is called as a fallback.
    
    The main part of supporting DMA CMA with swiotlb is that changing
    x86_swiotlb_free_coherent() which is .free callback in swiotlb_dma_ops
    for dma_free_coherent() so that it can distinguish memory allocated by
    dma_generic_alloc_coherent() from one allocated by
    swiotlb_alloc_coherent() and release it with dma_generic_free_coherent()
    which can handle contiguous memory.  This change requires making
    is_swiotlb_buffer() global function.
    
    This also needs to change .free callback in the dma_map_ops for amd_gart
    and sta2x11, because these dma_ops are also using
    dma_generic_alloc_coherent().
    
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Acked-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Don Dutile <ddutile@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>