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
6 From: Rob Clark <robdclark@chromium.org>
8 [ Upstream commit a4ec240f6b7c21cf846d10017c3ce423a0eae92c ]
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.
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>
23 drivers/gpu/drm/drm_prime.c | 7 ++++++-
24 1 file changed, 6 insertions(+), 1 deletion(-)
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,
32 struct drm_gem_object *obj = dma_buf->priv;
34 - if (!obj->funcs->get_sg_table)
36 + * drm_gem_map_dma_buf() requires obj->get_sg_table(), but drivers
37 + * that implement their own ->map_dma_buf() do not.
39 + if (dma_buf->ops->map_dma_buf == drm_gem_map_dma_buf &&
40 + !obj->funcs->get_sg_table)
43 return drm_gem_pin(obj);