mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 18:09:56 +00:00
drm/vmwgfx: Fix vmw_du_get_cursor_mob fencing of newly-created MOBs
[ Upstream commited96cf7ad5] The fencing of MOB creation used in vmw_du_get_cursor_mob was incompatible with register-based device communication employed by this routine. As a result cursor MOB creation was racy, leading to potentially broken/missing mouse cursor on desktops using CursorMob device feature. Fixes:53bc3f6fb6("drm/vmwgfx: Clean up cursor mobs") Signed-off-by: Martin Krastev <martin.krastev@broadcom.com> Reviewed-by: Maaz Mombasawala <maaz.mombasawala@broadcom.com> Reviewed-by: Zack Rusin <zack.rusin@broadcom.com> Signed-off-by: Zack Rusin <zack.rusin@broadcom.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240126200804.732454-5-zack.rusin@broadcom.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Sasha Levin
parent
3490c8f9c6
commit
97add03057
@@ -272,6 +272,7 @@ static int vmw_du_get_cursor_mob(struct vmw_cursor_plane *vcp,
|
|||||||
u32 size = vmw_du_cursor_mob_size(vps->base.crtc_w, vps->base.crtc_h);
|
u32 size = vmw_du_cursor_mob_size(vps->base.crtc_w, vps->base.crtc_h);
|
||||||
u32 i;
|
u32 i;
|
||||||
u32 cursor_max_dim, mob_max_size;
|
u32 cursor_max_dim, mob_max_size;
|
||||||
|
struct vmw_fence_obj *fence = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!dev_priv->has_mob ||
|
if (!dev_priv->has_mob ||
|
||||||
@@ -313,7 +314,15 @@ static int vmw_du_get_cursor_mob(struct vmw_cursor_plane *vcp,
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
goto teardown;
|
goto teardown;
|
||||||
|
|
||||||
vmw_bo_fence_single(&vps->cursor.bo->tbo, NULL);
|
ret = vmw_execbuf_fence_commands(NULL, dev_priv, &fence, NULL);
|
||||||
|
if (ret != 0) {
|
||||||
|
ttm_bo_unreserve(&vps->cursor.bo->tbo);
|
||||||
|
goto teardown;
|
||||||
|
}
|
||||||
|
|
||||||
|
dma_fence_wait(&fence->base, false);
|
||||||
|
dma_fence_put(&fence->base);
|
||||||
|
|
||||||
ttm_bo_unreserve(&vps->cursor.bo->tbo);
|
ttm_bo_unreserve(&vps->cursor.bo->tbo);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user