[PATCH 5/5] drm/vmwgfx: Fix the lifetime of the bo cursor memory
Martin Krastev
martin.krastev at broadcom.com
Sat Jan 27 09:56:17 UTC 2024
On Fri, Jan 26, 2024 at 10:08 PM Zack Rusin <zack.rusin at broadcom.com> wrote:
>
> The cleanup can be dispatched while the atomic update is still active,
> which means that the memory acquired in the atomic update needs to
> not be invalidated by the cleanup. The buffer objects in vmw_plane_state
> instead of using the builtin map_and_cache were trying to handle
> the lifetime of the mapped memory themselves, leading to crashes.
>
> Use the map_and_cache instead of trying to manage the lifetime of the
> buffer objects held by the vmw_plane_state.
>
> Fixes kernel oops'es in IGT's kms_cursor_legacy forked-bo.
>
> Signed-off-by: Zack Rusin <zack.rusin at broadcom.com>
> Fixes: bb6780aa5a1d ("drm/vmwgfx: Diff cursors when using cmds")
> Cc: <stable at vger.kernel.org> # v6.2+
> ---
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 13 +------------
> 1 file changed, 1 insertion(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index e2bfaf4522a6..cd4925346ed4 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -185,13 +185,12 @@ static u32 vmw_du_cursor_mob_size(u32 w, u32 h)
> */
> static u32 *vmw_du_cursor_plane_acquire_image(struct vmw_plane_state *vps)
> {
> - bool is_iomem;
> if (vps->surf) {
> if (vps->surf_mapped)
> return vmw_bo_map_and_cache(vps->surf->res.guest_memory_bo);
> return vps->surf->snooper.image;
> } else if (vps->bo)
> - return ttm_kmap_obj_virtual(&vps->bo->map, &is_iomem);
> + return vmw_bo_map_and_cache(vps->bo);
> return NULL;
> }
>
> @@ -653,22 +652,12 @@ vmw_du_cursor_plane_cleanup_fb(struct drm_plane *plane,
> {
> struct vmw_cursor_plane *vcp = vmw_plane_to_vcp(plane);
> struct vmw_plane_state *vps = vmw_plane_state_to_vps(old_state);
> - bool is_iomem;
>
> if (vps->surf_mapped) {
> vmw_bo_unmap(vps->surf->res.guest_memory_bo);
> vps->surf_mapped = false;
> }
>
> - if (vps->bo && ttm_kmap_obj_virtual(&vps->bo->map, &is_iomem)) {
> - const int ret = ttm_bo_reserve(&vps->bo->tbo, true, false, NULL);
> -
> - if (likely(ret == 0)) {
> - ttm_bo_kunmap(&vps->bo->map);
> - ttm_bo_unreserve(&vps->bo->tbo);
> - }
> - }
> -
> vmw_du_cursor_plane_unmap_cm(vps);
> vmw_du_put_cursor_mob(vcp, vps);
>
> --
> 2.40.1
>
LGTM!
Reviewed-by: Martin Krastev <martin.krastev at broadcom.com>
Regards,
Martin
More information about the dri-devel
mailing list