Commit ab709795 authored by Zack Rusin's avatar Zack Rusin
Browse files

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: default avatarZack Rusin <zackr@vmware.com>
Fixes: 485d98d4 ("drm/vmwgfx: Add support for CursorMob and CursorBypass 4")
Reviewed-by: default avatarMartin Krastev <krastevm@vmware.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220318174332.440068-3-zack@kde.org
parent 10a26e0d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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)) {