From: Ryosuke Yasuoka Date: Sat, 12 Apr 2025 13:20:11 +0000 (+0900) Subject: drm/virtio: Support drm_panic with non-vmapped shmem BO X-Git-Tag: v6.16-rc1~144^2~16^2~80 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2b5bd56bc14305c02fc516b573868fb9f9455573;p=thirdparty%2Fkernel%2Flinux.git 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 Signed-off-by: Ryosuke Yasuoka Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko Signed-off-by: Dmitry Osipenko [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/ --- diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c index 43e7552489775..698ea7adb9511 100644 --- a/drivers/gpu/drm/virtio/virtgpu_plane.c +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c @@ -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;