Merge tag 'iommu-updates-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / acpi / scan.c
index c269310674158fa56104bdf4d7b4a04dcfda6221..e39ec7b7cb674fbad3cab60f4e5139d7e06a1f09 100644 (file)
@@ -1363,20 +1363,25 @@ enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev)
  * @dev: The pointer to the device
  * @attr: device dma attributes
  */
-void acpi_dma_configure(struct device *dev, enum dev_dma_attr attr)
+int acpi_dma_configure(struct device *dev, enum dev_dma_attr attr)
 {
        const struct iommu_ops *iommu;
+       u64 size;
 
        iort_set_dma_mask(dev);
 
        iommu = iort_iommu_configure(dev);
+       if (IS_ERR(iommu))
+               return PTR_ERR(iommu);
 
+       size = max(dev->coherent_dma_mask, dev->coherent_dma_mask + 1);
        /*
         * Assume dma valid range starts at 0 and covers the whole
         * coherent_dma_mask.
         */
-       arch_setup_dma_ops(dev, 0, dev->coherent_dma_mask + 1, iommu,
-                          attr == DEV_DMA_COHERENT);
+       arch_setup_dma_ops(dev, 0, size, iommu, attr == DEV_DMA_COHERENT);
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(acpi_dma_configure);