Re: [PATCH] drm/ttm: revert "make TT creation purely optional v3"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 11.08.20 um 11:24 schrieb Christian König:
This reverts commit 2ddef17678bc2ea1d20517dd2b4ed4aa967ffa8b.

As it turned out VMWGFX needs a much wider audit to fix this.

Signed-off-by: Christian König <christian.koenig@xxxxxxx>

Dare to give me an rb for this? I already tested on amdgpu and it should be fixing the VMWGFX problems we currently have.

Thanks,
Christian.

---
  drivers/gpu/drm/ttm/ttm_bo.c      | 19 ++++++++++++++++---
  drivers/gpu/drm/ttm/ttm_bo_util.c |  7 ++-----
  drivers/gpu/drm/ttm/ttm_bo_vm.c   |  5 -----
  drivers/gpu/drm/ttm/ttm_tt.c      |  1 +
  4 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index ad09329b62d3..42386bda32fe 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -656,7 +656,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo,
  		ttm_bo_wait(bo, false, false);
ttm_bo_cleanup_memtype_use(bo);
-		return 0;
+		return ttm_tt_create(bo, false);
  	}
evict_mem = bo->mem;
@@ -1191,8 +1191,13 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
  	/*
  	 * Remove the backing store if no placement is given.
  	 */
-	if (!placement->num_placement && !placement->num_busy_placement)
-		return ttm_bo_pipeline_gutting(bo);
+	if (!placement->num_placement && !placement->num_busy_placement) {
+		ret = ttm_bo_pipeline_gutting(bo);
+		if (ret)
+			return ret;
+
+		return ttm_tt_create(bo, false);
+	}
/*
  	 * Check whether we need to move buffer.
@@ -1209,6 +1214,14 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
  		ttm_flag_masked(&bo->mem.placement, new_flags,
  				~TTM_PL_MASK_MEMTYPE);
  	}
+	/*
+	 * We might need to add a TTM.
+	 */
+	if (bo->mem.mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
+		ret = ttm_tt_create(bo, true);
+		if (ret)
+			return ret;
+	}
  	return 0;
  }
  EXPORT_SYMBOL(ttm_bo_validate);
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 496158acd5b9..76376dc71f25 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -531,15 +531,12 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
  		.interruptible = false,
  		.no_wait_gpu = false
  	};
-	struct ttm_tt *ttm;
+	struct ttm_tt *ttm = bo->ttm;
  	pgprot_t prot;
  	int ret;
- ret = ttm_tt_create(bo, true);
-	if (ret)
-		return ret;
+	BUG_ON(!ttm);
- ttm = bo->ttm;
  	ret = ttm_tt_populate(ttm, &ctx);
  	if (ret)
  		return ret;
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index ba2e8bd198ad..e90c5c806645 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -347,11 +347,6 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,
}; - if (ttm_tt_create(bo, true)) {
-			ret = VM_FAULT_OOM;
-			goto out_io_unlock;
-		}
-
  		ttm = bo->ttm;
  		if (ttm_tt_populate(bo->ttm, &ctx)) {
  			ret = VM_FAULT_OOM;
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index bdd6169cef13..05c9147ac6d3 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -70,6 +70,7 @@ int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)
  		page_flags |= TTM_PAGE_FLAG_SG;
  		break;
  	default:
+		bo->ttm = NULL;
  		pr_err("Illegal buffer object type\n");
  		return -EINVAL;
  	}

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux