summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2022-03-18 20:43:29 +0300
committerZack Rusin <zackr@vmware.com>2022-03-21 17:10:34 +0300
commitab709795e38637320fea9fdc8e06b64f670b58ee (patch)
tree29b5cfe8355040a3f9d7d1ffa9a46ee60e064931 /drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
parent10a26e0d5fc3574f63ce8a6cf28381b126317f40 (diff)
downloadlinux-ab709795e38637320fea9fdc8e06b64f670b58ee.tar.xz
drm/vmwgfx: Fix mob cursor allocation race
Writes to SVGA_REG_CURSOR_MOBID did not wait for the buffers to be fully populated. This sometimes results in the device not being aware of the buffer when the cursor mob register was written. Properly wait for the buffer to be fully populated before setting it as a cursor mob. Signed-off-by: Zack Rusin <zackr@vmware.com> Fixes: 485d98d472d5 ("drm/vmwgfx: Add support for CursorMob and CursorBypass 4") Reviewed-by: Martin Krastev <krastevm@vmware.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220318174332.440068-3-zack@kde.org
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_kms.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_kms.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index af252210ef84..7a23f252d212 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -602,6 +602,14 @@ vmw_du_cursor_plane_prepare_fb(struct drm_plane *plane,
ret = ttm_bo_kmap(cm_bo, 0, PFN_UP(size), &vps->cm_map);
+ /*
+ * We just want to try to get mob bind to finish
+ * so that the first write to SVGA_REG_CURSOR_MOBID
+ * is done with a buffer that the device has already
+ * seen
+ */
+ (void) ttm_bo_wait(cm_bo, false, false);
+
ttm_bo_unreserve(cm_bo);
if (unlikely(ret != 0)) {