drm/atomic: Move drm_crtc_commit to drm_crtc_state, v4.
Most code only cares about the current commit or previous commit. Fortuantely we already have a place to track those. Move it to drm_crtc_state where it belongs. :) The per-crtc commit_list is kept for places where we have to look deeper than the current or previous commit for checking whether to stall on unpin. This is used in drm_atomic_helper_setup_commit and intel_has_pending_fb_unpin. Changes since v1: - Update kerneldoc for drm_crtc.commit_list. (danvet) Changes since v2: - Remove drm_atomic_helper_async_check hunk. (pinchartl) Changes since v3: - Fix use-after-free in drm_atomic_helper_commit_cleanup_done(). Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20170904150456.31049-1-maarten.lankhorst@linux.intel.com [mlankhorst: preceeding -> preceding (checkpatch)]
This commit is contained in:
@@ -253,6 +253,15 @@ struct drm_crtc_state {
|
||||
*/
|
||||
struct drm_pending_vblank_event *event;
|
||||
|
||||
/**
|
||||
* @commit:
|
||||
*
|
||||
* This tracks how the commit for this update proceeds through the
|
||||
* various phases. This is never cleared, except when we destroy the
|
||||
* state, so that subsequent commits can synchronize with previous ones.
|
||||
*/
|
||||
struct drm_crtc_commit *commit;
|
||||
|
||||
struct drm_atomic_state *state;
|
||||
};
|
||||
|
||||
@@ -808,10 +817,16 @@ struct drm_crtc {
|
||||
* @commit_list:
|
||||
*
|
||||
* List of &drm_crtc_commit structures tracking pending commits.
|
||||
* Protected by @commit_lock. This list doesn't hold its own full
|
||||
* reference, but burrows it from the ongoing commit. Commit entries
|
||||
* must be removed from this list once the commit is fully completed,
|
||||
* but before it's correspoding &drm_atomic_state gets destroyed.
|
||||
* Protected by @commit_lock. This list holds its own full reference,
|
||||
* as does the ongoing commit.
|
||||
*
|
||||
* "Note that the commit for a state change is also tracked in
|
||||
* &drm_crtc_state.commit. For accessing the immediately preceding
|
||||
* commit in an atomic update it is recommended to just use that
|
||||
* pointer in the old CRTC state, since accessing that doesn't need
|
||||
* any locking or list-walking. @commit_list should only be used to
|
||||
* stall for framebuffer cleanup that's signalled through
|
||||
* &drm_crtc_commit.cleanup_done."
|
||||
*/
|
||||
struct list_head commit_list;
|
||||
|
||||
|
Reference in New Issue
Block a user