[Nouveau] mesa vdpau regression with "dri2: Fix potential race and crash for swap at next vblank."

Maarten Lankhorst maarten.lankhorst at canonical.com
Thu Mar 28 07:26:02 PDT 2013


Op 28-03-13 12:00, Maarten Lankhorst schreef:

> Hey Mario,
>
> It seems that your ddx commit b4231dd715a8 is causing a regression when I use mplayer -vo vdpau rendering with mesa 9.1.
> It fails to start drawing here, leaving the mplayer screen black, I can make it recover usually by seeking or moving another
> window in front. When I revert the commit it behaves normally. Changing can_sync_to_vblank(draw) to 0 in
> nouveau_dri2_schedule_swap also fixes it.
>
> The nouveau kernel driver currently doesn't fill in a frame number, so MSC will always be zero for now,
> and this makes mplayer choose target_msc = 0 as 'swap at next interval', which appears to be broken by the commit.
>
> The following patch fixes frame numbers in the nouveau kernel module, but it only decreases the likelyhood of
> occuring, it still happens when seeking, for example.
>
> ~Maarten
>
Ohey found a flip bug too, that was weird, I'll send a patch for both. This is just silly...

--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -593,7 +597,7 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
 
 	/* Emit a page flip */
 	if (nv_device(drm->device)->card_type >= NV_50) {
-		ret = nv50_display_flip_next(crtc, fb, chan, 0);
+		ret = nv50_display_flip_next(crtc, fb, chan, /*swap_interval=*/ 1);
 		if (ret) {
 			mutex_unlock(&chan->cli->mutex);
 			goto fail_unreserve;



More information about the Nouveau mailing list