From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 92B77C54E58 for ; Tue, 26 Mar 2024 00:13:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A582F10EBAC; Tue, 26 Mar 2024 00:13:33 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="Ti06sSPe"; dkim-atps=neutral Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B7BC10EB38 for ; Mon, 25 Mar 2024 22:35:32 +0000 (UTC) Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-428405a0205so56291cf.1 for ; Mon, 25 Mar 2024 15:35:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1711406131; x=1712010931; darn=lists.freedesktop.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=z9O2hLUchEVVeuKfLPpnhfBdXDSt1ojBd1rzB6Oq1DE=; b=Ti06sSPetpwl5KB4gOiZlp+OD80z+BMevAEdzqpvu4xSAwKDEZPZ5NrcpXiFGknN+i C7bAH1kf4OycnJq7wtoQXDE/sPbRzrOO8zJqxERuy9IgyVIjHs0xZYlaaq9/hXOXGG58 q+IL2tYFmkQnWMU2/lL+z0XbhiNg8yTQex6pM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711406131; x=1712010931; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=z9O2hLUchEVVeuKfLPpnhfBdXDSt1ojBd1rzB6Oq1DE=; b=Af9MnkxF2BvG1zK5zvG4/bd7ak94FYqzxNIQcAKm0BuVOX//hCePjiP5F7jxd5sj2B O+l3cygVCPXhv2jYZYlfrIQIveL5eygB1RIeNF69jtvU6rloZCcypenyWaJu5cz6/cW+ MNeGBDlSWJCOaIAjAjDFcc+n0nkwxz5R64Knmxfoxuf2ooeU4IrhFWVq+2bYgQJnG/Rs fAqk8PQrgyDNlfpmLx1vEUzfcTNncB9wRPfDHKqG8OOTtvGPQvbOpXZlz1zn7eUzETtz xFPlMhQ1YUsH2SH2qunHq3dEgRwxhW11yIcOItWzevcvvJIQS8IsxY2PsQI/ui1hrBPr 49OA== X-Gm-Message-State: AOJu0YyfaCjHxHiqZAX529UiO/VC+/mm0ktAw3ZnBISdr1dFglj3BxCc Yq2fbn2Rz5djEsFUArQO5uDNRQrZs6ZBLueQ4lTPcn8JKbQ3NJjBLUUJgk5BoUkI4Ghm7g/EZYP OToCazXi3GCEWZ6T6OX1nQRfluKoeREapS0gI X-Google-Smtp-Source: AGHT+IF3UeSx9WrvmsztbAdy0WfGEM5UslvDm6a69zl+U91zSEPIjIiXW9ZsS8+kS5LPMH8ZCSkvpRCNm40CVVhi6nE= X-Received: by 2002:a05:622a:17cc:b0:431:5fcb:4fba with SMTP id u12-20020a05622a17cc00b004315fcb4fbamr49764qtk.24.1711406130647; Mon, 25 Mar 2024 15:35:30 -0700 (PDT) MIME-Version: 1.0 References: <20240322214801.319975-1-robdclark@gmail.com> In-Reply-To: <20240322214801.319975-1-robdclark@gmail.com> From: Dominik Behr Date: Mon, 25 Mar 2024 15:35:17 -0700 Message-ID: Subject: Re: [PATCH] drm/prime: Unbreak virtgpu dma-buf export To: Rob Clark Cc: dri-devel@lists.freedesktop.org, Rob Clark , Dominik Behr , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Sumit Semwal , =?UTF-8?Q?Christian_K=C3=B6nig?= , Simon Ser , open list , "open list:DMA BUFFER SHARING FRAMEWORK:Keyword:bdma_(?:buf|fence|resv)b" , "moderated list:DMA BUFFER SHARING FRAMEWORK:Keyword:bdma_(?:buf|fence|resv)b" Content-Type: multipart/alternative; boundary="0000000000007c1e2d061483cad8" X-Mailman-Approved-At: Tue, 26 Mar 2024 00:13:32 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" --0000000000007c1e2d061483cad8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable It also fixes importing virtgpu blobs into real hardware, for instance amdgpu for DRI_PRIME rendering. On Fri, Mar 22, 2024 at 2:48=E2=80=AFPM Rob Clark wro= te: > From: Rob Clark > > virtgpu "vram" GEM objects do not implement obj->get_sg_table(). But > they also don't use drm_gem_map_dma_buf(). In fact they may not even > have guest visible pages. But it is perfectly fine to export and share > with other virtual devices. > > Reported-by: Dominik Behr > Fixes: 207395da5a97 ("drm/prime: reject DMA-BUF attach when get_sg_table > is missing") > Signed-off-by: Rob Clark > --- > drivers/gpu/drm/drm_prime.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 7352bde299d5..64dd6276e828 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -582,7 +582,12 @@ int drm_gem_map_attach(struct dma_buf *dma_buf, > { > struct drm_gem_object *obj =3D dma_buf->priv; > > - if (!obj->funcs->get_sg_table) > + /* > + * drm_gem_map_dma_buf() requires obj->get_sg_table(), but driver= s > + * that implement their own ->map_dma_buf() do not. > + */ > + if ((dma_buf->ops->map_dma_buf =3D=3D drm_gem_map_dma_buf) && > + !obj->funcs->get_sg_table) > return -ENOSYS; > > return drm_gem_pin(obj); > -- > 2.44.0 > > --0000000000007c1e2d061483cad8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
It also fixes importing virtgpu=C2=A0blobs into real hardw= are, for instance amdgpu for DRI_PRIME rendering.

On Fri, Mar 22, 2024= at 2:48=E2=80=AFPM Rob Clark <ro= bdclark@gmail.com> wrote:
From: Rob Clark <robdclark@chromium.org>

virtgpu "vram" GEM objects do not implement obj->get_sg_table(= ).=C2=A0 But
they also don't use drm_gem_map_dma_buf().=C2=A0 In fact they may not e= ven
have guest visible pages.=C2=A0 But it is perfectly fine to export and shar= e
with other virtual devices.

Reported-by: Dominik Behr <dbehr@chromium.org>
Fixes: 207395da5a97 ("drm/prime: reject DMA-BUF attach when get_sg_tab= le is missing")
Signed-off-by: Rob Clark <robdclark@chromium.org>
---
=C2=A0drivers/gpu/drm/drm_prime.c | 7 ++++++-
=C2=A01 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 7352bde299d5..64dd6276e828 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -582,7 +582,12 @@ int drm_gem_map_attach(struct dma_buf *dma_buf,
=C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct drm_gem_object *obj =3D dma_buf->priv= ;

-=C2=A0 =C2=A0 =C2=A0 =C2=A0if (!obj->funcs->get_sg_table)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/*
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * drm_gem_map_dma_buf() requires obj->get_s= g_table(), but drivers
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * that implement their own ->map_dma_buf() = do not.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if ((dma_buf->ops->map_dma_buf =3D=3D drm= _gem_map_dma_buf) &&
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0!obj->funcs->get_sg_table)<= br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return -ENOSYS;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 return drm_gem_pin(obj);
--
2.44.0

--0000000000007c1e2d061483cad8--