• G
    drm/fence: add in-fences support · 96260142
    Gustavo Padovan 提交于
    There is now a new property called IN_FENCE_FD attached to every plane
    state that receives sync_file fds from userspace via the atomic commit
    IOCTL.
    
    The fd is then translated to a fence (that may be a fence_array
    subclass or just a normal fence) and then used by DRM to fence_wait() for
    all fences in the sync_file to signal. So it only commits when all
    framebuffers are ready to scanout.
    
    v2: Comments by Daniel Vetter:
    	- remove set state->fence = NULL in destroy phase
    	- accept fence -1 as valid and just return 0
    	- do not call fence_get() - sync_file_fences_get() already calls it
    	- fence_put() if state->fence is already set, in case userspace
    	set the property more than once.
    
    v3: WARN_ON if fence is set but state has no FB
    
    v4: Comment from Maarten Lankhorst
    	- allow set fence with no related fb
    
    v5: rename FENCE_FD to IN_FENCE_FD
    
    v6: Comments by Daniel Vetter:
    	- rename plane_state->in_fence back to "fence"
    	- re-introduce WARN_ON if fence set but no fb
    
         - rebase after fence -> dma_fence rename
    
    v7: Comments by Brian Starkey
    	- set state->fence to NULL when duplicating the state
    	- fail if IN_FENCE_FD was already set
    
    v8: rebase against latest drm-misc
    Signed-off-by: NGustavo Padovan <gustavo.padovan@collabora.co.uk>
    Reviewed-by: NBrian Starkey <brian.starkey@arm.com>
    Reviewed-by: NSean Paul <seanpaul@chromium.org>
    Tested-by: NRobert Foss <robert.foss@collabora.com>
    [danvet: Rebase onto extracted drm_mode_config.[hc].]
    Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    96260142
drm_plane.c 24.7 KB