xf86-video-intel: src/uxa/intel_display.c

Chris Wilson ickle at kemper.freedesktop.org
Fri Feb 6 16:09:45 PST 2015


 src/uxa/intel_display.c |   19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

New commits:
commit 26ba2ba6e7169a099558092f31eaf97944cc3562
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Feb 6 23:03:11 2015 +0000

    uxa/present: Fix flip_count for aborting on failed flip request
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/uxa/intel_display.c b/src/uxa/intel_display.c
index b2e1c72..83d20c8 100644
--- a/src/uxa/intel_display.c
+++ b/src/uxa/intel_display.c
@@ -1678,7 +1678,7 @@ intel_do_pageflip(intel_screen_private *intel,
 	 * attempts to schedule a second flip before processing the first
 	 * is a bug. Punt it back to the caller.
 	 */
-	if (mode->pageflip.handler)
+	if (mode->flip_count)
 		return FALSE;
 
 	/*
@@ -1705,6 +1705,7 @@ intel_do_pageflip(intel_screen_private *intel,
 	 */
 	mode->fe_msc = 0;
 	mode->fe_usec = 0;
+	memset(&mode->pageflip, 0, sizeof(mode->pageflip));
 
 	flags = DRM_MODE_PAGE_FLIP_EVENT;
 	if (async)
@@ -1734,6 +1735,8 @@ intel_do_pageflip(intel_screen_private *intel,
 			goto error_undo;
 		}
 
+		mode->flip_count++;
+
 		if (drmModePageFlip(mode->fd,
 				    crtc_id(crtc),
 				    new_fb_id,
@@ -1742,7 +1745,6 @@ intel_do_pageflip(intel_screen_private *intel,
 			intel_drm_abort_seq(scrn, seq);
 			goto error_undo;
 		}
-		mode->flip_count++;
 	}
 
 	mode->old_fb_id = mode->fb_id;
@@ -1999,15 +2001,13 @@ intel_drm_handler(int fd, uint32_t frame, uint32_t sec, uint32_t usec, void *use
 static void
 intel_pageflip_complete(struct intel_mode *mode)
 {
-	/* Release framebuffer */
-	drmModeRmFB(mode->fd, mode->old_fb_id);
-
 	if (!mode->pageflip.handler)
 		return;
 
+	/* Release framebuffer */
+	drmModeRmFB(mode->fd, mode->old_fb_id);
 	mode->pageflip.handler(mode->fe_msc, mode->fe_usec,
 			       mode->pageflip.data);
-	memset(&mode->pageflip, 0, sizeof(mode->pageflip));
 }
 
 /*
@@ -2047,6 +2047,7 @@ intel_pageflip_handler(ScrnInfoPtr scrn, xf86CrtcPtr crtc,
 
 	if (!mode)
 		return;
+
 	intel_pageflip_complete(mode);
 }
 
@@ -2062,14 +2063,12 @@ intel_pageflip_abort(ScrnInfoPtr scrn, xf86CrtcPtr crtc, void *data)
 	if (!mode)
 		return;
 
-	/* Release framebuffer */
-	drmModeRmFB(mode->fd, mode->old_fb_id);
-
 	if (!mode->pageflip.abort)
 		return;
 
+	/* Release framebuffer */
+	drmModeRmFB(mode->fd, mode->old_fb_id);
 	mode->pageflip.abort(mode->pageflip.data);
-	memset(&mode->pageflip, 0, sizeof(mode->pageflip));
 }
 
 /*


More information about the xorg-commit mailing list