On 27.05.2014 23:49, Christian König wrote: > From: Christian König <christian.koenig@xxxxxxx> > > Instead of trying to flip inside the vblank period when > the buffer is idle, offload blocking for idle to a kernel > thread and program the flip directly into the hardware. > > v2: add error handling, fix EBUSY handling > v3: add proper exclusive_lock handling [...] > + /* update crtc fb */ > + crtc->primary->fb = fb; > + > + /* We borrow the event spin lock for protecting flip_work */ > + spin_lock_irqsave(&crtc->dev->event_lock, flags); > + > + if (radeon_crtc->flip_work) { > + DRM_DEBUG_DRIVER("flip queue: crtc already busy\n"); > + spin_unlock_irqrestore(&crtc->dev->event_lock, flags); > + drm_gem_object_unreference_unlocked(&work->old_rbo->gem_base); > + radeon_fence_unref(&work->fence); > + kfree(work); > + return -EBUSY; > + } If we return -EBUSY, we shouldn't change crtc->primary->fb, should we? I wonder if crtc->primary->fb shouldn't be changed in radeon_flip_work_func(), when we're sure we can actually flip. -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel