Patch "drm/vmwgfx: Fix the lifetime of the bo cursor memory" has been added to the 6.8-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/vmwgfx: Fix the lifetime of the bo cursor memory

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-vmwgfx-fix-the-lifetime-of-the-bo-cursor-memory.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5228a49b7909b63068345811947ebd83394a048b
Author: Zack Rusin <zack.rusin@xxxxxxxxxxxx>
Date:   Fri Jan 26 15:08:04 2024 -0500

    drm/vmwgfx: Fix the lifetime of the bo cursor memory
    
    [ Upstream commit 9a9e8a7159ca09af9b1a300a6c8e8b6ff7501c76 ]
    
    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@xxxxxxxxxxxx>
    Fixes: bb6780aa5a1d ("drm/vmwgfx: Diff cursors when using cmds")
    Cc: <stable@xxxxxxxxxxxxxxx> # v6.2+
    Reviewed-by: Martin Krastev <martin.krastev@xxxxxxxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240126200804.732454-6-zack.rusin@xxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index c6f7946889d00..65be9e4a8992a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -184,13 +184,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;
 }
 
@@ -652,22 +651,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);
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux