Re: [PATCH v2 1/9] PCI/P2PDMA: Add CONFIG_PCI_P2PDMA_CORE

From: Matt Evans

Date: Wed May 27 2026 - 13:13:52 EST


Hi Logan,

On 27/05/2026 17:07, Logan Gunthorpe wrote:

On 2026-05-27 04:23, Matt Evans 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@xxxxxxxx>

Largely this looks good to me. I have one minor nit below that you can
apply or not. Either way, feel free to add:

Reviewed-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>


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
}

I'm personally not a fan of adding #ifdefs inside functions like this.
This instance is small and easy to understand, but it can quickly become
a bit of a mess if we start adding more features. I probably would have
created a pci_p2pdma_release_pool() helper which does the inverse of
pci_p2pdma_setup_pool(), it would be called in pci_p2pdma_release() and
an empty implementation would be provided in the case where
CONFIG_PCI_P2PDMA is not set.

That's cleaner, I'll do that. Thanks for the review.


Matt