Skip to content

Commit

Permalink
drm/vmwgfx: Get rid of the device-private suspended member
Browse files Browse the repository at this point in the history
It was used to early block fbdev dirty processing. Replace it with an
unprotected check of the par->dirty.active field. While this might
race with the vmw_fb_off() function, we do a protected check later so
the race will at worst lead to grabbing and releasing a couple of locks.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Sinclair Yeh <syeh@vmware.com>
  • Loading branch information
Thomas Hellstrom committed Mar 22, 2018
1 parent c3b9b16 commit 4e3e733
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 5 deletions.
3 changes: 0 additions & 3 deletions drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1449,7 +1449,6 @@ static int vmw_pm_freeze(struct device *kdev)
DRM_ERROR("Failed to freeze modesetting.\n");
return ret;
}
dev_priv->suspended = true;
if (dev_priv->enable_fb)
vmw_fb_off(dev_priv);

Expand All @@ -1471,7 +1470,6 @@ static int vmw_pm_freeze(struct device *kdev)
vmw_kms_resume(dev);
if (dev_priv->enable_fb)
vmw_fb_on(dev_priv);
dev_priv->suspended = false;
vmw_fb_refresh(dev_priv);
return -EBUSY;
}
Expand Down Expand Up @@ -1512,7 +1510,6 @@ static int vmw_pm_restore(struct device *kdev)
if (dev_priv->enable_fb)
vmw_fb_on(dev_priv);

dev_priv->suspended = false;
vmw_fb_refresh(dev_priv);

return 0;
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,6 @@ struct vmw_private {
struct vmw_master *active_master;
struct vmw_master fbdev_master;
struct notifier_block pm_nb;
bool suspended;
bool refuse_hibernation;
bool suspend_locked;

Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ static void vmw_fb_dirty_flush(struct work_struct *work)
struct vmw_dma_buffer *vbo = par->vmw_bo;
void *virtual;

if (vmw_priv->suspended)
if (!READ_ONCE(par->dirty.active))
return;

mutex_lock(&par->bo_mutex);
Expand Down

0 comments on commit 4e3e733

Please sign in to comment.