drm/virtio: Support drm_panic with non-vmapped shmem BO

Pass array of pages of the scanout buffer to shmem BO, allowing
drm_panic to work even if the BO is not vmapped.

Link: https://lore.kernel.org/all/20250407140138.162383-3-jfalempe@redhat.com/
Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com>
Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
[dmitry.osipenko@collabora.com: rebased on misc-next, fixed minor checkpatch warn]
[dmitry.osipenko@collabora.com: changed commit message to use link tag]
Link: https://lore.kernel.org/all/20250412132012.291837-1-ryasuoka@redhat.com/
This commit is contained in:
Ryosuke Yasuoka
2025-04-12 22:20:11 +09:00
committed by Dmitry Osipenko
parent 415cb45895
commit 2b5bd56bc1

View File

@@ -508,11 +508,19 @@ static int virtio_drm_get_scanout_buffer(struct drm_plane *plane,
bo = gem_to_virtio_gpu_obj(plane->state->fb->obj[0]);
/* Only support mapped shmem bo */
if (virtio_gpu_is_vram(bo) || drm_gem_is_imported(&bo->base.base) || !bo->base.vaddr)
if (virtio_gpu_is_vram(bo) || drm_gem_is_imported(&bo->base.base))
return -ENODEV;
iosys_map_set_vaddr(&sb->map[0], bo->base.vaddr);
if (bo->base.vaddr) {
iosys_map_set_vaddr(&sb->map[0], bo->base.vaddr);
} else {
struct drm_gem_shmem_object *shmem = &bo->base;
if (!shmem->pages)
return -ENODEV;
/* map scanout buffer later */
sb->pages = shmem->pages;
}
sb->format = plane->state->fb->format;
sb->height = plane->state->fb->height;