From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Instead of plane->fb (which we're going to deprecate for atomic drivers) we need to look at plane->state->fb. The maze of code leading to vmw_kms_helper_dirty() wasn't particularly clear, but my analysis concluded that the calls originating from vmw_*_primary_plane_atomic_update() all pass in the crtc which means we'll never end up in this branch of the function. All other callers use drm_modeset_lock_all() somewhere higher up, which means accessing plane->state is safe. We'll toss in a lockdep assert to catch wrongdoers. Cc: Thomas Hellstrom <thellstrom@xxxxxxxxxx> Cc: Sinclair Yeh <syeh@xxxxxxxxxx> Cc: VMware Graphics <linux-graphics-maintainer@xxxxxxxxxx> Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index a2a796b4cc23..5a824125c231 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -2326,9 +2326,18 @@ int vmw_kms_helper_dirty(struct vmw_private *dev_priv, } else { list_for_each_entry(crtc, &dev_priv->dev->mode_config.crtc_list, head) { - if (crtc->primary->fb != &framebuffer->base) - continue; - units[num_units++] = vmw_crtc_to_du(crtc); + struct drm_plane *plane = crtc->primary; + + /* + * vmw_*_primary_plane_atomic_update() pass in the crtc, + * and so don't end up here. All other callers use + * drm_modeset_lock_all(), hence we can access the + * plane state safely. + */ + lockdep_assert_held(&plane->mutex); + + if (plane->state->fb != &framebuffer->base) + units[num_units++] = vmw_crtc_to_du(crtc); } } -- 2.16.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx