diff options
author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2016-08-03 16:46:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-08-04 08:50:07 -0400 |
commit | 00085f1efa387a8ce100e3734920f7639c80caa3 (patch) | |
tree | 41ff3d6e6884918b4fc4f1ae96a284098167c5b0 /arch/ia64/sn | |
parent | 1605d2715ad2e67ddd0485a26e05ed670a4285ca (diff) |
dma-mapping: use unsigned long for dma_attrs
The dma-mapping core and the implementations do not change the DMA
attributes passed by pointer. Thus the pointer can point to const data.
However the attributes do not have to be a bitfield. Instead unsigned
long will do fine:
1. This is just simpler. Both in terms of reading the code and setting
attributes. Instead of initializing local attributes on the stack
and passing pointer to it to dma_set_attr(), just set the bits.
2. It brings safeness and checking for const correctness because the
attributes are passed by value.
Semantic patches for this change (at least most of them):
virtual patch
virtual context
@r@
identifier f, attrs;
@@
f(...,
- struct dma_attrs *attrs
+ unsigned long attrs
, ...)
{
...
}
@@
identifier r.f;
@@
f(...,
- NULL
+ 0
)
and
// Options: --all-includes
virtual patch
virtual context
@r@
identifier f, attrs;
type t;
@@
t f(..., struct dma_attrs *attrs);
@@
identifier r.f;
@@
f(...,
- NULL
+ 0
)
Link: http://lkml.kernel.org/r/1468399300-5399-2-git-send-email-k.kozlowski@samsung.com
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Acked-by: Vineet Gupta <vgupta@synopsys.com>
Acked-by: Robin Murphy <robin.murphy@arm.com>
Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no>
Acked-by: Mark Salter <msalter@redhat.com> [c6x]
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com> [cris]
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> [drm]
Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
Acked-by: Joerg Roedel <jroedel@suse.de> [iommu]
Acked-by: Fabien Dessenne <fabien.dessenne@st.com> [bdisp]
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com> [vb2-core]
Acked-by: David Vrabel <david.vrabel@citrix.com> [xen]
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> [xen swiotlb]
Acked-by: Joerg Roedel <jroedel@suse.de> [iommu]
Acked-by: Richard Kuo <rkuo@codeaurora.org> [hexagon]
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> [m68k]
Acked-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> [s390]
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no> [avr32]
Acked-by: Vineet Gupta <vgupta@synopsys.com> [arc]
Acked-by: Robin Murphy <robin.murphy@arm.com> [arm64 and dma-iommu]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/ia64/sn')
-rw-r--r-- | arch/ia64/sn/pci/pci_dma.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c index 8f59907007cb..74c934a997bb 100644 --- a/arch/ia64/sn/pci/pci_dma.c +++ b/arch/ia64/sn/pci/pci_dma.c | |||
@@ -77,7 +77,7 @@ EXPORT_SYMBOL(sn_dma_set_mask); | |||
77 | */ | 77 | */ |
78 | static void *sn_dma_alloc_coherent(struct device *dev, size_t size, | 78 | static void *sn_dma_alloc_coherent(struct device *dev, size_t size, |
79 | dma_addr_t * dma_handle, gfp_t flags, | 79 | dma_addr_t * dma_handle, gfp_t flags, |
80 | struct dma_attrs *attrs) | 80 | unsigned long attrs) |
81 | { | 81 | { |
82 | void *cpuaddr; | 82 | void *cpuaddr; |
83 | unsigned long phys_addr; | 83 | unsigned long phys_addr; |
@@ -138,7 +138,7 @@ static void *sn_dma_alloc_coherent(struct device *dev, size_t size, | |||
138 | * any associated IOMMU mappings. | 138 | * any associated IOMMU mappings. |
139 | */ | 139 | */ |
140 | static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, | 140 | static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, |
141 | dma_addr_t dma_handle, struct dma_attrs *attrs) | 141 | dma_addr_t dma_handle, unsigned long attrs) |
142 | { | 142 | { |
143 | struct pci_dev *pdev = to_pci_dev(dev); | 143 | struct pci_dev *pdev = to_pci_dev(dev); |
144 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); | 144 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); |
@@ -176,21 +176,18 @@ static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr | |||
176 | static dma_addr_t sn_dma_map_page(struct device *dev, struct page *page, | 176 | static dma_addr_t sn_dma_map_page(struct device *dev, struct page *page, |
177 | unsigned long offset, size_t size, | 177 | unsigned long offset, size_t size, |
178 | enum dma_data_direction dir, | 178 | enum dma_data_direction dir, |
179 | struct dma_attrs *attrs) | 179 | unsigned long attrs) |
180 | { | 180 | { |
181 | void *cpu_addr = page_address(page) + offset; | 181 | void *cpu_addr = page_address(page) + offset; |
182 | dma_addr_t dma_addr; | 182 | dma_addr_t dma_addr; |
183 | unsigned long phys_addr; | 183 | unsigned long phys_addr; |
184 | struct pci_dev *pdev = to_pci_dev(dev); | 184 | struct pci_dev *pdev = to_pci_dev(dev); |
185 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); | 185 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); |
186 | int dmabarr; | ||
187 | |||
188 | dmabarr = dma_get_attr(DMA_ATTR_WRITE_BARRIER, attrs); | ||
189 | 186 | ||
190 | BUG_ON(!dev_is_pci(dev)); | 187 | BUG_ON(!dev_is_pci(dev)); |
191 | 188 | ||
192 | phys_addr = __pa(cpu_addr); | 189 | phys_addr = __pa(cpu_addr); |
193 | if (dmabarr) | 190 | if (attrs & DMA_ATTR_WRITE_BARRIER) |
194 | dma_addr = provider->dma_map_consistent(pdev, phys_addr, | 191 | dma_addr = provider->dma_map_consistent(pdev, phys_addr, |
195 | size, SN_DMA_ADDR_PHYS); | 192 | size, SN_DMA_ADDR_PHYS); |
196 | else | 193 | else |
@@ -218,7 +215,7 @@ static dma_addr_t sn_dma_map_page(struct device *dev, struct page *page, | |||
218 | */ | 215 | */ |
219 | static void sn_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, | 216 | static void sn_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, |
220 | size_t size, enum dma_data_direction dir, | 217 | size_t size, enum dma_data_direction dir, |
221 | struct dma_attrs *attrs) | 218 | unsigned long attrs) |
222 | { | 219 | { |
223 | struct pci_dev *pdev = to_pci_dev(dev); | 220 | struct pci_dev *pdev = to_pci_dev(dev); |
224 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); | 221 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); |
@@ -240,7 +237,7 @@ static void sn_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, | |||
240 | */ | 237 | */ |
241 | static void sn_dma_unmap_sg(struct device *dev, struct scatterlist *sgl, | 238 | static void sn_dma_unmap_sg(struct device *dev, struct scatterlist *sgl, |
242 | int nhwentries, enum dma_data_direction dir, | 239 | int nhwentries, enum dma_data_direction dir, |
243 | struct dma_attrs *attrs) | 240 | unsigned long attrs) |
244 | { | 241 | { |
245 | int i; | 242 | int i; |
246 | struct pci_dev *pdev = to_pci_dev(dev); | 243 | struct pci_dev *pdev = to_pci_dev(dev); |
@@ -273,16 +270,13 @@ static void sn_dma_unmap_sg(struct device *dev, struct scatterlist *sgl, | |||
273 | */ | 270 | */ |
274 | static int sn_dma_map_sg(struct device *dev, struct scatterlist *sgl, | 271 | static int sn_dma_map_sg(struct device *dev, struct scatterlist *sgl, |
275 | int nhwentries, enum dma_data_direction dir, | 272 | int nhwentries, enum dma_data_direction dir, |
276 | struct dma_attrs *attrs) | 273 | unsigned long attrs) |
277 | { | 274 | { |
278 | unsigned long phys_addr; | 275 | unsigned long phys_addr; |
279 | struct scatterlist *saved_sg = sgl, *sg; | 276 | struct scatterlist *saved_sg = sgl, *sg; |
280 | struct pci_dev *pdev = to_pci_dev(dev); | 277 | struct pci_dev *pdev = to_pci_dev(dev); |
281 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); | 278 | struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev); |
282 | int i; | 279 | int i; |
283 | int dmabarr; | ||
284 | |||
285 | dmabarr = dma_get_attr(DMA_ATTR_WRITE_BARRIER, attrs); | ||
286 | 280 | ||
287 | BUG_ON(!dev_is_pci(dev)); | 281 | BUG_ON(!dev_is_pci(dev)); |
288 | 282 | ||
@@ -292,7 +286,7 @@ static int sn_dma_map_sg(struct device *dev, struct scatterlist *sgl, | |||
292 | for_each_sg(sgl, sg, nhwentries, i) { | 286 | for_each_sg(sgl, sg, nhwentries, i) { |
293 | dma_addr_t dma_addr; | 287 | dma_addr_t dma_addr; |
294 | phys_addr = SG_ENT_PHYS_ADDRESS(sg); | 288 | phys_addr = SG_ENT_PHYS_ADDRESS(sg); |
295 | if (dmabarr) | 289 | if (attrs & DMA_ATTR_WRITE_BARRIER) |
296 | dma_addr = provider->dma_map_consistent(pdev, | 290 | dma_addr = provider->dma_map_consistent(pdev, |
297 | phys_addr, | 291 | phys_addr, |
298 | sg->length, | 292 | sg->length, |