drm/ttm: remove TTM_MEMTYPE_FLAG_CMA
authorChristian König <christian.koenig@amd.com>
Wed, 15 Jul 2020 12:52:05 +0000 (14:52 +0200)
committerChristian König <christian.koenig@amd.com>
Tue, 21 Jul 2020 14:21:43 +0000 (16:21 +0200)
The original intention was to avoid CPU page table unmaps
when BOs move between the GTT and SYSTEM domain.

The problem is that this never correctly handled changes
in the caching attributes or backing pages.

Just drop this for now and simply unmap the CPU page
tables in all cases.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/378240/
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
include/drm/ttm/ttm_bo_driver.h

index 9c0f12f74af92d6adfeffcbda368cc4891524d7a..44fa8bc49d18f571798677e6927922a2ca426f83 100644 (file)
@@ -93,7 +93,7 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
                man->func = &amdgpu_gtt_mgr_func;
                man->available_caching = TTM_PL_MASK_CACHING;
                man->default_caching = TTM_PL_FLAG_CACHED;
-               man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA;
+               man->flags = TTM_MEMTYPE_FLAG_MAPPABLE;
                break;
        case TTM_PL_VRAM:
                /* "On-card" video ram */
@@ -108,7 +108,7 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
        case AMDGPU_PL_OA:
                /* On-chip GDS memory*/
                man->func = &ttm_bo_manager_func;
-               man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_CMA;
+               man->flags = TTM_MEMTYPE_FLAG_FIXED;
                man->available_caching = TTM_PL_FLAG_UNCACHED;
                man->default_caching = TTM_PL_FLAG_UNCACHED;
                break;
index a1037478fa3f7774bf30069b87251b3d2e3cc88f..7883341f8c831f8de7071dbc30b633ed79176fff 100644 (file)
@@ -695,8 +695,7 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
                                TTM_PL_FLAG_WC;
                        man->default_caching = TTM_PL_FLAG_WC;
                } else {
-                       man->flags = TTM_MEMTYPE_FLAG_MAPPABLE |
-                                    TTM_MEMTYPE_FLAG_CMA;
+                       man->flags = TTM_MEMTYPE_FLAG_MAPPABLE;
                        man->available_caching = TTM_PL_MASK_CACHING;
                        man->default_caching = TTM_PL_FLAG_CACHED;
                }
index 73085523fad7ed2476a9196a760a1c7b1563565b..54af06df865ba310204a6994533728b2a916ad48 100644 (file)
@@ -84,7 +84,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
                man->func = &ttm_bo_manager_func;
                man->available_caching = TTM_PL_MASK_CACHING;
                man->default_caching = TTM_PL_FLAG_CACHED;
-               man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA;
+               man->flags = TTM_MEMTYPE_FLAG_MAPPABLE;
 #if IS_ENABLED(CONFIG_AGP)
                if (rdev->flags & RADEON_IS_AGP) {
                        if (!rdev->ddev->agp) {
index 8b9e7f62bea71896110f69caf83fcce97f8fb482..0768a054a91666c66e8d7bc624cc7d03b286660e 100644 (file)
@@ -272,20 +272,15 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
                                  struct ttm_operation_ctx *ctx)
 {
        struct ttm_bo_device *bdev = bo->bdev;
-       bool old_is_pci = ttm_mem_reg_is_pci(bdev, &bo->mem);
-       bool new_is_pci = ttm_mem_reg_is_pci(bdev, mem);
        struct ttm_mem_type_manager *old_man = &bdev->man[bo->mem.mem_type];
        struct ttm_mem_type_manager *new_man = &bdev->man[mem->mem_type];
-       int ret = 0;
+       int ret;
 
-       if (old_is_pci || new_is_pci ||
-           ((mem->placement & bo->mem.placement & TTM_PL_MASK_CACHING) == 0)) {
-               ret = ttm_mem_io_lock(old_man, true);
-               if (unlikely(ret != 0))
-                       goto out_err;
-               ttm_bo_unmap_virtual_locked(bo);
-               ttm_mem_io_unlock(old_man);
-       }
+       ret = ttm_mem_io_lock(old_man, true);
+       if (unlikely(ret != 0))
+               goto out_err;
+       ttm_bo_unmap_virtual_locked(bo);
+       ttm_mem_io_unlock(old_man);
 
        /*
         * Create and bind a ttm if required.
@@ -1698,23 +1693,6 @@ EXPORT_SYMBOL(ttm_bo_device_init);
  * buffer object vm functions.
  */
 
-bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
-{
-       struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
-
-       if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
-               if (mem->mem_type == TTM_PL_SYSTEM)
-                       return false;
-
-               if (man->flags & TTM_MEMTYPE_FLAG_CMA)
-                       return false;
-
-               if (mem->placement & TTM_PL_FLAG_CACHED)
-                       return false;
-       }
-       return true;
-}
-
 void ttm_bo_unmap_virtual_locked(struct ttm_buffer_object *bo)
 {
        struct ttm_bo_device *bdev = bo->bdev;
index bfd0c54ec30a0d93877d61039c0038a60012544d..6bea7548aee0bc81e1cf2367ea796a5d07a04d47 100644 (file)
@@ -762,7 +762,7 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
                 *  slots as well as the bo size.
                 */
                man->func = &vmw_gmrid_manager_func;
-               man->flags = TTM_MEMTYPE_FLAG_CMA | TTM_MEMTYPE_FLAG_MAPPABLE;
+               man->flags = TTM_MEMTYPE_FLAG_MAPPABLE;
                man->available_caching = TTM_PL_FLAG_CACHED;
                man->default_caching = TTM_PL_FLAG_CACHED;
                break;
index 45522e4fbd6b4ea8d7f295d1188d0d865663cdea..71b195e78c7cffc066978ef39d9b1f78cefe83f9 100644 (file)
@@ -47,7 +47,6 @@
 
 #define TTM_MEMTYPE_FLAG_FIXED         (1 << 0)        /* Fixed (on-card) PCI memory */
 #define TTM_MEMTYPE_FLAG_MAPPABLE      (1 << 1)        /* Memory mappable */
-#define TTM_MEMTYPE_FLAG_CMA           (1 << 3)        /* Can't map aperture */
 
 struct ttm_mem_type_manager;