drm/atomic-helper: Reject legacy flips on a disabled pipe
We want this for consistency with existing page_flip semantics. Since this spurred quite a discussion on IRC also document why we reject event generation when the pipe is off: It's not that it's hard to implement, but userspace has a track recording which proves that it's way too easy to accidentally abuse and cause havoc. We want to make sure userspace doesn't get away with that. v2: Somehow thought we do reject events already, but that code only existed in my imagination ... Also suggestions from Thierry. Cc: Daniel Stone <daniels@collabora.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Thierry Reding <thierry.reding@gmail.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1449564561-3896-4-git-send-email-daniel.vetter@ffwll.ch
This commit is contained in:
@@ -508,6 +508,22 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reject event generation for when a CRTC is off and stays off.
|
||||
* It wouldn't be hard to implement this, but userspace has a track
|
||||
* record of happily burning through 100% cpu (or worse, crash) when the
|
||||
* display pipe is suspended. To avoid all that fun just reject updates
|
||||
* that ask for events since likely that indicates a bug in the
|
||||
* compositor's drawing loop. This is consistent with the vblank IOCTL
|
||||
* and legacy page_flip IOCTL which also reject service on a disabled
|
||||
* pipe.
|
||||
*/
|
||||
if (state->event && !state->active && !crtc->state->active) {
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] requesting event but off\n",
|
||||
crtc->base.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user