* [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.