drm/ttm: add ttm_tt_populate wrapper
authorChristian König <christian.koenig@amd.com>
Thu, 1 Feb 2018 13:39:29 +0000 (14:39 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 19 Feb 2018 19:19:52 +0000 (14:19 -0500)
Stop calling the driver callback directly.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Roger He <Hongbo.He@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/ttm/ttm_bo_util.c
drivers/gpu/drm/ttm/ttm_bo_vm.c
drivers/gpu/drm/ttm/ttm_tt.c
include/drm/ttm/ttm_bo_driver.h

index 33ffe28..38da690 100644 (file)
@@ -375,8 +375,8 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
        /*
         * TTM might be null for moves within the same region.
         */
-       if (ttm && ttm->state == tt_unpopulated) {
-               ret = ttm->bdev->driver->ttm_tt_populate(ttm, ctx);
+       if (ttm) {
+               ret = ttm_tt_populate(ttm, ctx);
                if (ret)
                        goto out1;
        }
@@ -557,11 +557,9 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
 
        BUG_ON(!ttm);
 
-       if (ttm->state == tt_unpopulated) {
-               ret = ttm->bdev->driver->ttm_tt_populate(ttm, &ctx);
-               if (ret)
-                       return ret;
-       }
+       ret = ttm_tt_populate(ttm, &ctx);
+       if (ret)
+               return ret;
 
        if (num_pages == 1 && (mem->placement & TTM_PL_FLAG_CACHED)) {
                /*
index 716e724..610d671 100644 (file)
@@ -234,7 +234,7 @@ static int ttm_bo_vm_fault(struct vm_fault *vmf)
                                                cvma.vm_page_prot);
 
                /* Allocate all page at once, most common usage */
-               if (ttm->bdev->driver->ttm_tt_populate(ttm, &ctx)) {
+               if (ttm_tt_populate(ttm, &ctx)) {
                        ret = VM_FAULT_OOM;
                        goto out_io_unlock;
                }
index 95a77da..39c44e3 100644 (file)
@@ -276,7 +276,7 @@ int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem,
        if (ttm->state == tt_bound)
                return 0;
 
-       ret = ttm->bdev->driver->ttm_tt_populate(ttm, ctx);
+       ret = ttm_tt_populate(ttm, ctx);
        if (ret)
                return ret;
 
@@ -392,6 +392,14 @@ out_err:
        return ret;
 }
 
+int ttm_tt_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)
+{
+       if (ttm->state != tt_unpopulated)
+               return 0;
+
+       return ttm->bdev->driver->ttm_tt_populate(ttm, ctx);
+}
+
 static void ttm_tt_clear_mapping(struct ttm_tt *ttm)
 {
        pgoff_t i;
index 9b417eb..2bac25a 100644 (file)
@@ -701,6 +701,15 @@ int ttm_tt_set_placement_caching(struct ttm_tt *ttm, uint32_t placement);
 int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistent_swap_storage);
 
 /**
+ * ttm_tt_populate - allocate pages for a ttm
+ *
+ * @ttm: Pointer to the ttm_tt structure
+ *
+ * Calls the driver method to allocate pages for a ttm
+ */
+int ttm_tt_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx);
+
+/**
  * ttm_tt_unpopulate - free pages from a ttm
  *
  * @ttm: Pointer to the ttm_tt structure