From: Pavel Popov <pavel.e.popov@intel.com>
To: Bjorn Helgaas <bhelgaas@google.com>,
Logan Gunthorpe <logang@deltatee.com>
Cc: pavel.e.popov@intel.com, Jim Chow <jim.chow@broadcom.com>,
Radu Rugina <radu.rugina@broadcom.com>,
Alexey Makhalov <alexey.makhalov@broadcom.com>,
Wei Liu <wei.liu@kernel.org>,
Michael Kelley <mhklinux@outlook.com>,
Lukas Wunner <lukas@wunner.de>,
Leon Romanovsky <leonro@nvidia.com>,
Nathan Ciobanu <nathan.d.ciobanu@linux.intel.com>,
bcm-kernel-feedback-list@broadcom.com,
virtualization@lists.linux.dev, linux-hyperv@vger.kernel.org,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v2 2/2] PCI/P2PDMA: Allow P2PDMA in Hyper-V guests on Intel hosts
Date: Fri, 16 Oct 2026 15:34:02 -0700 [thread overview]
Message-ID: <20261016223402.19991-3-pavel.e.popov@intel.com> (raw)
In-Reply-To: <20261016223402.19991-1-pavel.e.popov@intel.com>
Peer-to-Peer DMA (P2PDMA) between two devices requires either a shared
upstream bridge or a host bridge matching pci_p2pdma_whitelist[]. In
Hyper-V guests, each passthrough device appears in a PCI domain of its
own without a host bridge device. Consequently, P2PDMA checks evaluate
endpoint Device IDs against the host bridge whitelist, causing P2PDMA
requests to fail regardless of host support.
This affects discrete devices such as GPUs, NICs and NVMe drives.
The P2PDMA host bridge check does not work in a Hyper-V guest. Apply
the same bypass as for VMware, on the same Intel Xeon generations.
Tested with the Intel Level Zero P2P benchmark (ze_peer) on Arc Pro B60
cards in a Linux guest on Windows Server 2025 (Emerald Rapids host).
Signed-off-by: Pavel Popov <pavel.e.popov@intel.com>
---
drivers/pci/p2pdma.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
index 1b4886d4f9be..9d643dd41008 100644
--- a/drivers/pci/p2pdma.c
+++ b/drivers/pci/p2pdma.c
@@ -557,7 +557,8 @@ static const struct x86_cpu_id hypervisor_p2pdma_cpu_ids[] = {
static bool hypervisor_supports_p2pdma(void)
{
/* Hypervisor hides host topology, allow p2pdma on whitelisted CPUs */
- if (hypervisor_is_type(X86_HYPER_VMWARE))
+ if (hypervisor_is_type(X86_HYPER_VMWARE) ||
+ hypervisor_is_type(X86_HYPER_MS_HYPERV))
return x86_match_cpu(hypervisor_p2pdma_cpu_ids);
return false;
--
2.53.0
prev parent reply other threads:[~2026-10-16 22:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 22:34 [PATCH v2 0/2] PCI/P2PDMA: Allow P2PDMA in VMware and Hyper-V guests on Intel hosts Pavel Popov
2026-10-16 22:34 ` [PATCH v2 1/2] PCI/P2PDMA: Allow P2PDMA in VMware " Pavel Popov
2026-10-16 22:55 ` Logan Gunthorpe
2026-10-17 0:31 ` Popov, Pavel E
2026-10-17 7:48 ` Leon Romanovsky
2026-10-17 15:21 ` Popov, Pavel E
2026-10-16 22:34 ` Pavel Popov [this message]
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=20261016223402.19991-3-pavel.e.popov@intel.com \
--to=pavel.e.popov@intel.com \
--cc=alexey.makhalov@broadcom.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bhelgaas@google.com \
--cc=jim.chow@broadcom.com \
--cc=leonro@nvidia.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=logang@deltatee.com \
--cc=lukas@wunner.de \
--cc=mhklinux@outlook.com \
--cc=nathan.d.ciobanu@linux.intel.com \
--cc=radu.rugina@broadcom.com \
--cc=virtualization@lists.linux.dev \
--cc=wei.liu@kernel.org \
/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