]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/6.6.26/drm-prime-unbreak-virtgpu-dma-buf-export.patch
Linux 6.1.85
[thirdparty/kernel/stable-queue.git] / releases / 6.6.26 / drm-prime-unbreak-virtgpu-dma-buf-export.patch
1 From 8634e267618934601c87bcfcd6a3fe2fb3973d16 Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Fri, 22 Mar 2024 14:48:01 -0700
4 Subject: drm/prime: Unbreak virtgpu dma-buf export
5
6 From: Rob Clark <robdclark@chromium.org>
7
8 [ Upstream commit a4ec240f6b7c21cf846d10017c3ce423a0eae92c ]
9
10 virtgpu "vram" GEM objects do not implement obj->get_sg_table(). But
11 they also don't use drm_gem_map_dma_buf(). In fact they may not even
12 have guest visible pages. But it is perfectly fine to export and share
13 with other virtual devices.
14
15 Reported-by: Dominik Behr <dbehr@chromium.org>
16 Fixes: 207395da5a97 ("drm/prime: reject DMA-BUF attach when get_sg_table is missing")
17 Signed-off-by: Rob Clark <robdclark@chromium.org>
18 Reviewed-by: Simon Ser <contact@emersion.fr>
19 Signed-off-by: Simon Ser <contact@emersion.fr>
20 Link: https://patchwork.freedesktop.org/patch/msgid/20240322214801.319975-1-robdclark@gmail.com
21 Signed-off-by: Sasha Levin <sashal@kernel.org>
22 ---
23 drivers/gpu/drm/drm_prime.c | 7 ++++++-
24 1 file changed, 6 insertions(+), 1 deletion(-)
25
26 diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
27 index 7352bde299d54..03bd3c7bd0dc2 100644
28 --- a/drivers/gpu/drm/drm_prime.c
29 +++ b/drivers/gpu/drm/drm_prime.c
30 @@ -582,7 +582,12 @@ int drm_gem_map_attach(struct dma_buf *dma_buf,
31 {
32 struct drm_gem_object *obj = dma_buf->priv;
33
34 - if (!obj->funcs->get_sg_table)
35 + /*
36 + * drm_gem_map_dma_buf() requires obj->get_sg_table(), but drivers
37 + * that implement their own ->map_dma_buf() do not.
38 + */
39 + if (dma_buf->ops->map_dma_buf == drm_gem_map_dma_buf &&
40 + !obj->funcs->get_sg_table)
41 return -ENOSYS;
42
43 return drm_gem_pin(obj);
44 --
45 2.43.0
46