Freed the gem object after completion of dsb workload.

Cc: Shashank Sharma <[email protected]>
Cc: Jani Nikula <[email protected]>
Cc: Rodrigo Vivi <[email protected]>
Signed-off-by: Animesh Manna <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_dsb.c | 23 +++++++++++++++++++++++
 drivers/gpu/drm/i915/display/intel_dsb.h |  1 +
 2 files changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c 
b/drivers/gpu/drm/i915/display/intel_dsb.c
index 7e0a9b37f702..bfb138952f61 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@ -234,3 +234,26 @@ void intel_dsb_commit(struct intel_dsb *dsb)
        dsb->free_pos = 0;
        intel_dsb_disable_engine(dsb);
 }
+
+void intel_dsb_put(struct intel_dsb *dsb)
+{
+       struct intel_crtc *crtc;
+       struct drm_i915_private *i915;
+       struct i915_vma *vma;
+
+       if (!dsb)
+               return;
+
+       crtc = dsb->crtc;
+       i915 = to_i915(crtc->base.dev);
+
+       if (dsb->cmd_buf) {
+               vma = dsb->vma;
+               mutex_lock(&i915->drm.struct_mutex);
+               crtc->dsb_in_use--;
+               i915_gem_object_unpin_map(vma->obj);
+               i915_vma_unpin_and_release(&vma, 0);
+               dsb->cmd_buf = NULL;
+               mutex_unlock(&i915->drm.struct_mutex);
+       }
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dsb.h 
b/drivers/gpu/drm/i915/display/intel_dsb.h
index 7330add3c96f..7b94fd9bc067 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.h
+++ b/drivers/gpu/drm/i915/display/intel_dsb.h
@@ -43,5 +43,6 @@ struct intel_dsb *
 intel_dsb_get(struct intel_crtc *crtc);
 void intel_dsb_reg_write(struct intel_dsb *dsb, i915_reg_t reg, u32 val);
 void intel_dsb_commit(struct intel_dsb *dsb);
+void intel_dsb_put(struct intel_dsb *dsb);
 
 #endif
-- 
2.22.0

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

Reply via email to