|
@@ -214,24 +214,14 @@ static void iommu_full(struct device *dev, size_t size, int dir)
|
|
|
static inline int
|
|
|
need_iommu(struct device *dev, unsigned long addr, size_t size)
|
|
|
{
|
|
|
- u64 mask = *dev->dma_mask;
|
|
|
- int high = addr + size > mask;
|
|
|
- int mmu = high;
|
|
|
-
|
|
|
- if (force_iommu)
|
|
|
- mmu = 1;
|
|
|
-
|
|
|
- return mmu;
|
|
|
+ return force_iommu ||
|
|
|
+ !is_buffer_dma_capable(*dev->dma_mask, addr, size);
|
|
|
}
|
|
|
|
|
|
static inline int
|
|
|
nonforced_iommu(struct device *dev, unsigned long addr, size_t size)
|
|
|
{
|
|
|
- u64 mask = *dev->dma_mask;
|
|
|
- int high = addr + size > mask;
|
|
|
- int mmu = high;
|
|
|
-
|
|
|
- return mmu;
|
|
|
+ return !is_buffer_dma_capable(*dev->dma_mask, addr, size);
|
|
|
}
|
|
|
|
|
|
/* Map a single continuous physical area into the IOMMU.
|