Message ID | 20130625.145226.1632119404634300971.hdoyu@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Jun 25, 2013 at 12:52:26PM +0100, Hiroshi Doyu wrote: > Will Deacon <will.deacon@arm.com> wrote @ Tue, 25 Jun 2013 13:37:14 +0200: > ... > > > Do we need similar changes for map_sg case as well? They still passes '0' as prot. > > > > Yes, we could use the same trick there (probably worth moving the logic into > > a helper function for translating dma_data_direction into IOMMU_* values). > > > > There are also iommu_map calls when allocating DMA buffers, but I think 0 is > > the right thing to pass there (i.e. no permission until pages have been > > explicitly mapped). Although, to be honest, I don't see why we need to map > > the buffer at all when we allocate it. > > Yes, I thought too. I have a patch for that as below. If you like, > I'll rebase and send for merge with the one which changes > dma-mapping.c. Yes, please send the series and I'll take a look. Marek's already picked up my original patch, so it's better if you can base against a stable branch from him. Will
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 00af00f..ce3be78 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -21,11 +21,26 @@ #include <linux/errno.h> #include <linux/types.h> +#include <linux/dma-direction.h> #define IOMMU_READ (1) #define IOMMU_WRITE (2) #define IOMMU_CACHE (4) /* DMA cache coherency */ +static inline int to_iommu_prot(enum dma_data_direction dir) +{ + switch (dir) { + case DMA_BIDIRECTIONAL: + return IOMMU_READ | IOMMU_WRITE; + case DMA_TO_DEVICE: + return IOMMU_READ; + case DMA_FROM_DEVICE: + return IOMMU_WRITE; + default: + return 0; + } +} + struct iommu_ops; struct iommu_group; struct bus_type;