aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <willy@linux.intel.com>2015-03-20 13:37:59 -0400
committerHelge Deller <deller@gmx.de>2015-04-21 16:02:43 -0400
commit8bf8a1d1c13c687eda599c827d713eb70764a79f (patch)
treeb3272a7adfe5dacf3180678a50dc3cba88932065
parent1d11437f4fd02f9b5d3749675a1232216787dcc6 (diff)
parisc: Eliminate sg_virt_addr() and private scatterlist.h
The only reason to keep parisc's private asm/scatterlist.h was that it had the macro sg_virt_addr(). Convert all callers to use something else (sometimes just sg->offset was enough, others should use sg_virt()), and we can just use the asm-generic scatterlist.h instead. Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: Dave Anglin <dave.anglin@bell.net> Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--arch/parisc/include/asm/Kbuild1
-rw-r--r--arch/parisc/include/asm/scatterlist.h10
-rw-r--r--arch/parisc/kernel/pci-dma.c8
-rw-r--r--drivers/parisc/ccio-dma.c6
-rw-r--r--drivers/parisc/iommu-helpers.h26
-rw-r--r--drivers/parisc/sba_iommu.c7
6 files changed, 25 insertions, 33 deletions
diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild
index 12b341d04f88..7a4bcc36303d 100644
--- a/arch/parisc/include/asm/Kbuild
+++ b/arch/parisc/include/asm/Kbuild
@@ -20,6 +20,7 @@ generic-y += param.h
20generic-y += percpu.h 20generic-y += percpu.h
21generic-y += poll.h 21generic-y += poll.h
22generic-y += preempt.h 22generic-y += preempt.h
23generic-y += scatterlist.h
23generic-y += seccomp.h 24generic-y += seccomp.h
24generic-y += segment.h 25generic-y += segment.h
25generic-y += topology.h 26generic-y += topology.h
diff --git a/arch/parisc/include/asm/scatterlist.h b/arch/parisc/include/asm/scatterlist.h
deleted file mode 100644
index 8bf1f0dd1f15..000000000000
--- a/arch/parisc/include/asm/scatterlist.h
+++ /dev/null
@@ -1,10 +0,0 @@
1#ifndef _ASM_PARISC_SCATTERLIST_H
2#define _ASM_PARISC_SCATTERLIST_H
3
4#include <asm/page.h>
5#include <asm/types.h>
6#include <asm-generic/scatterlist.h>
7
8#define sg_virt_addr(sg) ((unsigned long)sg_virt(sg))
9
10#endif /* _ASM_PARISC_SCATTERLIST_H */
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c
index d87d1c476d85..ff834fd67478 100644
--- a/arch/parisc/kernel/pci-dma.c
+++ b/arch/parisc/kernel/pci-dma.c
@@ -482,7 +482,7 @@ static int pa11_dma_map_sg(struct device *dev, struct scatterlist *sglist, int n
482 BUG_ON(direction == DMA_NONE); 482 BUG_ON(direction == DMA_NONE);
483 483
484 for (i = 0; i < nents; i++, sglist++ ) { 484 for (i = 0; i < nents; i++, sglist++ ) {
485 unsigned long vaddr = sg_virt_addr(sglist); 485 unsigned long vaddr = (unsigned long)sg_virt(sglist);
486 sg_dma_address(sglist) = (dma_addr_t) virt_to_phys(vaddr); 486 sg_dma_address(sglist) = (dma_addr_t) virt_to_phys(vaddr);
487 sg_dma_len(sglist) = sglist->length; 487 sg_dma_len(sglist) = sglist->length;
488 flush_kernel_dcache_range(vaddr, sglist->length); 488 flush_kernel_dcache_range(vaddr, sglist->length);
@@ -502,7 +502,7 @@ static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, in
502 /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */ 502 /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */
503 503
504 for (i = 0; i < nents; i++, sglist++ ) 504 for (i = 0; i < nents; i++, sglist++ )
505 flush_kernel_dcache_range(sg_virt_addr(sglist), sglist->length); 505 flush_kernel_vmap_range(sg_virt(sglist), sglist->length);
506 return; 506 return;
507} 507}
508 508
@@ -527,7 +527,7 @@ static void pa11_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sgl
527 /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */ 527 /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */
528 528
529 for (i = 0; i < nents; i++, sglist++ ) 529 for (i = 0; i < nents; i++, sglist++ )
530 flush_kernel_dcache_range(sg_virt_addr(sglist), sglist->length); 530 flush_kernel_vmap_range(sg_virt(sglist), sglist->length);
531} 531}
532 532
533static void pa11_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction) 533static void pa11_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction)
@@ -537,7 +537,7 @@ static void pa11_dma_sync_sg_for_device(struct device *dev, struct scatterlist *
537 /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */ 537 /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */
538 538
539 for (i = 0; i < nents; i++, sglist++ ) 539 for (i = 0; i < nents; i++, sglist++ )
540 flush_kernel_dcache_range(sg_virt_addr(sglist), sglist->length); 540 flush_kernel_vmap_range(sg_virt(sglist), sglist->length);
541} 541}
542 542
543struct hppa_dma_ops pcxl_dma_ops = { 543struct hppa_dma_ops pcxl_dma_ops = {
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index 6bc16809c504..02ff84fcfa61 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -916,7 +916,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
916 /* Fast path single entry scatterlists. */ 916 /* Fast path single entry scatterlists. */
917 if (nents == 1) { 917 if (nents == 1) {
918 sg_dma_address(sglist) = ccio_map_single(dev, 918 sg_dma_address(sglist) = ccio_map_single(dev,
919 (void *)sg_virt_addr(sglist), sglist->length, 919 sg_virt(sglist), sglist->length,
920 direction); 920 direction);
921 sg_dma_len(sglist) = sglist->length; 921 sg_dma_len(sglist) = sglist->length;
922 return 1; 922 return 1;
@@ -983,8 +983,8 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents,
983 BUG_ON(!dev); 983 BUG_ON(!dev);
984 ioc = GET_IOC(dev); 984 ioc = GET_IOC(dev);
985 985
986 DBG_RUN_SG("%s() START %d entries, %08lx,%x\n", 986 DBG_RUN_SG("%s() START %d entries, %p,%x\n",
987 __func__, nents, sg_virt_addr(sglist), sglist->length); 987 __func__, nents, sg_virt(sglist), sglist->length);
988 988
989#ifdef CCIO_COLLECT_STATS 989#ifdef CCIO_COLLECT_STATS
990 ioc->usg_calls++; 990 ioc->usg_calls++;
diff --git a/drivers/parisc/iommu-helpers.h b/drivers/parisc/iommu-helpers.h
index 8c33491b21fe..761e77bfce5d 100644
--- a/drivers/parisc/iommu-helpers.h
+++ b/drivers/parisc/iommu-helpers.h
@@ -30,9 +30,9 @@ iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents,
30 unsigned long vaddr; 30 unsigned long vaddr;
31 long size; 31 long size;
32 32
33 DBG_RUN_SG(" %d : %08lx/%05x %08lx/%05x\n", nents, 33 DBG_RUN_SG(" %d : %08lx/%05x %p/%05x\n", nents,
34 (unsigned long)sg_dma_address(startsg), cnt, 34 (unsigned long)sg_dma_address(startsg), cnt,
35 sg_virt_addr(startsg), startsg->length 35 sg_virt(startsg), startsg->length
36 ); 36 );
37 37
38 38
@@ -66,7 +66,7 @@ iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents,
66 66
67 BUG_ON(pdirp == NULL); 67 BUG_ON(pdirp == NULL);
68 68
69 vaddr = sg_virt_addr(startsg); 69 vaddr = (unsigned long)sg_virt(startsg);
70 sg_dma_len(dma_sg) += startsg->length; 70 sg_dma_len(dma_sg) += startsg->length;
71 size = startsg->length + dma_offset; 71 size = startsg->length + dma_offset;
72 dma_offset = 0; 72 dma_offset = 0;
@@ -113,7 +113,7 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
113 */ 113 */
114 contig_sg = startsg; 114 contig_sg = startsg;
115 dma_len = startsg->length; 115 dma_len = startsg->length;
116 dma_offset = sg_virt_addr(startsg) & ~IOVP_MASK; 116 dma_offset = startsg->offset;
117 117
118 /* PARANOID: clear entries */ 118 /* PARANOID: clear entries */
119 sg_dma_address(startsg) = 0; 119 sg_dma_address(startsg) = 0;
@@ -124,14 +124,13 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
124 ** it's always looking one "ahead". 124 ** it's always looking one "ahead".
125 */ 125 */
126 while(--nents > 0) { 126 while(--nents > 0) {
127 unsigned long prevstartsg_end, startsg_end; 127 unsigned long prev_end, sg_start;
128 128
129 prevstartsg_end = sg_virt_addr(startsg) + 129 prev_end = (unsigned long)sg_virt(startsg) +
130 startsg->length; 130 startsg->length;
131 131
132 startsg++; 132 startsg++;
133 startsg_end = sg_virt_addr(startsg) + 133 sg_start = (unsigned long)sg_virt(startsg);
134 startsg->length;
135 134
136 /* PARANOID: clear entries */ 135 /* PARANOID: clear entries */
137 sg_dma_address(startsg) = 0; 136 sg_dma_address(startsg) = 0;
@@ -150,10 +149,13 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
150 break; 149 break;
151 150
152 /* 151 /*
153 ** Next see if we can append the next chunk (i.e. 152 * Next see if we can append the next chunk (i.e.
154 ** it must end on one page and begin on another 153 * it must end on one page and begin on another, or
154 * it must start on the same address as the previous
155 * entry ended.
155 */ 156 */
156 if (unlikely(((prevstartsg_end | sg_virt_addr(startsg)) & ~PAGE_MASK) != 0)) 157 if (unlikely((prev_end != sg_start) ||
158 ((prev_end | sg_start) & ~PAGE_MASK)))
157 break; 159 break;
158 160
159 dma_len += startsg->length; 161 dma_len += startsg->length;
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index f07471264689..f1441e466c06 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -278,7 +278,7 @@ sba_dump_sg( struct ioc *ioc, struct scatterlist *startsg, int nents)
278 nents, 278 nents,
279 (unsigned long) sg_dma_address(startsg), 279 (unsigned long) sg_dma_address(startsg),
280 sg_dma_len(startsg), 280 sg_dma_len(startsg),
281 sg_virt_addr(startsg), startsg->length); 281 sg_virt(startsg), startsg->length);
282 startsg++; 282 startsg++;
283 } 283 }
284} 284}
@@ -945,8 +945,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
945 945
946 /* Fast path single entry scatterlists. */ 946 /* Fast path single entry scatterlists. */
947 if (nents == 1) { 947 if (nents == 1) {
948 sg_dma_address(sglist) = sba_map_single(dev, 948 sg_dma_address(sglist) = sba_map_single(dev, sg_virt(sglist),
949 (void *)sg_virt_addr(sglist),
950 sglist->length, direction); 949 sglist->length, direction);
951 sg_dma_len(sglist) = sglist->length; 950 sg_dma_len(sglist) = sglist->length;
952 return 1; 951 return 1;
@@ -1025,7 +1024,7 @@ sba_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents,
1025#endif 1024#endif
1026 1025
1027 DBG_RUN_SG("%s() START %d entries, %p,%x\n", 1026 DBG_RUN_SG("%s() START %d entries, %p,%x\n",
1028 __func__, nents, sg_virt_addr(sglist), sglist->length); 1027 __func__, nents, sg_virt(sglist), sglist->length);
1029 1028
1030 ioc = GET_IOC(dev); 1029 ioc = GET_IOC(dev);
1031 1030