]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI/P2PDMA: Allow wildcard Device IDs in host bridge list
authorJacob Moroni <jmoroni@google.com>
Thu, 9 Apr 2026 15:01:22 +0000 (15:01 +0000)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 10 Apr 2026 22:27:15 +0000 (17:27 -0500)
Currently, the pci_p2pdma_whitelist array requires an exact match for both
Vendor and Device ID. Some hardware vendors support cross bridge
peer-to-peer DMA across their entire silicon lineup, so add support for
wildcard device IDs to avoid the need to continuously update this array.

Signed-off-by: Jacob Moroni <jmoroni@google.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Link: https://patch.msgid.link/20260409150123.3538444-1-jmoroni@google.com
drivers/pci/p2pdma.c

index e0f546166eb863fb1535727b8293fb4c9c15b238..25e9358d066e0bdd0742e7a3e69d3ec88ae2de3a 100644 (file)
@@ -530,7 +530,7 @@ static bool cpu_supports_p2pdma(void)
 
 static const struct pci_p2pdma_whitelist_entry {
        unsigned short vendor;
-       unsigned short device;
+       int device;
        enum {
                REQ_SAME_HOST_BRIDGE    = 1 << 0,
        } flags;
@@ -601,8 +601,12 @@ static bool __host_bridge_whitelist(struct pci_host_bridge *host,
        device = root->device;
 
        for (entry = pci_p2pdma_whitelist; entry->vendor; entry++) {
-               if (vendor != entry->vendor || device != entry->device)
+               if (vendor != entry->vendor)
                        continue;
+
+               if (entry->device != PCI_ANY_ID && device != entry->device)
+                       continue;
+
                if (entry->flags & REQ_SAME_HOST_BRIDGE && !same_host_bridge)
                        return false;