xf86-video-intel: 3 commits - configure.ac src/sna/sna_accel.c src/sna/sna_display.c src/sna/sna_dri.c

Chris Wilson ickle at kemper.freedesktop.org
Mon Dec 16 03:29:28 PST 2013


 configure.ac          |    1 +
 src/sna/sna_accel.c   |    1 -
 src/sna/sna_display.c |    1 +
 src/sna/sna_dri.c     |   20 ++++++++++++++++++++
 4 files changed, 22 insertions(+), 1 deletion(-)

New commits:
commit 660fbdac8da1f43749007f126201681023a677e1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Dec 15 10:41:22 2013 +0000

    sna: Remove stale assertion
    
    Now that we do not remove the move-to-gpu for a plain read from the
    TearFree buffer, it is viable to use that buffer as source for cloning.
    So we need to kill the stale assertion.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 5df49b3..f1be82a 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1762,7 +1762,6 @@ sna_pixmap_make_cow(struct sna *sna,
 	struct sna_cow *cow;
 
 	assert(src_priv->gpu_bo);
-	assert(src_priv->move_to_gpu == NULL);
 
 	if (!USE_COW)
 		return false;
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 15e32df..5810dd1 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4357,6 +4357,7 @@ static bool wait_for_shadow(struct sna *sna, struct sna_pixmap *priv, unsigned f
 		return true;
 
 	assert(sna->mode.shadow_active);
+	assert(bo == sna->mode.shadow);
 
 	assert(priv->gpu_bo->refcnt >= 1);
 	sna->mode.shadow = priv->gpu_bo;
commit 989198f3ddc763000702bd1eaeb54002e18a8f04
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Dec 15 09:45:24 2013 +0000

    intel-virtual-output: Disable build if timerfd is not present
    
    Otherwise the build breaks on *BSD.
    
    Reported-by: Yuta SATOH <nigoro.gentoo at 0x100.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=72707
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/configure.ac b/configure.ac
index dcb09fb..9eece7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -184,6 +184,7 @@ PKG_CHECK_MODULES(TOOL, [xinerama xrandr xdamage xfixes xcursor xtst xrender xex
 if test "x$tools" = "xyes"; then
   AC_CHECK_HEADER([sys/ipc.h], [], [tools=no])
   AC_CHECK_HEADER([sys/shm.h], [], [tools=no])
+  AC_CHECK_HEADER([sys/timerfd.h], [], [tools=no])
 
   if test "$ac_cv_header_sys_ipc_h" = "yes" -a "$ac_cv_header_sys_shm_h" = "yes"; then
       AC_MSG_CHECKING(whether shmctl IPC_RMID allows subsequent attaches)
commit c8e339edd31859820907115c8d618b0fec3ef227
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Dec 15 09:39:54 2013 +0000

    sna: Avoid recursive out-of-order operations in the middle of TearFree
    
    During TearFree, if we have to wait for the shadow flip to complete, we
    run the event handler for the device. This can then cause us to evaluate
    pending completed vblank events, which may in turn then attempt to use
    the shadow bo and recurse into the TearFree handler. Try to prevent this
    and requeue the vblank event.
    
    Reported-by: Pascal de Bruijn <pmjdebruijn at pcode.nl>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=72690
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 34d2044..bf970e0 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -1353,6 +1353,24 @@ void sna_dri_vblank_handler(struct sna *sna, struct drm_event_vblank *event)
 	if (draw == NULL)
 		goto done;
 
+	if (sna->mode.shadow_flip && !sna->mode.shadow_damage) {
+		drmVBlank vbl;
+
+		/* recursed from wait_for_shadow(), simply requeue */
+		VG_CLEAR(vbl);
+		vbl.request.type =
+			DRM_VBLANK_RELATIVE |
+			DRM_VBLANK_EVENT |
+			pipe_select(info->pipe);
+		vbl.request.sequence = 1;
+		vbl.request.signal = (unsigned long)info;
+
+		if (sna_wait_vblank(sna, &vbl))
+			goto done;
+
+		return;
+	}
+
 	switch (info->type) {
 	case DRI2_FLIP:
 		/* If we can still flip... */
@@ -1617,6 +1635,8 @@ static void sna_dri_flip_event(struct sna *sna,
 	     flip->fe_tv_usec,
 	     flip->type));
 
+	assert(!sna->mode.shadow_flip);
+
 	if (flip->scanout[1].bo) {
 		struct dri_bo *c = NULL;
 


More information about the xorg-commit mailing list