summaryrefslogtreecommitdiff
path: root/drivers/pci
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2026-06-23 17:32:00 -0500
committerBjorn Helgaas <bhelgaas@google.com>2026-06-23 17:32:00 -0500
commit5ea9159447890425c37455e14f47eb243fcb3dd5 (patch)
tree2f59c8e38daea7d49b0e94aa116ce01f24d4277a /drivers/pci
parent1eaa2b8d4c278582d90c8a08da1e32547e0b43d0 (diff)
parent0ba76b19fd4c7256787eab0283c759b18eb76876 (diff)
downloadlinux-next-5ea9159447890425c37455e14f47eb243fcb3dd5.tar.gz
linux-next-5ea9159447890425c37455e14f47eb243fcb3dd5.zip
Merge branch 'pci/p2pdma'
- Prevent P2PDMA as well as CPU access to non-mappable BARs, e.g., s390 ISM BARs (Matt Evans) - Add Intel QAT, DSA, IAA devices to whitelist (Lukas Wunner) * pci/p2pdma: PCI/P2PDMA: Add Intel QAT, DSA, IAA devices to whitelist PCI/P2PDMA: Avoid returning a provider for non_mappable_bars
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/p2pdma.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
index 7c898542af8d..b2d5266f8653 100644
--- a/drivers/pci/p2pdma.c
+++ b/drivers/pci/p2pdma.c
@@ -262,6 +262,9 @@ int pcim_p2pdma_init(struct pci_dev *pdev)
struct pci_p2pdma *p2p;
int i, ret;
+ if (pdev->non_mappable_bars)
+ return -EOPNOTSUPP;
+
p2p = rcu_dereference_protected(pdev->p2pdma, 1);
if (p2p)
return 0;
@@ -318,7 +321,8 @@ struct p2pdma_provider *pcim_p2pdma_provider(struct pci_dev *pdev, int bar)
{
struct pci_p2pdma *p2p;
- if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
+ if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM) ||
+ pdev->non_mappable_bars)
return NULL;
p2p = rcu_dereference_protected(pdev->p2pdma, 1);
@@ -548,6 +552,16 @@ static const struct pci_p2pdma_whitelist_entry {
{PCI_VENDOR_ID_INTEL, 0x2033, 0},
{PCI_VENDOR_ID_INTEL, 0x2020, 0},
{PCI_VENDOR_ID_INTEL, 0x09a2, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DSA_SPR0, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IAX_SPR0, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DSA_GNRD, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DSA_DMR, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IAA_DMR, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QAT_4XXX, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QAT_401XX, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QAT_402XX, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QAT_420XX, 0},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QAT_6XXX, 0},
/* Google SoCs. */
{PCI_VENDOR_ID_GOOGLE, PCI_ANY_ID, 0},
{}