]> www.infradead.org Git - users/hch/dma-mapping.git/commitdiff
drm/nouveau: stop using is_swiotlb_active dma-mapping-6.5-2023-06-28
authorChristoph Hellwig <hch@lst.de>
Fri, 7 Apr 2023 06:31:30 +0000 (08:31 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 7 Jun 2023 13:11:26 +0000 (15:11 +0200)
Drivers have no business looking into dma-mapping internals and check
what backend is used.  Unfortunstely the DRM core is still broken and
tries to do plain page allocations instead of using DMA API allocators
by default and uses various bandaids on when to use dma_alloc_coherent.

Switch nouveau to use the same (broken) scheme as amdgpu and radeon
to remove the last driver user of is_swiotlb_active.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Lyude Paul <lyude@redhat.com>
drivers/gpu/drm/nouveau/nouveau_ttm.c

index 1469a88910e45d7d401c3447e8b5149c2932c304..486f39f31a38df3a6b078a2959945944c028ff69 100644 (file)
@@ -24,9 +24,9 @@
  */
 
 #include <linux/limits.h>
-#include <linux/swiotlb.h>
 
 #include <drm/ttm/ttm_range_manager.h>
+#include <drm/drm_cache.h>
 
 #include "nouveau_drv.h"
 #include "nouveau_gem.h"
@@ -265,7 +265,6 @@ nouveau_ttm_init(struct nouveau_drm *drm)
        struct nvkm_pci *pci = device->pci;
        struct nvif_mmu *mmu = &drm->client.mmu;
        struct drm_device *dev = drm->dev;
-       bool need_swiotlb = false;
        int typei, ret;
 
        ret = nouveau_ttm_init_host(drm, 0);
@@ -300,13 +299,10 @@ nouveau_ttm_init(struct nouveau_drm *drm)
                drm->agp.cma = pci->agp.cma;
        }
 
-#if IS_ENABLED(CONFIG_SWIOTLB) && IS_ENABLED(CONFIG_X86)
-       need_swiotlb = is_swiotlb_active(dev->dev);
-#endif
-
        ret = ttm_device_init(&drm->ttm.bdev, &nouveau_bo_driver, drm->dev->dev,
                                  dev->anon_inode->i_mapping,
-                                 dev->vma_offset_manager, need_swiotlb,
+                                 dev->vma_offset_manager,
+                                 drm_need_swiotlb(drm->client.mmu.dmabits),
                                  drm->client.mmu.dmabits <= 32);
        if (ret) {
                NV_ERROR(drm, "error initialising bo driver, %d\n", ret);