All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort
@ 2016-08-25  9:58 Michel Dänzer
       [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Michel Dänzer @ 2016-08-25  9:58 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

From: Michel Dänzer <michel.daenzer@amd.com>

Not doing so could break DPMS with TearFree.

Reported-and-Tested-by: furkan on IRC
Fixes: 9090309e057d ("Wait for pending flips to complete before turning
off an output or CRTC")

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
---
 src/drmmode_display.c | 2 +-
 src/drmmode_display.h | 1 +
 src/radeon_kms.c      | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 14d86c7..96a3c3b 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2174,7 +2174,7 @@ static const xf86CrtcConfigFuncsRec drmmode_xf86crtc_config_funcs = {
 	drmmode_xf86crtc_resize
 };
 
-static void
+void
 drmmode_clear_pending_flip(xf86CrtcPtr crtc)
 {
 	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index 24e3efb..53c7926 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -154,6 +154,7 @@ extern int drmmode_get_crtc_id(xf86CrtcPtr crtc);
 extern int drmmode_get_height_align(ScrnInfoPtr scrn, uint32_t tiling);
 extern int drmmode_get_pitch_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling);
 extern int drmmode_get_base_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling);
+extern void drmmode_clear_pending_flip(xf86CrtcPtr crtc);
 
 Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
 			uint32_t new_front_handle, uint64_t id, void *data,
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index e353d66..c10fb42 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -786,7 +786,7 @@ radeon_scanout_flip_abort(xf86CrtcPtr crtc, void *event_data)
     drmmode_crtc_private_ptr drmmode_crtc = event_data;
 
     drmmode_crtc->scanout_update_pending = FALSE;
-    drmmode_crtc->flip_pending = FALSE;
+    drmmode_clear_pending_flip(crtc);
 }
 
 static void
-- 
2.9.3

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH xf86-video-ati 2/2] Don't override crtc parameter value in drmmode_flip_handler/abort
       [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
@ 2016-08-25  9:58   ` Michel Dänzer
  2016-08-25 13:42   ` [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort Deucher, Alexander
  1 sibling, 0 replies; 3+ messages in thread
From: Michel Dänzer @ 2016-08-25  9:58 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

From: Michel Dänzer <michel.daenzer@amd.com>

When overriding the crtc parameter value of the last pending CRTC,
drmmode_clear_pending_flip would work on the wrong CRTC, and the last
pending CRTC's flip_pending flag might never get cleared. This would
prevent that CRTC from properly turning off and back on again.

Fixes: 9090309e057d ("Wait for pending flips to complete before turning
off an output or CRTC")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97392

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
---
 src/drmmode_display.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 96a3c3b..5db968c 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2204,9 +2204,9 @@ drmmode_flip_abort(xf86CrtcPtr crtc, void *event_data)
 	drmmode_flipdata_ptr flipdata = event_data;
 
 	if (--flipdata->flip_count == 0) {
-		if (flipdata->fe_crtc)
-			crtc = flipdata->fe_crtc;
-		flipdata->abort(crtc, flipdata->event_data);
+		if (!flipdata->fe_crtc)
+			flipdata->fe_crtc = crtc;
+		flipdata->abort(flipdata->fe_crtc, flipdata->event_data);
 		free(flipdata);
 	}
 
@@ -2227,11 +2227,14 @@ drmmode_flip_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec, void *even
 	}
 
 	if (--flipdata->flip_count == 0) {
-		/* Deliver cached msc, ust from reference crtc to flip event handler */
+		/* Deliver msc, ust from reference/current crtc to flip event
+		 * handler
+		 */
 		if (flipdata->fe_crtc)
-			crtc = flipdata->fe_crtc;
-		flipdata->handler(crtc, flipdata->fe_frame, flipdata->fe_usec,
-				  flipdata->event_data);
+			flipdata->handler(flipdata->fe_crtc, flipdata->fe_frame,
+					  flipdata->fe_usec, flipdata->event_data);
+		else
+			flipdata->handler(crtc, frame, usec, flipdata->event_data);
 
 		/* Release framebuffer */
 		drmModeRmFB(info->drmmode.fd, flipdata->old_fb_id);
-- 
2.9.3

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* RE: [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort
       [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
  2016-08-25  9:58   ` [PATCH xf86-video-ati 2/2] Don't override crtc parameter value in drmmode_flip_handler/abort Michel Dänzer
@ 2016-08-25 13:42   ` Deucher, Alexander
  1 sibling, 0 replies; 3+ messages in thread
From: Deucher, Alexander @ 2016-08-25 13:42 UTC (permalink / raw)
  To: 'Michel Dänzer', amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf
> Of Michel Dänzer
> Sent: Thursday, August 25, 2016 5:58 AM
> To: amd-gfx@lists.freedesktop.org
> Subject: [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip
> from radeon_scanout_flip_abort
> 
> From: Michel Dänzer <michel.daenzer@amd.com>
> 
> Not doing so could break DPMS with TearFree.
> 
> Reported-and-Tested-by: furkan on IRC
> Fixes: 9090309e057d ("Wait for pending flips to complete before turning
> off an output or CRTC")
> 
> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>

For the series:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  src/drmmode_display.c | 2 +-
>  src/drmmode_display.h | 1 +
>  src/radeon_kms.c      | 2 +-
>  3 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
> index 14d86c7..96a3c3b 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -2174,7 +2174,7 @@ static const xf86CrtcConfigFuncsRec
> drmmode_xf86crtc_config_funcs = {
>  	drmmode_xf86crtc_resize
>  };
> 
> -static void
> +void
>  drmmode_clear_pending_flip(xf86CrtcPtr crtc)
>  {
>  	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
> diff --git a/src/drmmode_display.h b/src/drmmode_display.h
> index 24e3efb..53c7926 100644
> --- a/src/drmmode_display.h
> +++ b/src/drmmode_display.h
> @@ -154,6 +154,7 @@ extern int drmmode_get_crtc_id(xf86CrtcPtr crtc);
>  extern int drmmode_get_height_align(ScrnInfoPtr scrn, uint32_t tiling);
>  extern int drmmode_get_pitch_align(ScrnInfoPtr scrn, int bpe, uint32_t
> tiling);
>  extern int drmmode_get_base_align(ScrnInfoPtr scrn, int bpe, uint32_t
> tiling);
> +extern void drmmode_clear_pending_flip(xf86CrtcPtr crtc);
> 
>  Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
>  			uint32_t new_front_handle, uint64_t id, void *data,
> diff --git a/src/radeon_kms.c b/src/radeon_kms.c
> index e353d66..c10fb42 100644
> --- a/src/radeon_kms.c
> +++ b/src/radeon_kms.c
> @@ -786,7 +786,7 @@ radeon_scanout_flip_abort(xf86CrtcPtr crtc, void
> *event_data)
>      drmmode_crtc_private_ptr drmmode_crtc = event_data;
> 
>      drmmode_crtc->scanout_update_pending = FALSE;
> -    drmmode_crtc->flip_pending = FALSE;
> +    drmmode_clear_pending_flip(crtc);
>  }
> 
>  static void
> --
> 2.9.3
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-08-25 13:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-25  9:58 [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort Michel Dänzer
     [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
2016-08-25  9:58   ` [PATCH xf86-video-ati 2/2] Don't override crtc parameter value in drmmode_flip_handler/abort Michel Dänzer
2016-08-25 13:42   ` [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort Deucher, Alexander

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.