drm/qxl: properly pin/unpin shadow
authorGerd Hoffmann <kraxel@redhat.com>
Thu, 4 Feb 2021 14:57:07 +0000 (15:57 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Fri, 5 Feb 2021 07:52:35 +0000 (08:52 +0100)
Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: http://patchwork.freedesktop.org/patch/msgid/20210204145712.1531203-7-kraxel@redhat.com
drivers/gpu/drm/qxl/qxl_display.c

index 60331e3..d25fd3a 100644 (file)
@@ -802,12 +802,14 @@ static int qxl_plane_prepare_fb(struct drm_plane *plane,
                }
                if (user_bo->shadow != qdev->dumb_shadow_bo) {
                        if (user_bo->shadow) {
+                               qxl_bo_unpin(user_bo->shadow);
                                drm_gem_object_put
                                        (&user_bo->shadow->tbo.base);
                                user_bo->shadow = NULL;
                        }
                        drm_gem_object_get(&qdev->dumb_shadow_bo->tbo.base);
                        user_bo->shadow = qdev->dumb_shadow_bo;
+                       qxl_bo_pin(user_bo->shadow);
                }
        }
 
@@ -833,6 +835,7 @@ static void qxl_plane_cleanup_fb(struct drm_plane *plane,
        qxl_bo_unpin(user_bo);
 
        if (old_state->fb != plane->state->fb && user_bo->shadow) {
+               qxl_bo_unpin(user_bo->shadow);
                drm_gem_object_put(&user_bo->shadow->tbo.base);
                user_bo->shadow = NULL;
        }
@@ -1230,6 +1233,7 @@ int qxl_modeset_init(struct qxl_device *qdev)
 void qxl_modeset_fini(struct qxl_device *qdev)
 {
        if (qdev->dumb_shadow_bo) {
+               qxl_bo_unpin(qdev->dumb_shadow_bo);
                drm_gem_object_put(&qdev->dumb_shadow_bo->tbo.base);
                qdev->dumb_shadow_bo = NULL;
        }