[Intel-gfx] [PATCH] drm/i915: Serialise presentation with imported dmabufs

Chris Wilson chris at chris-wilson.co.uk
Tue Jun 14 15:03:57 UTC 2016


obj->base.dma_buf represents a dma-buf exported from this object (for
use by others). On the contrary, ob->base.import_attach represents the
source dma-buf that was used to create this object (if any). When
serialising with third parties, we want to wait on their rendering via
the import attachment (and not our own via the dma_buf export).

Note that for an object exported from i915 and passed to another i915
client, we do not create the import attachment and so serialisation will
use our native paths.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Alex Goins <agoins at nvidia.com>
Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 801e4c17dd8d..cbaa2e6f7679 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11425,8 +11425,8 @@ static bool use_mmio_flip(struct intel_engine_cs *engine,
 		return true;
 	else if (i915.enable_execlists)
 		return true;
-	else if (obj->base.dma_buf &&
-		 !reservation_object_test_signaled_rcu(obj->base.dma_buf->resv,
+	else if (obj->base.import_attach &&
+		 !reservation_object_test_signaled_rcu(obj->base.import_attach->dmabuf->resv,
 						       false))
 		return true;
 	else
@@ -11526,8 +11526,8 @@ static void intel_mmio_flip_work_func(struct work_struct *w)
 					    &dev_priv->rps.mmioflips));
 
 	/* For framebuffer backed by dmabuf, wait for fence */
-	if (obj->base.dma_buf)
-		WARN_ON(reservation_object_wait_timeout_rcu(obj->base.dma_buf->resv,
+	if (obj->base.import_attach)
+		WARN_ON(reservation_object_wait_timeout_rcu(obj->base.import_attach->dmabuf->resv,
 							    false, false,
 							    MAX_SCHEDULE_TIMEOUT) < 0);
 
@@ -13952,10 +13952,10 @@ intel_prepare_plane_fb(struct drm_plane *plane,
 	}
 
 	/* For framebuffer backed by dmabuf, wait for fence */
-	if (obj && obj->base.dma_buf) {
+	if (obj && obj->base.import_attach) {
 		long lret;
 
-		lret = reservation_object_wait_timeout_rcu(obj->base.dma_buf->resv,
+		lret = reservation_object_wait_timeout_rcu(obj->base.import_attach->dmabuf->resv,
 							   false, true,
 							   MAX_SCHEDULE_TIMEOUT);
 		if (lret == -ERESTARTSYS)
-- 
2.8.1



More information about the Intel-gfx mailing list