Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp1522813rdh; Fri, 27 Oct 2023 18:17:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFQEjTsWbbnKMS6xE5n7fpr1/xIvFQ6eezvVAb5Vy9ClLS+TEQB9pFZHPhBzqN/T9snACXt X-Received: by 2002:a17:902:db0b:b0:1ca:79b6:ce42 with SMTP id m11-20020a170902db0b00b001ca79b6ce42mr4559554plx.47.1698455860378; Fri, 27 Oct 2023 18:17:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698455860; cv=none; d=google.com; s=arc-20160816; b=bJPqt3m0QxJDwWQV7sZPZiH+xUhE+SpJbdC61/ZHxxBRkZm1Rb3sdz/SXgJxkbRPeV gFjNhMzujXUPxrsK1jxhGvBxaFwLMM4VtE5LYV1Sn/Ga50oMbVgnnoBuFT7GZ2uM/Dsn 2uot/mLNgKv1EC0zw0BKZNdqyr7GWzmOX5cXUuaV5leNNnfBhIAoQEaOnBDXSeTZAZHo I1hesuZsEcvevJVBIxIrU972jdCXkjnaw5dCVpi7kOxrpDa6XiamKvT7W9b9zwg1R8mg qw5aHRqA0MkTDd33uc47GZHrOqd6hGhAMiQi/pYm8UKAaSj+ZBtD4CI1UBKFETmfR0wc 1PPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=YYOGSzc5gVhC61nl8UkhLbfPjbeXVie5I0ZyNVFICnw=; fh=V+2Z+ugsmwwCZmSlwUWlSsuvrMPdXbSuekBVChSmavE=; b=tvLyNxg4HxyYnvnO3MaRAp85NtODW3FhW1Rlo5j9yi4OGIYKSJ31f7INONQkhubKdh UmLaqegn2/Pwjz8+aQi7JNXGekbT+Snm0t/eUgCT0qW5is943VIX7A3TEgH7fH2Ec3Bp ubAO1q2LZeXDJvVeYkoz/Q/KW68+37UiUACRK8v7HCVs1NoUTymIUfSZuGUt8cjHcTta YrU6ljG4Z3ZvK/WGcEE4oVmtPLSkRDl01zRR2bKrR2X2GcWnjZjNnz8K8pX4mTp0C7nk z92ccEJvXlxps0hscxD+Tu+bT+reAYaXyq4YHJmitQ2iim9ODQ8lbQj60D3EvGmhoybz Vk6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VJObLTGZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id f10-20020a170902ce8a00b001c427a74e31si275665plg.628.2023.10.27.18.17.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 18:17:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VJObLTGZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id C312B807C877; Fri, 27 Oct 2023 18:17:09 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232898AbjJ1BQ5 (ORCPT + 99 others); Fri, 27 Oct 2023 21:16:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232896AbjJ1BQz (ORCPT ); Fri, 27 Oct 2023 21:16:55 -0400 Received: from mail-yb1-xb32.google.com (mail-yb1-xb32.google.com [IPv6:2607:f8b0:4864:20::b32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADB75CC for ; Fri, 27 Oct 2023 18:16:52 -0700 (PDT) Received: by mail-yb1-xb32.google.com with SMTP id 3f1490d57ef6-da2b9211dc0so143777276.3 for ; Fri, 27 Oct 2023 18:16:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698455812; x=1699060612; darn=vger.kernel.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=YYOGSzc5gVhC61nl8UkhLbfPjbeXVie5I0ZyNVFICnw=; b=VJObLTGZFxNsFNB0LRGkl1SdDfJDrzDvOoWCrM81x5wKJq4yt/MRVR/h3OWalHwu85 y4hzLeuCti7O6BrSFJAJ4l6EiRZDz18UNvCt4haApaJMhG99tJh+FFshGtlS6g1QevYz ec9vC3SDc6WWIiqqtS8pEzwZ1153/8vKtjPnEKsJyTccG/VgSsNchdsfqCcdi604zyxs LKCDSNQ8wY8H+izPa1tG6ugshBdu9pFYSUj6u+KyDHYNvdF8YnnsIMmvm+/tALnggjWf 0epJ7sSg+qZf23Cpi4SIsgMJ/ZXIwNNGKO9Oan4q8/pTPVkLe9zrqLdRxItKwluD/L9F NGlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698455812; x=1699060612; 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=YYOGSzc5gVhC61nl8UkhLbfPjbeXVie5I0ZyNVFICnw=; b=VHCcFEhqF2ONpeQGlOjEGl3lnxD0XhjhQNS45gr4BZdb2OM/EwlehpxAaqP8jT+gcB ooU/HcaViyonQhvr8GXmmeco6b8S7nDQ98VAPCNtfAec3CrgRIutg6o3i3PhUnCxINYD 69CeiUPPqKKDQjnqxNHwVPexIJGG9tWBV6Vg/DXPdH8Yd1rmoJklHC1QRRC3SOvwjjoV TIhXZoGki54WvanzW0V+LJkakvy3ylmi3fI/jFeNtqN6KvhtK8Go4Kliny/KWmeaeTj3 oVy1W6bedowLnZhf/J9Tv58Onzlrsea2G7cz+iVWuynXX3IVi/0Sy3oU/n7HPotypIQg oAWw== X-Gm-Message-State: AOJu0YyLvZqKYyb3xE315k2t1coBQRSfcIvADH807hlmiIPAxcJsGC26 PbcmKFSeLLpjdWfFa5oNa3gYnFz9W8gIgnknPGsrL2lrZgbRKm/1 X-Received: by 2002:a25:a292:0:b0:da0:5775:fd77 with SMTP id c18-20020a25a292000000b00da05775fd77mr3817290ybi.63.1698455811663; Fri, 27 Oct 2023 18:16:51 -0700 (PDT) MIME-Version: 1.0 References: <20231027194537.408922-1-robdclark@gmail.com> In-Reply-To: <20231027194537.408922-1-robdclark@gmail.com> From: Dmitry Baryshkov Date: Sat, 28 Oct 2023 04:16:40 +0300 Message-ID: Subject: Re: [PATCH] drm/msm/gem: Add metadata To: Rob Clark Cc: dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Daniel Vetter , open list Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Fri, 27 Oct 2023 18:17:09 -0700 (PDT) On Fri, 27 Oct 2023 at 22:45, Rob Clark wrote: > > From: Rob Clark > > The EXT_external_objects extension is a bit awkward as it doesn't pass > explicit modifiers, leaving the importer to guess with incomplete > information. In the case of vk (turnip) exporting and gl (freedreno) > importing, the "OPTIMAL_TILING_EXT" layout depends on VkImageCreateInfo > flags (among other things), which the importer does not know. Which > unfortunately leaves us with the need for a metadata back-channel. > > The contents of the metadata are defined by userspace. The > EXT_external_objects extension is only required to work between > compatible versions of gl and vk drivers, as defined by device and > driver UUIDs. > > Signed-off-by: Rob Clark > --- > drivers/gpu/drm/msm/msm_drv.c | 59 +++++++++++++++++++++++++++++++++-- > drivers/gpu/drm/msm/msm_gem.h | 4 +++ > include/uapi/drm/msm_drm.h | 2 ++ > 3 files changed, 63 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c > index b61ccea05327..8fe2677ea37a 100644 > --- a/drivers/gpu/drm/msm/msm_drv.c > +++ b/drivers/gpu/drm/msm/msm_drv.c > @@ -37,9 +37,10 @@ > * - 1.9.0 - Add MSM_SUBMIT_FENCE_SN_IN > * - 1.10.0 - Add MSM_SUBMIT_BO_NO_IMPLICIT > * - 1.11.0 - Add wait boost (MSM_WAIT_FENCE_BOOST, MSM_PREP_BOOST) > + * - 1.12.0 - Add MSM_INFO_SET_METADATA and MSM_INFO_GET_METADATA > */ > #define MSM_VERSION_MAJOR 1 > -#define MSM_VERSION_MINOR 10 > +#define MSM_VERSION_MINOR 12 > #define MSM_VERSION_PATCHLEVEL 0 > > static void msm_deinit_vram(struct drm_device *ddev); > @@ -566,6 +567,8 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, > break; > case MSM_INFO_SET_NAME: > case MSM_INFO_GET_NAME: > + case MSM_INFO_SET_METADATA: > + case MSM_INFO_GET_METADATA: > break; > default: > return -EINVAL; > @@ -618,7 +621,7 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, > break; > case MSM_INFO_GET_NAME: > if (args->value && (args->len < strlen(msm_obj->name))) { > - ret = -EINVAL; > + ret = -ETOOSMALL; This is unrelated and it also slightly changes user interface, so it IMO should come as a separate commit/ > break; > } > args->len = strlen(msm_obj->name); > @@ -627,6 +630,58 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, > msm_obj->name, args->len)) > ret = -EFAULT; > } > + break; > + case MSM_INFO_SET_METADATA: > + /* Impose a moderate upper bound on metadata size: */ > + if (args->len > 128) { > + ret = -EOVERFLOW; > + break; > + } > + > + ret = msm_gem_lock_interruptible(obj); > + if (ret) > + break; > + > + msm_obj->metadata = > + krealloc(msm_obj->metadata, args->len, GFP_KERNEL); > + msm_obj->metadata_size = args->len; > + > + if (copy_from_user(msm_obj->metadata, u64_to_user_ptr(args->value), > + args->len)) { > + msm_obj->metadata_size = 0; > + ret = -EFAULT; > + } > + > + msm_gem_unlock(obj); > + > + break; > + case MSM_INFO_GET_METADATA: > + if (!args->value) { > + /* > + * Querying the size is inherently racey, but > + * EXT_external_objects expects the app to confirm > + * via device and driver UUIDs that the exporter and > + * importer versions match. All we can do from the > + * kernel side is check the length under obj lock > + * when userspace tries to retrieve the metadata > + */ > + args->len = msm_obj->metadata_size; > + break; > + } > + > + ret = msm_gem_lock_interruptible(obj); > + if (ret) > + break; > + > + if (args->len < msm_obj->metadata_size) { > + ret = -ETOOSMALL; > + } else if (copy_to_user(u64_to_user_ptr(args->value), > + msm_obj->metadata, args->len)) { > + ret = -EFAULT; > + } Doesn't checkpwatch warn here about extra curly brackets? > + > + msm_gem_unlock(obj); > + > break; > } > > diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h > index 7f34263048a3..8d414b072c29 100644 > --- a/drivers/gpu/drm/msm/msm_gem.h > +++ b/drivers/gpu/drm/msm/msm_gem.h > @@ -109,6 +109,10 @@ struct msm_gem_object { > > char name[32]; /* Identifier to print for the debugfs files */ > > + /* userspace metadata backchannel */ > + void *metadata; > + u32 metadata_size; > + > /** > * pin_count: Number of times the pages are pinned > * > diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h > index 6c34272a13fd..6f2a7ad04aa4 100644 > --- a/include/uapi/drm/msm_drm.h > +++ b/include/uapi/drm/msm_drm.h > @@ -139,6 +139,8 @@ struct drm_msm_gem_new { > #define MSM_INFO_GET_NAME 0x03 /* get debug name, returned by pointer */ > #define MSM_INFO_SET_IOVA 0x04 /* set the iova, passed by value */ > #define MSM_INFO_GET_FLAGS 0x05 /* get the MSM_BO_x flags */ > +#define MSM_INFO_SET_METADATA 0x06 /* set userspace metadata */ > +#define MSM_INFO_GET_METADATA 0x07 /* get userspace metadata */ > > struct drm_msm_gem_info { > __u32 handle; /* in */ > -- > 2.41.0 > -- With best wishes Dmitry