[xserver] modesetting: Clear drmmode->fb_id before unflipping

Hans de Goede hdegoede at redhat.com
Fri Jun 17 09:34:38 UTC 2016


Hi,

On 13-06-16 21:31, cpaul at redhat.com wrote:
> From: Lyude Paul <cpaul at redhat.com>
>
> [fix copied from 40191d82370e in xf86-video-ati]
>
> Without this, we end up setting rotated CRTCs back to their previous
> framebuffer right after we perform a rotation. Reproducer:
>
> - Have two monitors connected at the same resolution
> - Rotate one monitor from normal straight to inverted
> - Watch as the monitor you didn't rotate either freezes or shows intense
>   flickering
>
> Signed-off-by: Lyude <cpaul at redhat.com>

Patch looks good to me:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


> ---
>  hw/xfree86/drivers/modesetting/present.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/hw/xfree86/drivers/modesetting/present.c b/hw/xfree86/drivers/modesetting/present.c
> index d65c8c8..9a596de 100644
> --- a/hw/xfree86/drivers/modesetting/present.c
> +++ b/hw/xfree86/drivers/modesetting/present.c
> @@ -626,6 +626,15 @@ ms_present_unflip(ScreenPtr screen, uint64_t event_id)
>  	if (!crtc->enabled)
>  	    continue;
>
> +	/* info->drmmode.fb_id still points to the FB for the last flipped BO.
> +	 * Clear it, drmmode_set_mode_major will re-create it
> +	 */
> +	if (drmmode_crtc->drmmode->fb_id) {
> +		drmModeRmFB(drmmode_crtc->drmmode->fd,
> +			    drmmode_crtc->drmmode->fb_id);
> +		drmmode_crtc->drmmode->fb_id = 0;
> +	}
> +
>  	if (drmmode_crtc->dpms_mode == DPMSModeOn)
>  	    crtc->funcs->set_mode_major(crtc, &crtc->mode, crtc->rotation,
>  					crtc->x, crtc->y);
>


More information about the xorg-devel mailing list