• FUJITA Tomonori's avatar
    x86: restore the old swiotlb alloc_coherent behavior · 03967c52
    FUJITA Tomonori authored
    This restores the old swiotlb alloc_coherent behavior (before the
    alloc_coherent rewrite):
    
      http://lkml.org/lkml/2008/8/12/200
    
    The old alloc_coherent avoids GFP_DMA allocation first and if the
    allocated address is not fit for the device's coherent_dma_mask, then
    dma_alloc_coherent does GFP_DMA allocation. If it fails,
    alloc_coherent calls swiotlb_alloc_coherent (in short, we rarely used
    swiotlb_alloc_coherent).
    
    After the alloc_coherent rewrite, dma_alloc_coherent
    (include/asm-x86/dma-mapping.h) directly calls swiotlb_alloc_coherent.
    It means that we possibly can't handle a device having dma_masks >
    24bit < 32bits since swiotlb_alloc_coherent doesn't have the above
    GFP_DMA retry mechanism.
    
    This patch fixes x86's swiotlb alloc_coherent to use the GFP_DMA retry
    mechanism, which dma_generic_alloc_coherent() provides now
    (pci-nommu.c and GART IOMMU driver also use
    dma_generic_alloc_coherent).
    Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    03967c52
pci-swiotlb_64.c 1.74 KB