aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/sn
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <k.kozlowski@samsung.com>2016-08-03 16:46:00 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-08-04 08:50:07 -0400
commit00085f1efa387a8ce100e3734920f7639c80caa3 (patch)
tree41ff3d6e6884918b4fc4f1ae96a284098167c5b0 /arch/ia64/sn
parent1605d2715ad2e67ddd0485a26e05ed670a4285ca (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.c22
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 */
78static void *sn_dma_alloc_coherent(struct device *dev, size_t size, 78static 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 */
140static void sn_dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, 140static 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
176static dma_addr_t sn_dma_map_page(struct device *dev, struct page *page, 176static 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 */
219static void sn_dma_unmap_page(struct device *dev, dma_addr_t dma_addr, 216static 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 */
241static void sn_dma_unmap_sg(struct device *dev, struct scatterlist *sgl, 238static 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 */
274static int sn_dma_map_sg(struct device *dev, struct scatterlist *sgl, 271static 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,