ACPI / scan: Refactor _CCA enforcement

Rather than checking the DMA attribute at each callsite, just pass it
through for acpi_dma_configure() to handle directly. That can then deal
with the relatively exceptional DEV_DMA_NOT_SUPPORTED case by explicitly
installing dummy DMA ops instead of just skipping setup entirely. This
will then free up the dev->dma_ops == NULL case for some valuable
fastpath optimisations.

Signed-off-by: Robin Murphy <[email protected]>
Reviewed-by: Rafael J. Wysocki <[email protected]>
Acked-by: Jesper Dangaard Brouer <[email protected]>
Tested-by: Jesper Dangaard Brouer <[email protected]>
Signed-off-by: Christoph Hellwig <[email protected]>
Tested-by: Tony Luck <[email protected]>
This commit is contained in:
Robin Murphy 2018-12-06 13:20:49 -08:00 • committed by Christoph Hellwig
commit e5361ca29f
3 changed files with 7 additions and 4 deletions

View file

@ -1456,6 +1456,11 @@ int acpi_dma_configure(struct device *dev, enum dev_dma_attr attr)
const struct iommu_ops *iommu;
u64 dma_addr = 0, size = 0;
if (attr == DEV_DMA_NOT_SUPPORTED) {
set_dma_ops(dev, &dma_dummy_ops);
return 0;
}
iort_dma_setup(dev, &dma_addr, &size);
iommu = iort_iommu_configure(dev);