* [CI] drm/i915: Serialise presentation with imported dmabufs
@ 2016-06-17 7:28 Chris Wilson
2016-06-17 7:54 ` ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3) Patchwork
0 siblings, 1 reply; 5+ messages in thread
From: Chris Wilson @ 2016-06-17 7:28 UTC (permalink / raw)
To: intel-gfx
obj->base.dma_buf represents a dma-buf exported from this object (for
use by others). On the contrary, obj->base.import_attach represents the
source dma-buf that was used to create this object (if any). When
serialising with third parties, we need to wait on their rendering via
the import attachment as well as their rendering on our exported
dma-buf.
v2: Wait on both import and export.
v3: Rebase
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Alex Goins <agoins@nvidia.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Tested-by: Alex Goins <agoins@nvidia.com> #v2
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> #v2
---
drivers/gpu/drm/i915/i915_gem_dmabuf.h | 45 ++++++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/intel_display.c | 37 ++++++++++++++++------------
2 files changed, 66 insertions(+), 16 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_gem_dmabuf.h
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.h b/drivers/gpu/drm/i915/i915_gem_dmabuf.h
new file mode 100644
index 000000000000..91315557e421
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _I915_GEM_DMABUF_H_
+#define _I915_GEM_DMABUF_H_
+
+#include <linux/dma-buf.h>
+
+static inline struct reservation_object *
+i915_gem_object_get_dmabuf_resv(struct drm_i915_gem_object *obj)
+{
+ struct dma_buf *dma_buf;
+
+ if (obj->base.dma_buf)
+ dma_buf = obj->base.dma_buf;
+ else if (obj->base.import_attach)
+ dma_buf = obj->base.import_attach->dmabuf;
+ else
+ return NULL;
+
+ return dma_buf->resv;
+}
+
+#endif
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9a7f0bba69f4..8c6f4e2a2cb8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -36,6 +36,7 @@
#include "intel_drv.h"
#include <drm/i915_drm.h>
#include "i915_drv.h"
+#include "i915_gem_dmabuf.h"
#include "intel_dsi.h"
#include "i915_trace.h"
#include <drm/drm_atomic.h>
@@ -46,7 +47,6 @@
#include <drm/drm_rect.h>
#include <linux/dma_remapping.h>
#include <linux/reservation.h>
-#include <linux/dma-buf.h>
static bool is_mmio_work(struct intel_flip_work *work)
{
@@ -11429,6 +11429,8 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
static bool use_mmio_flip(struct intel_engine_cs *engine,
struct drm_i915_gem_object *obj)
{
+ struct reservation_object *resv;
+
/*
* This is not being used for older platforms, because
* non-availability of flip done interrupt forces us to use
@@ -11449,12 +11451,12 @@ 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,
- false))
+
+ resv = i915_gem_object_get_dmabuf_resv(obj);
+ if (resv && !reservation_object_test_signaled_rcu(resv, false))
return true;
- else
- return engine != i915_gem_request_get_engine(obj->last_write_req);
+
+ return engine != i915_gem_request_get_engine(obj->last_write_req);
}
static void skl_do_mmio_flip(struct intel_crtc *intel_crtc,
@@ -11543,6 +11545,7 @@ static void intel_mmio_flip_work_func(struct work_struct *w)
struct intel_framebuffer *intel_fb =
to_intel_framebuffer(crtc->base.primary->fb);
struct drm_i915_gem_object *obj = intel_fb->obj;
+ struct reservation_object *resv;
if (work->flip_queued_req)
WARN_ON(__i915_wait_request(work->flip_queued_req,
@@ -11550,9 +11553,9 @@ 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,
- false, false,
+ resv = i915_gem_object_get_dmabuf_resv(obj);
+ if (resv)
+ WARN_ON(reservation_object_wait_timeout_rcu(resv, false, false,
MAX_SCHEDULE_TIMEOUT) < 0);
intel_pipe_update_start(crtc);
@@ -14032,6 +14035,7 @@ intel_prepare_plane_fb(struct drm_plane *plane,
struct drm_framebuffer *fb = new_state->fb;
struct drm_i915_gem_object *obj = intel_fb_obj(fb);
struct drm_i915_gem_object *old_obj = intel_fb_obj(plane->state->fb);
+ struct reservation_object *resv;
int ret = 0;
if (!obj && !old_obj)
@@ -14061,12 +14065,15 @@ intel_prepare_plane_fb(struct drm_plane *plane,
}
}
+ if (!obj)
+ return 0;
+
/* For framebuffer backed by dmabuf, wait for fence */
- if (obj && obj->base.dma_buf) {
+ resv = i915_gem_object_get_dmabuf_resv(obj);
+ if (resv) {
long lret;
- lret = reservation_object_wait_timeout_rcu(obj->base.dma_buf->resv,
- false, true,
+ lret = reservation_object_wait_timeout_rcu(resv, false, true,
MAX_SCHEDULE_TIMEOUT);
if (lret == -ERESTARTSYS)
return lret;
@@ -14074,9 +14081,7 @@ intel_prepare_plane_fb(struct drm_plane *plane,
WARN(lret < 0, "waiting returns %li\n", lret);
}
- if (!obj) {
- ret = 0;
- } else if (plane->type == DRM_PLANE_TYPE_CURSOR &&
+ if (plane->type == DRM_PLANE_TYPE_CURSOR &&
INTEL_INFO(dev)->cursor_needs_physical) {
int align = IS_I830(dev) ? 16 * 1024 : 256;
ret = i915_gem_object_attach_phys(obj, align);
@@ -14086,7 +14091,7 @@ intel_prepare_plane_fb(struct drm_plane *plane,
ret = intel_pin_and_fence_fb_obj(fb, new_state->rotation);
}
- if (ret == 0 && obj) {
+ if (ret == 0) {
struct intel_plane_state *plane_state =
to_intel_plane_state(new_state);
--
2.8.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 5+ messages in thread
* ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3)
2016-06-17 7:28 [CI] drm/i915: Serialise presentation with imported dmabufs Chris Wilson
@ 2016-06-17 7:54 ` Patchwork
2016-06-17 8:02 ` Chris Wilson
0 siblings, 1 reply; 5+ messages in thread
From: Patchwork @ 2016-06-17 7:54 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Serialise presentation with imported dmabufs (rev3)
URL : https://patchwork.freedesktop.org/series/8689/
State : failure
== Summary ==
Series 8689v3 drm/i915: Serialise presentation with imported dmabufs
http://patchwork.freedesktop.org/api/1.0/series/8689/revisions/3/mbox
Test gem_exec_flush:
Subgroup basic-batch-kernel-default-cmd:
fail -> PASS (ro-byt-n2820)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup basic-flip-vs-modeset:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup basic-flip-vs-wf_vblank:
pass -> SKIP (fi-bdw-i7-5557u)
pass -> DMESG-FAIL (ro-bdw-i5-5250u)
Subgroup basic-plain-flip:
pass -> SKIP (fi-bdw-i7-5557u)
Test kms_frontbuffer_tracking:
Subgroup basic:
pass -> SKIP (fi-bdw-i7-5557u)
Test kms_pipe_crc_basic:
Subgroup hang-read-crc-pipe-a:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup hang-read-crc-pipe-b:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup hang-read-crc-pipe-c:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup nonblocking-crc-pipe-a:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup nonblocking-crc-pipe-b:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup nonblocking-crc-pipe-b-frame-sequence:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup nonblocking-crc-pipe-c:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup nonblocking-crc-pipe-c-frame-sequence:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup read-crc-pipe-a:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup read-crc-pipe-b:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup read-crc-pipe-c:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup read-crc-pipe-c-frame-sequence:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup suspend-read-crc-pipe-a:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup suspend-read-crc-pipe-b:
pass -> SKIP (fi-bdw-i7-5557u)
skip -> DMESG-WARN (ro-bdw-i5-5250u)
Subgroup suspend-read-crc-pipe-c:
pass -> SKIP (fi-bdw-i7-5557u)
skip -> DMESG-WARN (ro-bdw-i5-5250u)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> SKIP (fi-bdw-i7-5557u)
Subgroup basic-rte:
pass -> SKIP (fi-bdw-i7-5557u)
fi-bdw-i7-5557u total:213 pass:176 dwarn:0 dfail:0 fail:0 skip:37
fi-skl-i5-6260u total:213 pass:202 dwarn:0 dfail:0 fail:0 skip:11
fi-skl-i7-6700k total:213 pass:188 dwarn:0 dfail:0 fail:0 skip:25
fi-snb-i7-2600 total:213 pass:174 dwarn:0 dfail:0 fail:0 skip:39
ro-bdw-i5-5250u total:213 pass:196 dwarn:3 dfail:1 fail:0 skip:13
ro-bdw-i7-5557U total:213 pass:198 dwarn:0 dfail:0 fail:0 skip:15
ro-bdw-i7-5600u total:213 pass:185 dwarn:0 dfail:0 fail:0 skip:28
ro-bsw-n3050 total:213 pass:172 dwarn:0 dfail:0 fail:2 skip:39
ro-byt-n2820 total:213 pass:174 dwarn:0 dfail:0 fail:2 skip:37
ro-hsw-i3-4010u total:213 pass:190 dwarn:0 dfail:0 fail:0 skip:23
ro-hsw-i7-4770r total:213 pass:190 dwarn:0 dfail:0 fail:0 skip:23
ro-ilk-i7-620lm total:213 pass:150 dwarn:0 dfail:0 fail:1 skip:62
ro-ilk1-i5-650 total:208 pass:150 dwarn:0 dfail:0 fail:1 skip:57
ro-ivb-i7-3770 total:213 pass:181 dwarn:0 dfail:0 fail:0 skip:32
ro-ivb2-i7-3770 total:213 pass:185 dwarn:0 dfail:0 fail:0 skip:28
ro-skl3-i5-6260u total:213 pass:201 dwarn:1 dfail:0 fail:0 skip:11
ro-snb-i7-2620M total:213 pass:174 dwarn:0 dfail:0 fail:1 skip:38
fi-hsw-i7-4770k failed to connect after reboot
Results at /archive/results/CI_IGT_test/RO_Patchwork_1201/
3eb202e drm-intel-nightly: 2016y-06m-16d-12h-38m-37s UTC integration manifest
542dced drm/i915: Serialise presentation with imported dmabufs
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3)
2016-06-17 7:54 ` ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3) Patchwork
@ 2016-06-17 8:02 ` Chris Wilson
2016-06-17 8:22 ` Mika Kuoppala
2016-06-17 9:39 ` Chris Wilson
0 siblings, 2 replies; 5+ messages in thread
From: Chris Wilson @ 2016-06-17 8:02 UTC (permalink / raw)
To: intel-gfx
On Fri, Jun 17, 2016 at 07:54:17AM -0000, Patchwork wrote:
> == Series Details ==
>
> Series: drm/i915: Serialise presentation with imported dmabufs (rev3)
> URL : https://patchwork.freedesktop.org/series/8689/
> State : failure
>
> == Summary ==
>
> Series 8689v3 drm/i915: Serialise presentation with imported dmabufs
> http://patchwork.freedesktop.org/api/1.0/series/8689/revisions/3/mbox
>
> Test gem_exec_flush:
> Subgroup basic-batch-kernel-default-cmd:
> fail -> PASS (ro-byt-n2820)
> Test kms_flip:
> Subgroup basic-flip-vs-dpms:
> pass -> SKIP (fi-bdw-i7-5557u)
* pokes fi-bdw-i7-5557u with a red-hot poker
I think it may be on fire.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3)
2016-06-17 8:02 ` Chris Wilson
@ 2016-06-17 8:22 ` Mika Kuoppala
2016-06-17 9:39 ` Chris Wilson
1 sibling, 0 replies; 5+ messages in thread
From: Mika Kuoppala @ 2016-06-17 8:22 UTC (permalink / raw)
To: Chris Wilson, intel-gfx, tomi.p.sarvela
Chris Wilson <chris@chris-wilson.co.uk> writes:
> On Fri, Jun 17, 2016 at 07:54:17AM -0000, Patchwork wrote:
>> == Series Details ==
>>
>> Series: drm/i915: Serialise presentation with imported dmabufs (rev3)
>> URL : https://patchwork.freedesktop.org/series/8689/
>> State : failure
>>
>> == Summary ==
>>
>> Series 8689v3 drm/i915: Serialise presentation with imported dmabufs
>> http://patchwork.freedesktop.org/api/1.0/series/8689/revisions/3/mbox
>>
>> Test gem_exec_flush:
>> Subgroup basic-batch-kernel-default-cmd:
>> fail -> PASS (ro-byt-n2820)
>> Test kms_flip:
>> Subgroup basic-flip-vs-dpms:
>> pass -> SKIP (fi-bdw-i7-5557u)
>
I got the similar trace on my gen9 wa patch.
> * pokes fi-bdw-i7-5557u with a red-hot poker
>
> I think it may be on fire.
No smoke smelling yet but let's send vanguard just
in case. Tomi added.
-Mika
> -Chris
>
> --
> Chris Wilson, Intel Open Source Technology Centre
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3)
2016-06-17 8:02 ` Chris Wilson
2016-06-17 8:22 ` Mika Kuoppala
@ 2016-06-17 9:39 ` Chris Wilson
1 sibling, 0 replies; 5+ messages in thread
From: Chris Wilson @ 2016-06-17 9:39 UTC (permalink / raw)
To: intel-gfx
On Fri, Jun 17, 2016 at 09:02:24AM +0100, Chris Wilson wrote:
> On Fri, Jun 17, 2016 at 07:54:17AM -0000, Patchwork wrote:
> > == Series Details ==
> >
> > Series: drm/i915: Serialise presentation with imported dmabufs (rev3)
> > URL : https://patchwork.freedesktop.org/series/8689/
> > State : failure
> >
> > == Summary ==
> >
> > Series 8689v3 drm/i915: Serialise presentation with imported dmabufs
> > http://patchwork.freedesktop.org/api/1.0/series/8689/revisions/3/mbox
> >
> > Test gem_exec_flush:
> > Subgroup basic-batch-kernel-default-cmd:
> > fail -> PASS (ro-byt-n2820)
> > Test kms_flip:
> > Subgroup basic-flip-vs-dpms:
> > pass -> SKIP (fi-bdw-i7-5557u)
>
> * pokes fi-bdw-i7-5557u with a red-hot poker
Resent to trybot https://patchwork.freedesktop.org/series/8812/ where
fi-bdw-i7-5557u behaved itself this time.
And pushed to dinq.
This may be a candidate for stable, since it will help in reverse PRIME
configurations (where, for instance, nouveau renders to the bo and we
import it for flipping onto scanout).
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-06-17 9:39 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-17 7:28 [CI] drm/i915: Serialise presentation with imported dmabufs Chris Wilson
2016-06-17 7:54 ` ✗ Ro.CI.BAT: failure for drm/i915: Serialise presentation with imported dmabufs (rev3) Patchwork
2016-06-17 8:02 ` Chris Wilson
2016-06-17 8:22 ` Mika Kuoppala
2016-06-17 9:39 ` Chris Wilson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.