drm/vmwgfx: Clean up fbdev modeset locking
authorThomas Hellstrom <thellstrom@vmware.com>
Thu, 26 Apr 2018 07:48:55 +0000 (09:48 +0200)
committerThomas Hellstrom <thellstrom@vmware.com>
Thu, 26 Apr 2018 07:48:55 +0000 (09:48 +0200)
commit21fbd085e62ff9a11318f5a9aba55e56e8503173
tree9c34947c4a95a21d0fd2e18eceed2924ef1c5cab
parentbb1278e891662616ccf4584523318d5f7ddb3a7c
drm/vmwgfx: Clean up fbdev modeset locking

At least since the atomic port, the vmwgfx fbdev code is taking
a number of unnecessary modeset locks. In particular the
kms_set_config() function will grab its own locks, leading to
locking retries. So avoid drm_modeset_lock_all() and instead
provide a local acquire context for kms_set_config(). Also have the
vmw_kms_fbdev_init data itself grab the lock that it needs.

This also fixed a long standing problem that vmw_fb_close() didn't
provide an acquire context for kms_set_config(), causing potential
warnings and hangs during driver unload. This problem was uncovered by the
recent commit "drm/vmwgfx: Improve on hibernation"

Testing done:
Repeated driver load and unload on Ubuntu 16.04.2

Fixes: c3b9b1657344 ("drm/vmwgfx: Improve on hibernation")
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Deepak Rawat <drawat@vmware.com>
Reviewed-by: Sinclair Yeh <syeh@vmware.com>
drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c