Commit 3306e99e authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'pci/peer-to-peer'

  - Prevent drivers that use dma_virt_ops from using peer-to-peer DMA
    (Logan Gunthorpe)

* pci/peer-to-peer:
  PCI/P2PDMA: Fix missing check for dma_virt_ops
parents e0997728 9c002bb6
...@@ -468,6 +468,14 @@ int pci_p2pdma_distance_many(struct pci_dev *provider, struct device **clients, ...@@ -468,6 +468,14 @@ int pci_p2pdma_distance_many(struct pci_dev *provider, struct device **clients,
return -1; return -1;
for (i = 0; i < num_clients; i++) { for (i = 0; i < num_clients; i++) {
if (IS_ENABLED(CONFIG_DMA_VIRT_OPS) &&
clients[i]->dma_ops == &dma_virt_ops) {
if (verbose)
dev_warn(clients[i],
"cannot be used for peer-to-peer DMA because the driver makes use of dma_virt_ops\n");
return -1;
}
pci_client = find_parent_pci_dev(clients[i]); pci_client = find_parent_pci_dev(clients[i]);
if (!pci_client) { if (!pci_client) {
if (verbose) if (verbose)
...@@ -732,7 +740,7 @@ int pci_p2pdma_map_sg(struct device *dev, struct scatterlist *sg, int nents, ...@@ -732,7 +740,7 @@ int pci_p2pdma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
* p2pdma mappings are not compatible with devices that use * p2pdma mappings are not compatible with devices that use
* dma_virt_ops. If the upper layers do the right thing * dma_virt_ops. If the upper layers do the right thing
* this should never happen because it will be prevented * this should never happen because it will be prevented
* by the check in pci_p2pdma_add_client() * by the check in pci_p2pdma_distance_many()
*/ */
if (WARN_ON_ONCE(IS_ENABLED(CONFIG_DMA_VIRT_OPS) && if (WARN_ON_ONCE(IS_ENABLED(CONFIG_DMA_VIRT_OPS) &&
dev->dma_ops == &dma_virt_ops)) dev->dma_ops == &dma_virt_ops))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment