Similar to how we already split the bind_vma for ggtt/aliasing_gtt, also
split up the unbind for symmetry.

Signed-off-by: Chris Wilson <[email protected]>
Reviewed-by: Matthew Auld <[email protected]>
---
 drivers/gpu/drm/i915/i915_gem_gtt.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index c3ebc965386e..2b86ec376480 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2642,6 +2642,15 @@ static int ggtt_bind_vma(struct i915_vma *vma,
        return 0;
 }
 
+static void ggtt_unbind_vma(struct i915_vma *vma)
+{
+       struct drm_i915_private *i915 = vma->vm->i915;
+
+       intel_runtime_pm_get(i915);
+       vma->vm->clear_range(vma->vm, vma->node.start, vma->size);
+       intel_runtime_pm_put(i915);
+}
+
 static int aliasing_gtt_bind_vma(struct i915_vma *vma,
                                 enum i915_cache_level cache_level,
                                 u32 flags)
@@ -2678,22 +2687,21 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
        return 0;
 }
 
-static void ggtt_unbind_vma(struct i915_vma *vma)
+static void aliasing_gtt_unbind_vma(struct i915_vma *vma)
 {
        struct drm_i915_private *i915 = vma->vm->i915;
-       struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
-       const u64 size = min(vma->size, vma->node.size);
 
        if (vma->flags & I915_VMA_GLOBAL_BIND) {
                intel_runtime_pm_get(i915);
-               vma->vm->clear_range(vma->vm,
-                                    vma->node.start, size);
+               vma->vm->clear_range(vma->vm, vma->node.start, vma->size);
                intel_runtime_pm_put(i915);
        }
 
-       if (vma->flags & I915_VMA_LOCAL_BIND && appgtt)
-               appgtt->base.clear_range(&appgtt->base,
-                                        vma->node.start, size);
+       if (vma->flags & I915_VMA_LOCAL_BIND) {
+               struct i915_address_space *vm = &i915->mm.aliasing_ppgtt->base;
+
+               vm->clear_range(vm, vma->node.start, vma->size);
+       }
 }
 
 void i915_gem_gtt_finish_pages(struct drm_i915_gem_object *obj,
@@ -2742,6 +2750,7 @@ int i915_gem_init_aliasing_ppgtt(struct drm_i915_private 
*i915)
        if (IS_ERR(ppgtt))
                return PTR_ERR(ppgtt);
 
+
        if (ppgtt->base.allocate_va_range) {
                err = ppgtt->base.allocate_va_range(&ppgtt->base,
                                                    0, ppgtt->base.total);
@@ -2754,9 +2763,13 @@ int i915_gem_init_aliasing_ppgtt(struct drm_i915_private 
*i915)
                                ppgtt->base.total);
 
        i915->mm.aliasing_ppgtt = ppgtt;
+
        WARN_ON(ggtt->base.bind_vma != ggtt_bind_vma);
        ggtt->base.bind_vma = aliasing_gtt_bind_vma;
 
+       WARN_ON(ggtt->base.unbind_vma != ggtt_unbind_vma);
+       ggtt->base.unbind_vma = aliasing_gtt_unbind_vma;
+
        return 0;
 
 err_ppgtt:
@@ -2776,6 +2789,7 @@ void i915_gem_fini_aliasing_ppgtt(struct drm_i915_private 
*i915)
        i915_ppgtt_put(ppgtt);
 
        ggtt->base.bind_vma = ggtt_bind_vma;
+       ggtt->base.unbind_vma = ggtt_unbind_vma;
 }
 
 int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to