From nobody Sat Apr 11 05:14:29 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B81CC00140 for ; Tue, 16 Aug 2022 01:25:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244769AbiHPBZ2 (ORCPT ); Mon, 15 Aug 2022 21:25:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57162 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239667AbiHPBZJ (ORCPT ); Mon, 15 Aug 2022 21:25:09 -0400 Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74F801CBBCF; Mon, 15 Aug 2022 14:14:52 -0700 (PDT) Received: by mail-pg1-x52f.google.com with SMTP id s206so7538451pgs.3; Mon, 15 Aug 2022 14:14:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=2kiyz2f68H5F0GVQfsRhPhFfzHVyxEWsBeZz0K3ifLI=; b=nmgEgH6L7MMHItJHYHkaxml+1UFs3QcoG8d9WkteLtbiWaOV3YfDSC52Qijdt9Vy6D SvryTOs4GPbJtIirZcGMIj0YgVx2gXAofGB/DjkfcGOAAtvDfyHo6Ewqq/F5Lyxm8xAP +ZW3Z7htXDfl5fgijTq4iuyPg7h+JEb7ps54m//UYwFmOimEol6N4H8yqwTg9Ee0WISL ZERX9YVHMseDVUHBHAVQfH2y1C9gtH/0mtgCDQ1FsgsQjzUFF/CQhlgXd1ifJAP5cyAv 9ieXDkJyZvov4MpaEKlQxqAVtPwIxfO8ywAG95aYqGgotHXPJh9J1fs+p2T7Z4mses9E dr5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=2kiyz2f68H5F0GVQfsRhPhFfzHVyxEWsBeZz0K3ifLI=; b=iIaEJLjsoqx4b57Zwfa3Y+ZoPV8GDEStn282TpYvor2EXgloxlAZlxPp/tkdLnuytU Bh1NSv5cSAFZrhHMX+zvNj1J03/GSt7NoIzkLfG+Hol/OK38N2osK94D2bL5Vq6X9fUc UUcmeEAgtZkgJApLt646pUPGdMWUBtUwqyl/lZsLDvMRgwWIFtVj0mxGyPRzlrRVaI1R sLVAFan2o5syJiIzLL5gnJfY7RrE/m+5V9OTKUxsmwmXDYrQVHNykj/BLrd6mdHsK6no HuxvaStyfn0rEDY6UaW6SKciIeWuvgtWSNZiai9o597+5IUU4k7UJrTRU8dANPYwBF88 IRkQ== X-Gm-Message-State: ACgBeo0R/1G302TUrOjdckFXqat606dwMlpvjtcKX06vkgpAFdX/BGRu mtbtMAgfQhcMQ9dWW8OqZBw= X-Google-Smtp-Source: AA6agR5u2vrmyOIUNs2Kj2ELCddQdL5Dl4dWx6B4J+I97T2jxSfb1OoAb12npEBWLsbl6f7zkD588w== X-Received: by 2002:a63:6a89:0:b0:419:d863:321a with SMTP id f131-20020a636a89000000b00419d863321amr15342788pgc.9.1660598091775; Mon, 15 Aug 2022 14:14:51 -0700 (PDT) Received: from localhost ([2a00:79e1:abd:4a00:2703:3c72:eb1a:cffd]) by smtp.gmail.com with ESMTPSA id q4-20020a17090311c400b0016bffc59718sm7495960plh.58.2022.08.15.14.14.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Aug 2022 14:14:51 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?UTF-8?q?Christian=20K=C3=B6nig?= , Rob Clark , Sumit Semwal , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= , linux-media@vger.kernel.org (open list:DMA BUFFER SHARING FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 1/3] dma-buf: Add ioctl to query mmap coherency/cache info Date: Mon, 15 Aug 2022 14:15:12 -0700 Message-Id: <20220815211516.3169470-2-robdclark@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220815211516.3169470-1-robdclark@gmail.com> References: <20220815211516.3169470-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rob Clark This is a fairly narrowly focused interface, providing a way for a VMM in userspace to tell the guest kernel what pgprot settings to use when mapping a buffer to guest userspace. For buffers that get mapped into guest userspace, virglrenderer returns a dma-buf fd to the VMM (crosvm or qemu). In addition to mapping the pages into the guest VM, it needs to report to drm/virtio in the guest the cache settings to use for guest userspace. In particular, on some architectures, creating aliased mappings with different cache attributes is frowned upon, so it is important that the guest mappings have the same cache attributes as any potential host mappings. Signed-off-by: Rob Clark --- v2: Combine with coherency, as that is a related concept.. and it is relevant to the VMM whether coherent access without the SYNC ioctl is possible; set map_info at export time to make it more clear that it applies for the lifetime of the dma-buf (for any mmap created via the dma-buf) drivers/dma-buf/dma-buf.c | 63 +++++++++++++++++++++++++++------ include/linux/dma-buf.h | 11 ++++++ include/uapi/linux/dma-buf.h | 68 ++++++++++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+), 10 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index 32f55640890c..262c4706f721 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -125,6 +125,32 @@ static struct file_system_type dma_buf_fs_type =3D { .kill_sb =3D kill_anon_super, }; =20 +static int __dma_buf_mmap(struct dma_buf *dmabuf, struct vm_area_struct *v= ma) +{ + int ret; + + /* check if buffer supports mmap */ + if (!dmabuf->ops->mmap) + return -EINVAL; + + ret =3D dmabuf->ops->mmap(dmabuf, vma); + + /* + * If the exporter claims to support coherent access, ensure the + * pgprot flags match the claim. + */ + if ((dmabuf->map_info !=3D DMA_BUF_MAP_INCOHERENT) && !ret) { + pgprot_t wc_prot =3D pgprot_writecombine(vma->vm_page_prot); + if (dmabuf->map_info =3D=3D DMA_BUF_COHERENT_WC) { + WARN_ON_ONCE(pgprot_val(vma->vm_page_prot) !=3D pgprot_val(wc_prot)); + } else { + WARN_ON_ONCE(pgprot_val(vma->vm_page_prot) =3D=3D pgprot_val(wc_prot)); + } + } + + return ret; +} + static int dma_buf_mmap_internal(struct file *file, struct vm_area_struct = *vma) { struct dma_buf *dmabuf; @@ -134,16 +160,12 @@ static int dma_buf_mmap_internal(struct file *file, s= truct vm_area_struct *vma) =20 dmabuf =3D file->private_data; =20 - /* check if buffer supports mmap */ - if (!dmabuf->ops->mmap) - return -EINVAL; - /* check for overflowing the buffer's size */ if (vma->vm_pgoff + vma_pages(vma) > dmabuf->size >> PAGE_SHIFT) return -EINVAL; =20 - return dmabuf->ops->mmap(dmabuf, vma); + return __dma_buf_mmap(dmabuf, vma); } =20 static loff_t dma_buf_llseek(struct file *file, loff_t offset, int whence) @@ -326,6 +348,27 @@ static long dma_buf_set_name(struct dma_buf *dmabuf, c= onst char __user *buf) return 0; } =20 +static long dma_buf_info(struct dma_buf *dmabuf, void __user *uarg) +{ + struct dma_buf_info arg; + + if (copy_from_user(&arg, uarg, sizeof(arg))) + return -EFAULT; + + switch (arg.param) { + case DMA_BUF_INFO_MAP_INFO: + arg.value =3D dmabuf->map_info; + break; + default: + return -EINVAL; + } + + if (copy_to_user(uarg, &arg, sizeof(arg))) + return -EFAULT; + + return 0; +} + static long dma_buf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -369,6 +412,9 @@ static long dma_buf_ioctl(struct file *file, case DMA_BUF_SET_NAME_B: return dma_buf_set_name(dmabuf, (const char __user *)arg); =20 + case DMA_BUF_IOCTL_INFO: + return dma_buf_info(dmabuf, (void __user *)arg); + default: return -ENOTTY; } @@ -530,6 +576,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_exp= ort_info *exp_info) dmabuf->priv =3D exp_info->priv; dmabuf->ops =3D exp_info->ops; dmabuf->size =3D exp_info->size; + dmabuf->map_info =3D exp_info->map_info; dmabuf->exp_name =3D exp_info->exp_name; dmabuf->owner =3D exp_info->owner; spin_lock_init(&dmabuf->name_lock); @@ -1245,10 +1292,6 @@ int dma_buf_mmap(struct dma_buf *dmabuf, struct vm_a= rea_struct *vma, if (WARN_ON(!dmabuf || !vma)) return -EINVAL; =20 - /* check if buffer supports mmap */ - if (!dmabuf->ops->mmap) - return -EINVAL; - /* check for offset overflow */ if (pgoff + vma_pages(vma) < pgoff) return -EOVERFLOW; @@ -1262,7 +1305,7 @@ int dma_buf_mmap(struct dma_buf *dmabuf, struct vm_ar= ea_struct *vma, vma_set_file(vma, dmabuf->file); vma->vm_pgoff =3D pgoff; =20 - return dmabuf->ops->mmap(dmabuf, vma); + return __dma_buf_mmap(dmabuf, vma); } EXPORT_SYMBOL_NS_GPL(dma_buf_mmap, DMA_BUF); =20 diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h index 71731796c8c3..37923c8d5c24 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h @@ -23,6 +23,8 @@ #include #include =20 +#include + struct device; struct dma_buf; struct dma_buf_attachment; @@ -307,6 +309,13 @@ struct dma_buf { */ size_t size; =20 + /** + * @map_info: + * + * CPU mapping/coherency information for the buffer. + */ + enum dma_buf_map_info map_info; + /** * @file: * @@ -533,6 +542,7 @@ struct dma_buf_attachment { * @ops: Attach allocator-defined dma buf ops to the new buffer * @size: Size of the buffer - invariant over the lifetime of the buffer * @flags: mode flags for the file + * @map_info: CPU mapping/coherency information for the buffer * @resv: reservation-object, NULL to allocate default one * @priv: Attach private data of allocator to this buffer * @@ -545,6 +555,7 @@ struct dma_buf_export_info { const struct dma_buf_ops *ops; size_t size; int flags; + enum dma_buf_map_info map_info; struct dma_resv *resv; void *priv; }; diff --git a/include/uapi/linux/dma-buf.h b/include/uapi/linux/dma-buf.h index b1523cb8ab30..07b403ffdb43 100644 --- a/include/uapi/linux/dma-buf.h +++ b/include/uapi/linux/dma-buf.h @@ -85,6 +85,72 @@ struct dma_buf_sync { =20 #define DMA_BUF_NAME_LEN 32 =20 +/** + * enum dma_buf_map_info - CPU mapping info + * + * This enum describes coherency of a userspace mapping of the dmabuf. + * + * Importing devices should check dma_buf::map_info flag and reject an + * import if unsupported. For example, if the exporting device uses + * @DMA_BUF_COHERENT_CACHED but the importing device does not support + * CPU cache coherency, the dma-buf import should fail. + */ +enum dma_buf_map_info { + /** + * @DMA_BUF_MAP_INCOHERENT: CPU mapping is incoherent. + * + * Use of DMA_BUF_IOCTL_SYNC is required for CPU managed coherenency. + */ + DMA_BUF_MAP_INCOHERENT, + + /** + * @DMA_BUF_COHERENT_WC: CPU mapping is coherent but not cached. + * + * A cpu mmap'ing is coherent, and DMA_BUF_IOCTL_SYNC is not required. + * However fences may be still required for synchronizing access. Ie. + * coherency can only be relied upon by an explicit-fencing userspace. + * An implicit-sync userspace must still use DMA_BUF_IOCTL_SYNC. + * + * The cpu mapping is writecombine. + */ + DMA_BUF_COHERENT_WC, + + /** + * @DMA_BUF_COHERENT_CACHED: CPU mapping is coherent and CPU cached. + * + * A cpu mmap'ing is coherent, and DMA_BUF_IOCTL_SYNC is not required. + * However fences may be still required for synchronizing access. Ie. + * coherency can only be relied upon by an explicit-fencing userspace. + * An implicit-sync userspace must still use DMA_BUF_IOCTL_SYNC. + * + * The cpu mapping is cached. + */ + DMA_BUF_COHERENT_CACHED, +}; + +/** + * struct dma_buf_info - Query info about the buffer. + */ +struct dma_buf_info { + +#define DMA_BUF_INFO_MAP_INFO 1 + + /** + * @param: Which param to query + * + * DMA_BUF_INFO_MAP_INFO: + * Returns enum dma_buf_map_info, describing the coherency and + * caching of a CPU mapping of the buffer. + */ + __u32 param; + __u32 pad; + + /** + * @value: Return value of the query. + */ + __u64 value; +}; + #define DMA_BUF_BASE 'b' #define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync) =20 @@ -95,4 +161,6 @@ struct dma_buf_sync { #define DMA_BUF_SET_NAME_A _IOW(DMA_BUF_BASE, 1, __u32) #define DMA_BUF_SET_NAME_B _IOW(DMA_BUF_BASE, 1, __u64) =20 +#define DMA_BUF_IOCTL_INFO _IOWR(DMA_BUF_BASE, 2, struct dma_buf_info) + #endif --=20 2.36.1 From nobody Sat Apr 11 05:14:29 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EE51C00140 for ; Tue, 16 Aug 2022 01:25:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244918AbiHPBZk (ORCPT ); Mon, 15 Aug 2022 21:25:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244841AbiHPBZL (ORCPT ); Mon, 15 Aug 2022 21:25:11 -0400 Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB6BDDAB8F for ; Mon, 15 Aug 2022 14:14:54 -0700 (PDT) Received: by mail-pg1-x536.google.com with SMTP id l64so7558512pge.0 for ; Mon, 15 Aug 2022 14:14:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=dTc3puoo2xv02+7+HIFO9LAkjK/P01/XbA/vkW8hPyo=; b=lUo9El7WmA0vaXppLobZTZwSSO4s3aBGpAdCeA3hM0xWiJE1bO0cX4scbqYfWAPcUv tCcM3DxIffFblEb6QQB5cyOd6W+L/5Cq0v34kx5zPkHZ7qe5mZyflu4PhCBZfSlHYZ6h U9AMe0FKCi93jdyTMnsrGn5mMtYnChc8odfjK8lj8WVBKHji3tEISpdoEqnfvqIOm6oo cso4B9WPu/wPNPLbjE/CZF7PAkFNeZD/YkWFhACAlvMWPJOwgPPu+HqFx51I/6vQj4LJ a4zevWUjQGkmiey6vsvoILQwBaYEJrlo6fC3TeQyY/3J1A+KhRuv29cQgRtNnvM7CIuq ccJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=dTc3puoo2xv02+7+HIFO9LAkjK/P01/XbA/vkW8hPyo=; b=Ok9ueLLCVkzCUxv7kfVT4L6p3WFt4RJxmyck9os9VLbq9TdbMaPAlzidCJawiUmDZf a1ijCSM1lPg4jVwvZBBacPGldPPd5RwozwwpeiaA182OO1/OVS6ChEBWksHE6sO6L8/Q /131Wwal/lyckjrkRKr+z9kshHVFwKKpgwHAZKPqmy4pf8cfjiPybS74JJ+IsNgtdW7Q FLwEHyJnN+QGJG0Cta04CtWB4+DWpVqThhLHdtOpCqwsKyase1A1PSMlEEu3uOwAl2G/ 515ELy3kdDZgIfIgsuTn1wrGJQjczamUkpEHPin/bGcd+Yy+0FgWvIbS2CnMj0MEJYIj alTA== X-Gm-Message-State: ACgBeo3d42qffYA1ni6K+Mhk+Wdk/lm9hTkkxHJtHa7u7T6LLOw6ojF6 YJNtJeY73YOl7tX7BJ1zjUk= X-Google-Smtp-Source: AA6agR40Ony4nyLZFzq0XayICdaN3uMIdS5sXW5BLIENRDX2jxVXcH5BdrTr3WQTtUckfu7UWR7o0g== X-Received: by 2002:a63:8049:0:b0:41b:e8db:d912 with SMTP id j70-20020a638049000000b0041be8dbd912mr15075841pgd.380.1660598094195; Mon, 15 Aug 2022 14:14:54 -0700 (PDT) Received: from localhost ([2a00:79e1:abd:4a00:2703:3c72:eb1a:cffd]) by smtp.gmail.com with ESMTPSA id u4-20020a170902714400b0016ee26224a4sm7384427plm.305.2022.08.15.14.14.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Aug 2022 14:14:53 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?UTF-8?q?Christian=20K=C3=B6nig?= , Rob Clark , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 2/3] drm/prime: Wire up mmap_info support Date: Mon, 15 Aug 2022 14:15:13 -0700 Message-Id: <20220815211516.3169470-3-robdclark@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220815211516.3169470-1-robdclark@gmail.com> References: <20220815211516.3169470-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rob Clark Just plumbing the thing thru an extra layer. Signed-off-by: Rob Clark --- drivers/gpu/drm/drm_prime.c | 3 +++ include/drm/drm_gem.h | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index e3f09f18110c..4457fedde1ec 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -888,6 +888,9 @@ struct dma_buf *drm_gem_prime_export(struct drm_gem_obj= ect *obj, .resv =3D obj->resv, }; =20 + if (obj->funcs && obj->funcs->map_info) + exp_info.map_info =3D obj->funcs->map_info(obj); + return drm_gem_dmabuf_export(dev, &exp_info); } EXPORT_SYMBOL(drm_gem_prime_export); diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index f28a48a6f846..a573ebfc529a 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -172,6 +172,17 @@ struct drm_gem_object_funcs { * This is optional but necessary for mmap support. */ const struct vm_operations_struct *vm_ops; + + /** + * @map_info: + * + * Return dma_buf_map_info indicating the coherency of an exported + * dma-buf. + * + * This callback is optional. If not provided, exported dma-bufs are + * assumed to be DMA_BUF_MAP_INCOHERENT. + */ + enum dma_buf_map_info (*map_info)(struct drm_gem_object *obj); }; =20 /** --=20 2.36.1 From nobody Sat Apr 11 05:14:29 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39A45C00140 for ; Tue, 16 Aug 2022 01:26:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242242AbiHPB0B (ORCPT ); Mon, 15 Aug 2022 21:26:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233932AbiHPBZN (ORCPT ); Mon, 15 Aug 2022 21:25:13 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F8991CBBE5; Mon, 15 Aug 2022 14:14:57 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id a22so7046556pfg.3; Mon, 15 Aug 2022 14:14:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=w5QXaLkMtFzdjHDQHtPEU494QpdGuD1KjoIolDWdbN8=; b=LQS9J7WOTckVSScdQmwkDF/vckZLEnTZXZYYRi13AYNiKPC+iOVgJoaFvOtFriteqO pQ0GS3eocqTyQnArXwKTQcmQNd1os850upnkC6k+UDghPUgT4Bp8W1FLZjr6drlvaoxE lczs8pvPfx+x3L5d/8pBqRvttkW9Z+o+qVB4LUJmpHAzTTcIsjI/TaABs3UIdjwkOf32 JTnKOPherPlT/HdXAwGHKlcPXg1s4Q+soD1smUkNAHD0NvRUVNUbnGoOAFPms7YB5cTT xZHstsjW9JwfXPMkEIS+7l5OEd6SFzZXLLFT1Z1V+NvyIRPVNNTu8ycHOR6CERs4Beso Vf/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=w5QXaLkMtFzdjHDQHtPEU494QpdGuD1KjoIolDWdbN8=; b=0ukdb9QSu0XB83zeeWK/W6a/EZZrw+EhEDq0exVNUsFh8BQTzk1wwlmkjtvy5JUpAP PYzVq1X7+r52Mc9fRIMs2h//G2ETGMXv7VKw0vYIHO5U49/sFkPl6pWtMdbeTZbwx0cQ +Cd/iDeVVqFDlPjbQpz78Nz+ohipkwdWdywqdlTBa5o0FC8Ajo2DfTk1CFI+Jzbqs7t7 clXLhRvJGCqKKtLVEbc5bKM5hibORhwfHEPcZET5wjUf+YY10tk+e5aHkrqTxqRGuMxa L8wz3On4sE/2LElU1rgHu/UIiI+3pSYTgpYVopEzJXAe6p8p3YmFYLQafn9xUyVYjlZU soFA== X-Gm-Message-State: ACgBeo3tljfFFQXdi2S8d34gRO6bSC9oe78T25gf1zFqH7DleDH8yf4A +xYqgS/DBgRza7wsxuTQ7t8= X-Google-Smtp-Source: AA6agR6q7mRFB9Y4ijyBy6CjBRfN48U1JfqaDyXBL5UsDXYLNsVjueHi1/tBu1MPs+/X+hVsTIeoTQ== X-Received: by 2002:a63:ab05:0:b0:41d:a203:aee6 with SMTP id p5-20020a63ab05000000b0041da203aee6mr15354352pgf.144.1660598096597; Mon, 15 Aug 2022 14:14:56 -0700 (PDT) Received: from localhost ([2a00:79e1:abd:4a00:2703:3c72:eb1a:cffd]) by smtp.gmail.com with ESMTPSA id z2-20020a170903018200b0016eef326febsm7498433plg.1.2022.08.15.14.14.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Aug 2022 14:14:55 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?UTF-8?q?Christian=20K=C3=B6nig?= , Rob Clark , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , linux-arm-msm@vger.kernel.org (open list:DRM DRIVER FOR MSM ADRENO GPU), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 3/3] drm/msm/prime: Add mmap_info support Date: Mon, 15 Aug 2022 14:15:14 -0700 Message-Id: <20220815211516.3169470-4-robdclark@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220815211516.3169470-1-robdclark@gmail.com> References: <20220815211516.3169470-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rob Clark Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gem.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 1dee0d18abbb..1db53545ac40 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -1048,6 +1048,17 @@ static const struct vm_operations_struct vm_ops =3D { .close =3D drm_gem_vm_close, }; =20 +static enum dma_buf_map_info msm_gem_map_info(struct drm_gem_object *obj) +{ + struct msm_gem_object *msm_obj =3D to_msm_bo(obj); + + switch (msm_obj->flags & MSM_BO_CACHE_MASK) { + case MSM_BO_WC: return DMA_BUF_COHERENT_WC; + case MSM_BO_CACHED_COHERENT: return DMA_BUF_COHERENT_CACHED; + default: return DMA_BUF_MAP_INCOHERENT; + } +} + static const struct drm_gem_object_funcs msm_gem_object_funcs =3D { .free =3D msm_gem_free_object, .pin =3D msm_gem_prime_pin, @@ -1057,6 +1068,7 @@ static const struct drm_gem_object_funcs msm_gem_obje= ct_funcs =3D { .vunmap =3D msm_gem_prime_vunmap, .mmap =3D msm_gem_object_mmap, .vm_ops =3D &vm_ops, + .map_info =3D msm_gem_map_info, }; =20 static int msm_gem_new_impl(struct drm_device *dev, --=20 2.36.1