From: Alex Williamson <alex.williamson@nvidia.com>
To: Matt Evans <mattev@meta.com>
Cc: Leon Romanovsky <leon@kernel.org>,
Jason Gunthorpe <jgg@nvidia.com>, Alex Mastro <amastro@fb.com>,
Christian König <christian.koenig@amd.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Logan Gunthorpe <logang@deltatee.com>,
Mahmoud Adam <mngyadam@amazon.de>,
David Matlack <dmatlack@google.com>,
Björn Töpel <bjorn@kernel.org>,
Sumit Semwal <sumit.semwal@linaro.org>,
Kevin Tian <kevin.tian@intel.com>,
Ankit Agrawal <ankita@nvidia.com>,
Pranjal Shrivastava <praan@google.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 v2 1/9] PCI/P2PDMA: Add CONFIG_PCI_P2PDMA_CORE
Date: Wed, 27 May 2026 15:09:46 -0600 [thread overview]
Message-ID: <20260527150946.312b3042@nvidia.com> (raw)
In-Reply-To: <20260527102319.100128-2-mattev@meta.com>
On Wed, 27 May 2026 03:23:04 -0700
Matt Evans <mattev@meta.com> wrote:
> The P2PDMA code currently provides two features under the same
> CONFIG_PCI_P2PDMA option:
>
> 1. Locate providers via pcim_p2pdma_provider()
> 2. Manage actual P2P DMA
>
> Other code (such as vfio-pci) depends on 1, without having a hard
> dependency on 2.
>
> A future commit expands the use of DMABUF in vfio-pci for non-P2P
> scenarios, relying on pcim_p2pdma_provider() always being present. If
> that depended on CONFIG_PCI_P2PDMA, it would make vfio-pci only
> available if CONFIG_ZONE_DEVICE is present (e.g. 64-bit systems), even
> when P2P is not needed.
>
> To resolve this, introduce CONFIG_PCI_P2PDMA_CORE which contains the
> basic provider functionality to make it available even if the
> CONFIG_PCI_P2PDMA feature is disabled or unavailable due to
> !CONFIG_ZONE_DEVICE. Users such as vfio-pci can enable their own P2P
> features based off the original CONFIG_PCI_P2PDMA (available when
> CONFIG_ZONE_DEVICE is set).
>
> Signed-off-by: Matt Evans <mattev@meta.com>
> ---
> drivers/pci/Kconfig | 10 +++++-----
> drivers/pci/Makefile | 2 +-
> drivers/pci/p2pdma.c | 16 ++++++++++++++++
> include/linux/pci-p2pdma.h | 24 ++++++++++++++----------
> include/linux/pci.h | 2 +-
> 5 files changed, 37 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
> index 33c88432b728..59d70bc84cc9 100644
> --- a/drivers/pci/Kconfig
> +++ b/drivers/pci/Kconfig
> @@ -206,11 +206,7 @@ config PCIE_TPH
> config PCI_P2PDMA
> bool "PCI peer-to-peer transfer support"
> depends on ZONE_DEVICE
> - #
> - # The need for the scatterlist DMA bus address flag means PCI P2PDMA
> - # requires 64bit
> - #
> - depends on 64BIT
> + select PCI_P2PDMA_CORE
> select GENERIC_ALLOCATOR
> select NEED_SG_DMA_FLAGS
> help
> @@ -226,6 +222,10 @@ config PCI_P2PDMA
>
> If unsure, say N.
>
> +config PCI_P2PDMA_CORE
> + default n
> + bool
> +
> config PCI_LABEL
> def_bool y if (DMI || ACPI)
> select NLS
> diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
> index 41ebc3b9a518..419b646a301d 100644
> --- a/drivers/pci/Makefile
> +++ b/drivers/pci/Makefile
> @@ -30,7 +30,7 @@ obj-$(CONFIG_PCI_SYSCALL) += syscall.o
> obj-$(CONFIG_PCI_STUB) += pci-stub.o
> obj-$(CONFIG_PCI_PF_STUB) += pci-pf-stub.o
> obj-$(CONFIG_PCI_ECAM) += ecam.o
> -obj-$(CONFIG_PCI_P2PDMA) += p2pdma.o
> +obj-$(CONFIG_PCI_P2PDMA_CORE) += p2pdma.o
> obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o
> obj-$(CONFIG_VGA_ARB) += vgaarb.o
> obj-$(CONFIG_PCI_DOE) += doe.o
> diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
> index 7c898542af8d..619d46c652b8 100644
> --- a/drivers/pci/p2pdma.c
> +++ b/drivers/pci/p2pdma.c
> @@ -28,6 +28,14 @@ struct pci_p2pdma {
> struct p2pdma_provider mem[PCI_STD_NUM_BARS];
> };
>
> +/*
> + * CONFIG_PCI_P2PDMA_CORE provides just a bare-bones init and
> + * pcim_p2pdma_provider() interface (used by things like VFIO even if
> + * full P2PDMA isn't present). The full P2PDMA feature is under the
> + * CONFIG_PCI_P2PDMA option.
> + */
> +#ifdef CONFIG_PCI_P2PDMA
> +
> struct pci_p2pdma_pagemap {
> struct dev_pagemap pgmap;
> struct p2pdma_provider *mem;
> @@ -226,6 +234,8 @@ static const struct dev_pagemap_ops p2pdma_pgmap_ops = {
> .folio_free = p2pdma_folio_free,
> };
>
> +#endif /* CONFIG_PCI_P2PDMA */
> +
> static void pci_p2pdma_release(void *data)
> {
> struct pci_dev *pdev = data;
> @@ -241,11 +251,13 @@ static void pci_p2pdma_release(void *data)
> synchronize_rcu();
> xa_destroy(&p2pdma->map_types);
>
> +#ifdef CONFIG_PCI_P2PDMA
> if (!p2pdma->pool)
> return;
>
> gen_pool_destroy(p2pdma->pool);
> sysfs_remove_group(&pdev->dev.kobj, &p2pmem_group);
> +#endif
> }
>
> /**
> @@ -330,6 +342,8 @@ struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev, int bar)
> }
> EXPORT_SYMBOL_GPL(pcim_p2pdma_provider);
>
> +#ifdef CONFIG_PCI_P2PDMA
> +
> static int pci_p2pdma_setup_pool(struct pci_dev *pdev)
> {
> struct pci_p2pdma *p2pdma;
> @@ -1207,3 +1221,5 @@ ssize_t pci_p2pdma_enable_show(char *page, struct pci_dev *p2p_dev,
> return sprintf(page, "%s\n", pci_name(p2p_dev));
> }
> EXPORT_SYMBOL_GPL(pci_p2pdma_enable_show);
> +
> +#endif
This deserves a /* CONFIG_PCI_P2PDMA */ reference like the previous
long span, though potentially a better solution would be to split the
core code out to a separate file with shared header. I asked opus to
see what this would look like and it generated the patch below
(unverified, compile tested only). Bigger diff, harder to follow
blame, but the shape of the core is much more apparent. You're welcome
to take or leave it. Thanks,
Alex
drivers/pci/Kconfig | 12 ++--
drivers/pci/Makefile | 1
drivers/pci/p2pdma.c | 115 ++++-----------------------------------
drivers/pci/p2pdma.h | 30 ++++++++++
drivers/pci/p2pdma_core.c | 119 +++++++++++++++++++++++++++++++++++++++++
include/linux/pci-p2pdma.h | 24 ++++----
include/linux/pci.h | 2
7 files changed, 184 insertions(+), 119 deletions(-)
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
index 33c88432b728..2e5af8c576f5 100644
--- a/drivers/pci/Kconfig
+++ b/drivers/pci/Kconfig
@@ -206,11 +206,7 @@ config PCIE_TPH
config PCI_P2PDMA
bool "PCI peer-to-peer transfer support"
depends on ZONE_DEVICE
- #
- # The need for the scatterlist DMA bus address flag means PCI P2PDMA
- # requires 64bit
- #
- depends on 64BIT
+ select PCI_P2PDMA_CORE
select GENERIC_ALLOCATOR
select NEED_SG_DMA_FLAGS
help
@@ -226,6 +222,12 @@ config PCI_P2PDMA
If unsure, say N.
+# Selected by features that only need the pcim_p2pdma_provider() interface
+# (e.g. vfio-pci's DMABUF export of BAR ranges) without depending on the
+# full ZONE_DEVICE-backed allocator that PCI_P2PDMA pulls in.
+config PCI_P2PDMA_CORE
+ bool
+
config PCI_LABEL
def_bool y if (DMI || ACPI)
select NLS
diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
index 41ebc3b9a518..0b32572d57a1 100644
--- a/drivers/pci/Makefile
+++ b/drivers/pci/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_PCI_SYSCALL) += syscall.o
obj-$(CONFIG_PCI_STUB) += pci-stub.o
obj-$(CONFIG_PCI_PF_STUB) += pci-pf-stub.o
obj-$(CONFIG_PCI_ECAM) += ecam.o
+obj-$(CONFIG_PCI_P2PDMA_CORE) += p2pdma_core.o
obj-$(CONFIG_PCI_P2PDMA) += p2pdma.o
obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o
obj-$(CONFIG_VGA_ARB) += vgaarb.o
diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
index 7c898542af8d..158c274fda18 100644
--- a/drivers/pci/p2pdma.c
+++ b/drivers/pci/p2pdma.c
@@ -21,12 +21,7 @@
#include <linux/seq_buf.h>
#include <linux/xarray.h>
-struct pci_p2pdma {
- struct gen_pool *pool;
- bool p2pmem_published;
- struct xarray map_types;
- struct p2pdma_provider mem[PCI_STD_NUM_BARS];
-};
+#include "p2pdma.h"
struct pci_p2pdma_pagemap {
struct dev_pagemap pgmap;
@@ -226,110 +221,24 @@ static const struct dev_pagemap_ops p2pdma_pgmap_ops = {
.folio_free = p2pdma_folio_free,
};
-static void pci_p2pdma_release(void *data)
+/*
+ * Tear down the allocator pool side of pci_p2pdma. Called from the core
+ * release path (pci_p2pdma_release in p2pdma_core.c) while pdev->p2pdma
+ * has already been cleared but the structure itself has not yet been
+ * freed. Pairs with the rcu_dereference()s in pci_alloc_p2pmem() and
+ * friends, so that no allocator readers are in flight when we destroy
+ * the pool.
+ */
+void pci_p2pdma_release_pool(struct pci_p2pdma *p2pdma, struct pci_dev *pdev)
{
- struct pci_dev *pdev = data;
- struct pci_p2pdma *p2pdma;
-
- p2pdma = rcu_dereference_protected(pdev->p2pdma, 1);
- if (!p2pdma)
- return;
-
- /* Flush and disable pci_alloc_p2p_mem() */
- pdev->p2pdma = NULL;
- if (p2pdma->pool)
- synchronize_rcu();
- xa_destroy(&p2pdma->map_types);
-
if (!p2pdma->pool)
return;
+ synchronize_rcu();
gen_pool_destroy(p2pdma->pool);
sysfs_remove_group(&pdev->dev.kobj, &p2pmem_group);
}
-/**
- * pcim_p2pdma_init - Initialise peer-to-peer DMA providers
- * @pdev: The PCI device to enable P2PDMA for
- *
- * This function initializes the peer-to-peer DMA infrastructure
- * for a PCI device. It allocates and sets up the necessary data
- * structures to support P2PDMA operations, including mapping type
- * tracking.
- */
-int pcim_p2pdma_init(struct pci_dev *pdev)
-{
- struct pci_p2pdma *p2p;
- int i, ret;
-
- p2p = rcu_dereference_protected(pdev->p2pdma, 1);
- if (p2p)
- return 0;
-
- p2p = devm_kzalloc(&pdev->dev, sizeof(*p2p), GFP_KERNEL);
- if (!p2p)
- return -ENOMEM;
-
- xa_init(&p2p->map_types);
- /*
- * Iterate over all standard PCI BARs and record only those that
- * correspond to MMIO regions. Skip non-memory resources (e.g. I/O
- * port BARs) since they cannot be used for peer-to-peer (P2P)
- * transactions.
- */
- for (i = 0; i < PCI_STD_NUM_BARS; i++) {
- if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM))
- continue;
-
- p2p->mem[i].owner = &pdev->dev;
- p2p->mem[i].bus_offset =
- pci_bus_address(pdev, i) - pci_resource_start(pdev, i);
- }
-
- ret = devm_add_action_or_reset(&pdev->dev, pci_p2pdma_release, pdev);
- if (ret)
- goto out_p2p;
-
- rcu_assign_pointer(pdev->p2pdma, p2p);
- return 0;
-
-out_p2p:
- devm_kfree(&pdev->dev, p2p);
- return ret;
-}
-EXPORT_SYMBOL_GPL(pcim_p2pdma_init);
-
-/**
- * pcim_p2pdma_provider - Get peer-to-peer DMA provider
- * @pdev: The PCI device to enable P2PDMA for
- * @bar: BAR index to get provider
- *
- * This function gets peer-to-peer DMA provider for a PCI device. The lifetime
- * of the provider (and of course the MMIO) is bound to the lifetime of the
- * driver. A driver calling this function must ensure that all references to the
- * provider, and any DMA mappings created for any MMIO, are all cleaned up
- * before the driver remove() completes.
- *
- * Since P2P is almost always shared with a second driver this means some system
- * to notify, invalidate and revoke the MMIO's DMA must be in place to use this
- * function. For example a revoke can be built using DMABUF.
- */
-struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev, int bar)
-{
- struct pci_p2pdma *p2p;
-
- if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
- return NULL;
-
- p2p = rcu_dereference_protected(pdev->p2pdma, 1);
- if (WARN_ON(!p2p))
- /* Someone forgot to call to pcim_p2pdma_init() before */
- return NULL;
-
- return &p2p->mem[bar];
-}
-EXPORT_SYMBOL_GPL(pcim_p2pdma_provider);
-
static int pci_p2pdma_setup_pool(struct pci_dev *pdev)
{
struct pci_p2pdma *p2pdma;
@@ -932,7 +841,7 @@ void *pci_alloc_p2pmem(struct pci_dev *pdev, size_t size)
struct pci_p2pdma *p2pdma;
/*
- * Pairs with synchronize_rcu() in pci_p2pdma_release() to
+ * Pairs with synchronize_rcu() in pci_p2pdma_release_pool() to
* ensure pdev->p2pdma is non-NULL for the duration of the
* read-lock.
*/
diff --git a/drivers/pci/p2pdma.h b/drivers/pci/p2pdma.h
new file mode 100644
index 000000000000..790e1df8b609
--- /dev/null
+++ b/drivers/pci/p2pdma.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * PCI Peer-to-Peer DMA internal definitions, shared between p2pdma_core.c
+ * (always built when CONFIG_PCI_P2PDMA_CORE is set) and p2pdma.c (built
+ * only when the full CONFIG_PCI_P2PDMA feature is enabled).
+ */
+
+#ifndef DRIVERS_PCI_P2PDMA_H
+#define DRIVERS_PCI_P2PDMA_H
+
+#include <linux/genalloc.h>
+#include <linux/pci.h>
+#include <linux/pci-p2pdma.h>
+#include <linux/xarray.h>
+
+struct pci_p2pdma {
+ struct gen_pool *pool;
+ bool p2pmem_published;
+ struct xarray map_types;
+ struct p2pdma_provider mem[PCI_STD_NUM_BARS];
+};
+
+#ifdef CONFIG_PCI_P2PDMA
+void pci_p2pdma_release_pool(struct pci_p2pdma *p2pdma, struct pci_dev *pdev);
+#else
+static inline void pci_p2pdma_release_pool(struct pci_p2pdma *p2pdma,
+ struct pci_dev *pdev) {}
+#endif
+
+#endif /* DRIVERS_PCI_P2PDMA_H */
diff --git a/drivers/pci/p2pdma_core.c b/drivers/pci/p2pdma_core.c
new file mode 100644
index 000000000000..c7622613f03a
--- /dev/null
+++ b/drivers/pci/p2pdma_core.c
@@ -0,0 +1,119 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * PCI Peer-to-Peer DMA core: provider infrastructure shared by drivers
+ * that only need pcim_p2pdma_provider() (e.g. vfio-pci) without depending
+ * on the full CONFIG_PCI_P2PDMA allocator/pool feature.
+ *
+ * Copyright (c) 2016-2018, Logan Gunthorpe
+ * Copyright (c) 2016-2017, Microsemi Corporation
+ * Copyright (c) 2017, Christoph Hellwig
+ * Copyright (c) 2018, Eideticom Inc.
+ */
+
+#define pr_fmt(fmt) "pci-p2pdma: " fmt
+
+#include <linux/device.h>
+#include <linux/pci.h>
+#include <linux/pci-p2pdma.h>
+#include <linux/rcupdate.h>
+#include <linux/slab.h>
+#include <linux/xarray.h>
+
+#include "p2pdma.h"
+
+static void pci_p2pdma_release(void *data)
+{
+ struct pci_dev *pdev = data;
+ struct pci_p2pdma *p2pdma;
+
+ p2pdma = rcu_dereference_protected(pdev->p2pdma, 1);
+ if (!p2pdma)
+ return;
+
+ /* Flush and disable pci_alloc_p2p_mem() */
+ pdev->p2pdma = NULL;
+ pci_p2pdma_release_pool(p2pdma, pdev);
+ xa_destroy(&p2pdma->map_types);
+}
+
+/**
+ * pcim_p2pdma_init - Initialise peer-to-peer DMA providers
+ * @pdev: The PCI device to enable P2PDMA for
+ *
+ * This function initializes the peer-to-peer DMA infrastructure
+ * for a PCI device. It allocates and sets up the necessary data
+ * structures to support P2PDMA operations, including mapping type
+ * tracking.
+ */
+int pcim_p2pdma_init(struct pci_dev *pdev)
+{
+ struct pci_p2pdma *p2p;
+ int i, ret;
+
+ p2p = rcu_dereference_protected(pdev->p2pdma, 1);
+ if (p2p)
+ return 0;
+
+ p2p = devm_kzalloc(&pdev->dev, sizeof(*p2p), GFP_KERNEL);
+ if (!p2p)
+ return -ENOMEM;
+
+ xa_init(&p2p->map_types);
+ /*
+ * Iterate over all standard PCI BARs and record only those that
+ * correspond to MMIO regions. Skip non-memory resources (e.g. I/O
+ * port BARs) since they cannot be used for peer-to-peer (P2P)
+ * transactions.
+ */
+ for (i = 0; i < PCI_STD_NUM_BARS; i++) {
+ if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM))
+ continue;
+
+ p2p->mem[i].owner = &pdev->dev;
+ p2p->mem[i].bus_offset =
+ pci_bus_address(pdev, i) - pci_resource_start(pdev, i);
+ }
+
+ ret = devm_add_action_or_reset(&pdev->dev, pci_p2pdma_release, pdev);
+ if (ret)
+ goto out_p2p;
+
+ rcu_assign_pointer(pdev->p2pdma, p2p);
+ return 0;
+
+out_p2p:
+ devm_kfree(&pdev->dev, p2p);
+ return ret;
+}
+EXPORT_SYMBOL_GPL(pcim_p2pdma_init);
+
+/**
+ * pcim_p2pdma_provider - Get peer-to-peer DMA provider
+ * @pdev: The PCI device to enable P2PDMA for
+ * @bar: BAR index to get provider
+ *
+ * This function gets peer-to-peer DMA provider for a PCI device. The lifetime
+ * of the provider (and of course the MMIO) is bound to the lifetime of the
+ * driver. A driver calling this function must ensure that all references to the
+ * provider, and any DMA mappings created for any MMIO, are all cleaned up
+ * before the driver remove() completes.
+ *
+ * Since P2P is almost always shared with a second driver this means some system
+ * to notify, invalidate and revoke the MMIO's DMA must be in place to use this
+ * function. For example a revoke can be built using DMABUF.
+ */
+struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev, int bar)
+{
+ struct pci_p2pdma *p2p;
+
+ if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
+ return NULL;
+
+ p2p = rcu_dereference_protected(pdev->p2pdma, 1);
+ if (WARN_ON(!p2p))
+ /* Someone forgot to call to pcim_p2pdma_init() before */
+ return NULL;
+
+ return &p2p->mem[bar];
+}
+EXPORT_SYMBOL_GPL(pcim_p2pdma_provider);
diff --git a/include/linux/pci-p2pdma.h b/include/linux/pci-p2pdma.h
index 873de20a2247..4c42a7b2ee85 100644
--- a/include/linux/pci-p2pdma.h
+++ b/include/linux/pci-p2pdma.h
@@ -67,9 +67,22 @@ enum pci_p2pdma_map_type {
PCI_P2PDMA_MAP_THRU_HOST_BRIDGE,
};
-#ifdef CONFIG_PCI_P2PDMA
+#ifdef CONFIG_PCI_P2PDMA_CORE
int pcim_p2pdma_init(struct pci_dev *pdev);
struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev, int bar);
+#else
+static inline int pcim_p2pdma_init(struct pci_dev *pdev)
+{
+ return -EOPNOTSUPP;
+}
+static inline struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev,
+ int bar)
+{
+ return NULL;
+}
+#endif
+
+#ifdef CONFIG_PCI_P2PDMA
int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size,
u64 offset);
int pci_p2pdma_distance_many(struct pci_dev *provider, struct device **clients,
@@ -89,15 +102,6 @@ ssize_t pci_p2pdma_enable_show(char *page, struct pci_dev *p2p_dev,
enum pci_p2pdma_map_type pci_p2pdma_map_type(struct p2pdma_provider *provider,
struct device *dev);
#else /* CONFIG_PCI_P2PDMA */
-static inline int pcim_p2pdma_init(struct pci_dev *pdev)
-{
- return -EOPNOTSUPP;
-}
-static inline struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev,
- int bar)
-{
- return NULL;
-}
static inline int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar,
size_t size, u64 offset)
{
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 2c4454583c11..531aec355686 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -557,7 +557,7 @@ struct pci_dev {
u16 pasid_cap; /* PASID Capability offset */
u16 pasid_features;
#endif
-#ifdef CONFIG_PCI_P2PDMA
+#ifdef CONFIG_PCI_P2PDMA_CORE
struct pci_p2pdma __rcu *p2pdma;
#endif
#ifdef CONFIG_PCI_DOE
next prev parent reply other threads:[~2026-05-27 21:09 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-27 10:23 [PATCH v2 0/9] vfio/pci: Add mmap() for DMABUFs Matt Evans
2026-05-27 10:23 ` [PATCH v2 1/9] PCI/P2PDMA: Add CONFIG_PCI_P2PDMA_CORE Matt Evans
2026-05-27 16:07 ` Logan Gunthorpe
2026-05-27 17:13 ` Matt Evans
2026-05-27 21:09 ` Alex Williamson [this message]
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 2/9] vfio/pci: Add a helper to look up PFNs for DMABUFs Matt Evans
2026-05-27 22:38 ` Alex Williamson
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 3/9] vfio/pci: Add a helper to create a DMABUF for a BAR-map VMA Matt Evans
2026-05-27 22:59 ` Alex Williamson
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 4/9] vfio/pci: Convert BAR mmap() to use a DMABUF Matt Evans
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 5/9] vfio/pci: Provide a user-facing name for BAR mappings Matt Evans
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 6/9] vfio/pci: Clean up BAR zap and revocation Matt Evans
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 7/9] vfio/pci: Support mmap() of a VFIO DMABUF Matt Evans
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 8/9] vfio/pci: Permanently revoke a DMABUF on request Matt Evans
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-27 10:23 ` [PATCH v2 9/9] vfio/pci: Add mmap() attributes to DMABUF feature Matt Evans
2026-05-28 2:28 ` Claude review: " Claude Code Review Bot
2026-05-28 2:28 ` Claude review: vfio/pci: Add mmap() for DMABUFs Claude Code Review Bot
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=20260527150946.312b3042@nvidia.com \
--to=alex.williamson@nvidia.com \
--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=logang@deltatee.com \
--cc=mattev@meta.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