diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2018-03-22 10:30:19 +0100 |
---|---|---|
committer | Thomas Hellstrom <thellstrom@vmware.com> | 2018-03-22 12:08:23 +0100 |
commit | 4e3e733b45df457147441b79cf2cb654c82ec402 (patch) | |
tree | bc9abfd0127974426265ee0f89cfe7028e4926e2 /drivers/gpu/drm/vmwgfx | |
parent | c3b9b165734492b7e42bdd898aba93e1120f9084 (diff) | |
download | lwn-4e3e733b45df457147441b79cf2cb654c82ec402.tar.gz lwn-4e3e733b45df457147441b79cf2cb654c82ec402.zip |
drm/vmwgfx: Get rid of the device-private suspended member
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>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 2 |
3 files changed, 1 insertions, 5 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index c66f32a6a9d9..61a03ac90f8c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c @@ -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); @@ -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; } @@ -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; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 0bf28a6528bf..fb2f3276ce82 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -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; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c index e85c1868ef12..be40cff3e1f6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c @@ -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); |