From: Matt Evans <matt@ozlabs.org>
To: "Christian König" <christian.koenig@amd.com>
Cc: "Alex Williamson" <alex@shazbot.org>,
"Leon Romanovsky" <leon@kernel.org>,
"Jason Gunthorpe" <jgg@nvidia.com>,
"Alex Mastro" <amastro@fb.com>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Logan Gunthorpe" <logang@deltatee.com>,
"Kevin Tian" <kevin.tian@intel.com>,
"Pranjal Shrivastava" <praan@google.com>,
"Longfang Liu" <liulongfang@huawei.com>,
"Mahmoud Adam" <mngyadam@amazon.de>,
"David Matlack" <dmatlack@google.com>,
"Björn Töpel" <bjorn@kernel.org>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Ankit Agrawal" <ankita@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Vivek Kasireddy" <vivek.kasireddy@intel.com>,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org,
kvm@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v7 3/9] dma-buf: Provide dma_buf_set_name()
Date: Tue, 29 Sep 2026 12:43:37 +0100 [thread overview]
Message-ID: <ed9a25ad-9a10-407d-b910-1b5cbdff88b4@ozlabs.org> (raw)
In-Reply-To: <654a5994-97e4-4a0d-aba9-24090b495da5@amd.com>
On 25/09/2026 09:39, Christian König wrote:
>
>
> On 9/24/26 17:21, Matt Evans wrote:
>> Allow exporters to set the name of buffers, during export or for
>> subsequent updates. This is useful to express buffer-specific debug
>> information, indicate state particular to the exporter's usage, etc.
>> Only exporters and userspace are expected to set names; it isn't
>> sensible for importers to do it.
>>
>> Originally, the static dma_buf_set_name() was used for
>> DMA_BUF_SET_NAME ioctls, taking a __user string parameter. Export
>> this function as a generic set-name helper, taking a kernel-allocated
>> string. The SET_NAME ioctls now locally duplicate the __user string,
>> and use the new function to set the name.
>>
>> Signed-off-by: Matt Evans <matt@ozlabs.org>
>> ---
>> drivers/dma-buf/dma-buf.c | 78 ++++++++++++++++++++++++---------------
>> include/linux/dma-buf.h | 2 +
>> 2 files changed, 50 insertions(+), 30 deletions(-)
>>
>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>> index 4c9add51f9ef..e4ec504e9288 100644
>> --- a/drivers/dma-buf/dma-buf.c
>> +++ b/drivers/dma-buf/dma-buf.c
>> @@ -404,34 +404,6 @@ static __poll_t dma_buf_poll(struct file *file, poll_table *poll)
>> return events;
>> }
>>
>> -/**
>> - * dma_buf_set_name - Set a name to a specific dma_buf to track the usage.
>> - * It could support changing the name of the dma-buf if the same
>> - * piece of memory is used for multiple purpose between different devices.
>> - *
>> - * @dmabuf: [in] dmabuf buffer that will be renamed.
>> - * @buf: [in] A piece of userspace memory that contains the name of
>> - * the dma-buf.
>> - *
>> - * Returns 0 on success. If the dma-buf buffer is already attached to
>> - * devices, return -EBUSY.
>> - *
>> - */
>> -static long dma_buf_set_name(struct dma_buf *dmabuf, const char __user *buf)
>> -{
>> - char *name = strndup_user(buf, DMA_BUF_NAME_LEN);
>> -
>> - if (IS_ERR(name))
>> - return PTR_ERR(name);
>> -
>> - spin_lock(&dmabuf->name_lock);
>> - kfree(dmabuf->name);
>> - dmabuf->name = name;
>> - spin_unlock(&dmabuf->name_lock);
>> -
>> - return 0;
>> -}
>> -
>> #if IS_ENABLED(CONFIG_SYNC_FILE)
>> static long dma_buf_export_sync_file(struct dma_buf *dmabuf,
>> void __user *user_data)
>> @@ -577,8 +549,19 @@ static long dma_buf_ioctl(struct file *file,
>> return ret;
>>
>> case DMA_BUF_SET_NAME_A:
>> - case DMA_BUF_SET_NAME_B:
>> - return dma_buf_set_name(dmabuf, (const char __user *)arg);
>> + case DMA_BUF_SET_NAME_B: {
>> + char *name = strndup_user((const char __user *)arg,
>> + DMA_BUF_NAME_LEN);
>> +
>> + if (IS_ERR(name))
>> + return PTR_ERR(name);
>> +
>> + ret = dma_buf_set_name(dmabuf, name);
>> + if (ret)
>> + kfree(name);
>> +
>> + return ret;
>> + }
>>
>> #if IS_ENABLED(CONFIG_SYNC_FILE)
>> case DMA_BUF_IOCTL_EXPORT_SYNC_FILE:
>> @@ -874,6 +857,41 @@ void dma_buf_put(struct dma_buf *dmabuf)
>> }
>> EXPORT_SYMBOL_NS_GPL(dma_buf_put, "DMA_BUF");
>>
>> +/**
>> + * dma_buf_set_name - Set a dmabuf's name
>> + * Intended to be used by the exporter to set a name for debug
>> + * purposes. This can also change an existing name if the same piece
>> + * of memory is used for multiple purposes over time.
>
> Add something like "Importers should *NOT* use this function to overwrite the name." here and add some note under "DOC: locking convention" how this function is supposed to be called.
>
> Apart from that looks good to me,
Thanks, Christian. Good point, done.
Re the locking convention, it appears dma_buf_set_name() is agnostic to
whether resv is held or not. However, rather than adding that as a new
category to the 'DOC: locking convention', I've put this function in the
existing "don't hold resv" section.
Whilst conservative, this matches existing (and this series's) usage,
and can then be relaxed in future. If you think a new "resv is
permitted but not required to be held" category of API doc is better, do
say.
Thanks,
Matt
> Christian.
>
>> + *
>> + * @dmabuf: [in] dmabuf buffer that will be renamed.
>> + * @name: [in] The name of the dma-buf, allocated with kmalloc() or
>> + * similar. This takes ownership of the allocation
>> + * on success, which will be kfree()d when the
>> + * dmabuf is released or a new name assigned.
>> + *
>> + * Returns 0 on success, -EINVAL if the name is NULL, or -E2BIG if the
>> + * name (including terminator) exceeds DMA_BUF_NAME_LEN.
>> + */
>> +int dma_buf_set_name(struct dma_buf *dmabuf, char *name)
>> +{
>> + if (!name)
>> + return -EINVAL;
>> +
>> + /* dmabuffs_dname() won't use the string if the length
>> + * (including terminator) exceeds DMA_BUF_NAME_LEN:
>> + */
>> + if (strlen(name) >= DMA_BUF_NAME_LEN)
>> + return -E2BIG;
>> +
>> + spin_lock(&dmabuf->name_lock);
>> + kfree(dmabuf->name);
>> + dmabuf->name = name;
>> + spin_unlock(&dmabuf->name_lock);
>> +
>> + return 0;
>> +}
>> +EXPORT_SYMBOL_NS_GPL(dma_buf_set_name, "DMA_BUF");
>> +
>> static int dma_buf_wrap_sg_table(struct sg_table **sg_table)
>> {
>> struct scatterlist *to_sg, *from_sg;
>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>> index d15b2b31d3c9..952a2c196ad4 100644
>> --- a/include/linux/dma-buf.h
>> +++ b/include/linux/dma-buf.h
>> @@ -571,6 +571,8 @@ void dma_buf_fd_install(struct dma_buf *dmabuf, int fd);
>> struct dma_buf *dma_buf_get(int fd);
>> void dma_buf_put(struct dma_buf *dmabuf);
>>
>> +int dma_buf_set_name(struct dma_buf *dmabuf, char *name);
>> +
>> struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *,
>> enum dma_data_direction);
>> void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
>
next prev parent reply other threads:[~2026-09-29 11:43 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 15:21 [PATCH v7 0/9] vfio/pci: Add mmap() for DMABUFs Matt Evans
2026-09-24 15:21 ` [PATCH v7 1/9] vfio/pci: Remove DMABUF export dependency on vdev->memory_lock Matt Evans
2026-09-24 15:21 ` [PATCH v7 2/9] vfio/pci: Un-revoke DMABUFs in LOW_POWER_ENTRY_WITH_WAKEUP resume Matt Evans
2026-09-24 15:21 ` [PATCH v7 3/9] dma-buf: Provide dma_buf_set_name() Matt Evans
2026-09-25 8:39 ` Christian König
2026-09-29 11:43 ` Matt Evans [this message]
2026-09-24 15:21 ` [PATCH v7 4/9] vfio/pci: Add a helper to look up PFNs for DMABUFs Matt Evans
2026-09-24 15:21 ` [PATCH v7 5/9] vfio/pci: Add a helper to create a DMABUF for a BAR-map VMA Matt Evans
2026-09-24 15:21 ` [PATCH v7 6/9] vfio/pci: Convert BAR mmap() to use a DMABUF Matt Evans
2026-09-28 17:59 ` Alex Mastro
2026-09-24 15:21 ` [PATCH v7 7/9] vfio/pci: Clean up BAR zap and revocation Matt Evans
2026-09-24 15:21 ` [PATCH v7 8/9] vfio/pci: Support mmap() of a VFIO DMABUF Matt Evans
2026-09-24 15:21 ` [PATCH v7 9/9] vfio/pci: Revoke a DMABUF on request from userspace Matt Evans
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ed9a25ad-9a10-407d-b910-1b5cbdff88b4@ozlabs.org \
--to=matt@ozlabs.org \
--cc=alex@shazbot.org \
--cc=amastro@fb.com \
--cc=ankita@nvidia.com \
--cc=apopple@nvidia.com \
--cc=bhelgaas@google.com \
--cc=bjorn@kernel.org \
--cc=christian.koenig@amd.com \
--cc=dmatlack@google.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jgg@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=leon@kernel.org \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=liulongfang@huawei.com \
--cc=logang@deltatee.com \
--cc=mngyadam@amazon.de \
--cc=praan@google.com \
--cc=sumit.semwal@linaro.org \
--cc=vivek.kasireddy@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®