[PATCH 1/2] arm64: dma_mapping: allow PCI host driver to limit DMA mask

From
Arnd Bergmann <arnd@arndb.de>
Date
2017-02-16 16:13:01
Also in
linux-pci, linux-renesas-soc, lkml
Reply to
Nikita Yushchenko, 2016-12-29
On Thursday, December 29, 2016 11:45:03 PM CET Nikita Yushchenko wrote:
quoted hunk ↗ jump to hunk

 static int __swiotlb_dma_supported(struct device *hwdev, u64 mask)
 {
+#ifdef CONFIG_PCI
+       if (dev_is_pci(hwdev)) {
+               struct pci_dev *pdev = to_pci_dev(hwdev);
+               struct pci_host_bridge *br = pci_find_host_bridge(pdev->bus);
+
+               if (br->dev.dma_mask && (*br->dev.dma_mask) &&
+                               (mask & (*br->dev.dma_mask)) != mask)
+                       return 0;
+       }
+#endif
        if (swiotlb)
                return swiotlb_dma_supported(hwdev, mask);
        return 1;
I think it's wrong to make this a special case for PCI.

Instead, we should follow the dma-ranges properties during dma_set_mask()
to ensure we don't set a mask that any of the parents up to the root
cannot support.

	Arnd
Thread (28 messages) 28 messages, 7 authors, last reply 2017-02-16
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help