[PATCH 3/6] drm/i915: ttm move/clear logic fix
Robert Beckett
bob.beckett at collabora.com
Wed Apr 6 15:16:31 UTC 2022
Signed-off-by: Robert Beckett <bob.beckett at collabora.com>
---
drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
index 1a7dfc3f6701..0d2a988eaea5 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
@@ -3,6 +3,7 @@
* Copyright © 2021 Intel Corporation
*/
+#include "drm/ttm/ttm_tt.h"
#include <drm/ttm/ttm_bo_driver.h>
#include "i915_deps.h"
@@ -482,6 +483,22 @@ prev_deps(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx,
return ret;
}
+static bool
+allow_clear(struct drm_i915_gem_object *obj, struct ttm_tt *ttm)
+{
+ /*
+ * we want to clear user buffers and any kernel buffers
+ * that specifically request clearing.
+ */
+ if (obj->flags & I915_BO_ALLOC_USER)
+ return true;
+
+ if (ttm && ttm->page_flags & TTM_TT_FLAG_ZERO_ALLOC)
+ return true;
+
+ return false;
+}
+
/**
* i915_ttm_move - The TTM move callback used by i915.
* @bo: The buffer object.
@@ -532,7 +549,7 @@ int i915_ttm_move(struct ttm_buffer_object *bo, bool evict,
return PTR_ERR(dst_rsgt);
clear = !i915_ttm_cpu_maps_iomem(bo->resource) && (!ttm || !ttm_tt_is_populated(ttm));
- if (!(clear && ttm && !(ttm->page_flags & TTM_TT_FLAG_ZERO_ALLOC))) {
+ if (!clear || allow_clear(obj, ttm)) {
struct i915_deps deps;
i915_deps_init(&deps, GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN);
--
2.25.1
More information about the Intel-gfx-trybot
mailing list