From: Jason Gunthorpe <jgg@ziepe.ca>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: "Leon Romanovsky" <leon@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Logan Gunthorpe" <logang@deltatee.com>,
"Jens Axboe" <axboe@kernel.dk>,
"Robin Murphy" <robin.murphy@arm.com>,
"Joerg Roedel" <joro@8bytes.org>, "Will Deacon" <will@kernel.org>,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Christian König" <christian.koenig@amd.com>,
"Kees Cook" <kees@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
"Ankit Agrawal" <ankita@nvidia.com>,
"Yishai Hadas" <yishaih@nvidia.com>,
"Shameer Kolothum" <skolothumtho@nvidia.com>,
"Alex Williamson" <alex@shazbot.org>,
"Krishnakant Jaju" <kjaju@nvidia.com>,
"Matt Ochs" <mochs@nvidia.com>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-media@vger.kernel.org" <linux-media@vger.kernel.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"linaro-mm-sig@lists.linaro.org" <linaro-mm-sig@lists.linaro.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-hardening@vger.kernel.org"
<linux-hardening@vger.kernel.org>,
"Kasireddy, Vivek" <vivek.kasireddy@intel.com>
Subject: Re: [PATCH v8 10/11] vfio/pci: Add dma-buf export support for MMIO regions
Date: Tue, 18 Nov 2025 10:28:49 -0400 [thread overview]
Message-ID: <20251118142849.GG17968@ziepe.ca> (raw)
In-Reply-To: <BN9PR11MB527610F3240E677BE9720C2B8CD6A@BN9PR11MB5276.namprd11.prod.outlook.com>
On Tue, Nov 18, 2025 at 07:33:23AM +0000, Tian, Kevin wrote:
> > From: Leon Romanovsky <leon@kernel.org>
> > Sent: Tuesday, November 11, 2025 5:58 PM
> >
> > - if (!new_mem)
> > + if (!new_mem) {
> > vfio_pci_zap_and_down_write_memory_lock(vdev);
> > - else
> > + vfio_pci_dma_buf_move(vdev, true);
> > + } else {
> > down_write(&vdev->memory_lock);
> > + }
>
> shouldn't we notify move before zapping the bars? otherwise there is
> still a small window in between where the exporter already has the
> mapping cleared while the importer still keeps it...
zapping the VMA and moving/revoking the DMABUF are independent
operations that can happen in any order. They effect different kinds
of users. The VMA zap prevents CPU access from userspace, the DMABUF
move prevents DMA access from devices.
The order has to be like the above because vfio_pci_dma_buf_move()
must be called under the memory lock and
vfio_pci_zap_and_down_write_memory_lock() gets the memory lock..
> > +static void vfio_pci_dma_buf_release(struct dma_buf *dmabuf)
> > +{
> > + struct vfio_pci_dma_buf *priv = dmabuf->priv;
> > +
> > + /*
> > + * Either this or vfio_pci_dma_buf_cleanup() will remove from the list.
> > + * The refcount prevents both.
>
> which refcount? I thought it's vdev->memory_lock preventing the race...
Refcount on the dmabuf
> > +int vfio_pci_core_fill_phys_vec(struct dma_buf_phys_vec *phys_vec,
> > + struct vfio_region_dma_range *dma_ranges,
> > + size_t nr_ranges, phys_addr_t start,
> > + phys_addr_t len)
> > +{
> > + phys_addr_t max_addr;
> > + unsigned int i;
> > +
> > + max_addr = start + len;
> > + for (i = 0; i < nr_ranges; i++) {
> > + phys_addr_t end;
> > +
> > + if (!dma_ranges[i].length)
> > + return -EINVAL;
>
> Looks redundant as there is already a check in validate_dmabuf_input().
Agree
> > +int vfio_pci_core_feature_dma_buf(struct vfio_pci_core_device *vdev, u32
> > flags,
> > + struct vfio_device_feature_dma_buf __user
> > *arg,
> > + size_t argsz)
> > +{
> > + struct vfio_device_feature_dma_buf get_dma_buf = {};
> > + struct vfio_region_dma_range *dma_ranges;
> > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
> > + struct vfio_pci_dma_buf *priv;
> > + size_t length;
> > + int ret;
> > +
> > + if (!vdev->pci_ops || !vdev->pci_ops->get_dmabuf_phys)
> > + return -EOPNOTSUPP;
> > +
> > + ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_GET,
> > + sizeof(get_dma_buf));
> > + if (ret != 1)
> > + return ret;
> > +
> > + if (copy_from_user(&get_dma_buf, arg, sizeof(get_dma_buf)))
> > + return -EFAULT;
> > +
> > + if (!get_dma_buf.nr_ranges || get_dma_buf.flags)
> > + return -EINVAL;
>
> unknown flag bits get -EOPNOTSUPP.
Agree
> > +
> > +void vfio_pci_dma_buf_cleanup(struct vfio_pci_core_device *vdev)
> > +{
> > + struct vfio_pci_dma_buf *priv;
> > + struct vfio_pci_dma_buf *tmp;
> > +
> > + down_write(&vdev->memory_lock);
> > + list_for_each_entry_safe(priv, tmp, &vdev->dmabufs, dmabufs_elm)
> > {
> > + if (!get_file_active(&priv->dmabuf->file))
> > + continue;
> > +
> > + dma_resv_lock(priv->dmabuf->resv, NULL);
> > + list_del_init(&priv->dmabufs_elm);
> > + priv->vdev = NULL;
> > + priv->revoked = true;
> > + dma_buf_move_notify(priv->dmabuf);
> > + dma_resv_unlock(priv->dmabuf->resv);
> > + vfio_device_put_registration(&vdev->vdev);
> > + fput(priv->dmabuf->file);
>
> dma_buf_put(priv->dmabuf), consistent with other places.
Someone else said this, I don't agree, the above got the get via
get_file_active() instead of a dma_buf version..
So we should pair with get_file_active() vs fput().
Christian rejected the idea of adding a dmabuf wrapper for
get_file_active(), oh well.
> > +struct vfio_device_feature_dma_buf {
> > + __u32 region_index;
> > + __u32 open_flags;
> > + __u32 flags;
>
> Usually the 'flags' field is put in the start (following argsz if existing).
Yeah, but doesn't really matter.
Thanks,
Jason
next prev parent reply other threads:[~2025-11-18 14:28 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-11 9:57 [PATCH v8 00/11] vfio/pci: Allow MMIO regions to be exported through dma-buf Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 01/11] PCI/P2PDMA: Separate the mmap() support from the core logic Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 02/11] PCI/P2PDMA: Simplify bus address mapping API Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 03/11] PCI/P2PDMA: Refactor to separate core P2P functionality from memory allocation Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 04/11] PCI/P2PDMA: Provide an access to pci_p2pdma_map_type() function Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 05/11] PCI/P2PDMA: Document DMABUF model Leon Romanovsky
2025-11-19 9:18 ` Christian König
2025-11-19 13:13 ` Leon Romanovsky
2025-11-19 13:35 ` Jason Gunthorpe
2025-11-19 14:06 ` Christian König
2025-11-19 19:45 ` Jason Gunthorpe
2025-11-19 20:45 ` Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 06/11] dma-buf: provide phys_vec to scatter-gather mapping routine Leon Romanovsky
2025-11-18 23:02 ` Jason Gunthorpe
2025-11-19 0:06 ` Nicolin Chen
2025-11-19 13:32 ` Leon Romanovsky
2025-11-19 5:54 ` Tian, Kevin
2025-11-19 13:30 ` Leon Romanovsky
2025-11-19 13:37 ` Jason Gunthorpe
2025-11-19 13:45 ` Leon Romanovsky
2025-11-19 13:16 ` [Linaro-mm-sig] " Christian König
2025-11-19 13:25 ` Jason Gunthorpe
2025-11-19 13:42 ` Christian König
2025-11-19 13:48 ` Leon Romanovsky
2025-11-19 19:31 ` Jason Gunthorpe
2025-11-19 20:54 ` Leon Romanovsky
2025-11-20 7:08 ` Christian König
2025-11-20 7:41 ` Leon Romanovsky
2025-11-20 7:54 ` Christian König
2025-11-20 8:06 ` Leon Romanovsky
2025-11-20 8:32 ` Christian König
2025-11-20 8:42 ` Leon Romanovsky
2025-11-20 13:20 ` Jason Gunthorpe
2025-11-19 13:42 ` Leon Romanovsky
2025-11-19 14:11 ` Christian König
2025-11-19 14:50 ` Leon Romanovsky
2025-11-19 14:53 ` Christian König
2025-11-19 15:41 ` Leon Romanovsky
2025-11-19 16:33 ` Leon Romanovsky
2025-11-20 7:03 ` Christian König
2025-11-20 7:38 ` Leon Romanovsky
2025-11-19 19:36 ` Jason Gunthorpe
2025-11-11 9:57 ` [PATCH v8 07/11] vfio: Export vfio device get and put registration helpers Leon Romanovsky
2025-11-18 7:10 ` Tian, Kevin
2025-11-11 9:57 ` [PATCH v8 08/11] vfio/pci: Share the core device pointer while invoking feature functions Leon Romanovsky
2025-11-18 7:11 ` Tian, Kevin
2025-11-11 9:57 ` [PATCH v8 09/11] vfio/pci: Enable peer-to-peer DMA transactions by default Leon Romanovsky
2025-11-18 7:18 ` Tian, Kevin
2025-11-18 20:10 ` Alex Williamson
2025-11-19 0:01 ` Tian, Kevin
2025-11-18 20:18 ` Keith Busch
2025-11-19 0:02 ` Tian, Kevin
2025-11-19 13:54 ` Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 10/11] vfio/pci: Add dma-buf export support for MMIO regions Leon Romanovsky
2025-11-18 7:33 ` Tian, Kevin
2025-11-18 14:28 ` Jason Gunthorpe [this message]
2025-11-18 23:56 ` Tian, Kevin
2025-11-19 19:41 ` Jason Gunthorpe
2025-11-19 20:50 ` Leon Romanovsky
2025-11-11 9:57 ` [PATCH v8 11/11] vfio/nvgrace: Support get_dmabuf_phys Leon Romanovsky
2025-11-18 7:34 ` Tian, Kevin
2025-11-18 7:59 ` Ankit Agrawal
2025-11-18 14:30 ` Jason Gunthorpe
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=20251118142849.GG17968@ziepe.ca \
--to=jgg@ziepe.ca \
--cc=akpm@linux-foundation.org \
--cc=alex@shazbot.org \
--cc=ankita@nvidia.com \
--cc=axboe@kernel.dk \
--cc=bhelgaas@google.com \
--cc=christian.koenig@amd.com \
--cc=corbet@lwn.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=gustavoars@kernel.org \
--cc=iommu@lists.linux.dev \
--cc=joro@8bytes.org \
--cc=kees@kernel.org \
--cc=kevin.tian@intel.com \
--cc=kjaju@nvidia.com \
--cc=kvm@vger.kernel.org \
--cc=leon@kernel.org \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-pci@vger.kernel.org \
--cc=logang@deltatee.com \
--cc=m.szyprowski@samsung.com \
--cc=mochs@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=skolothumtho@nvidia.com \
--cc=sumit.semwal@linaro.org \
--cc=vivek.kasireddy@intel.com \
--cc=will@kernel.org \
--cc=yishaih@nvidia.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;
as well as URLs for NNTP newsgroup(s).