diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2015-05-01 02:47:22 -0400 |
---|---|---|
committer | Geert Uytterhoeven <geert@linux-m68k.org> | 2015-06-01 04:36:29 -0400 |
commit | 1214c525484cabb27ed37df936c3451682757263 (patch) | |
tree | 6e61f889d8c4c01d8e7e71eb585a550e489843f6 | |
parent | 4d686b02f68f3f821cadb2f3898b07867e3fafde (diff) |
m68k: Use for_each_sg()
This replaces the plain loop over the sglist array with for_each_sg()
macro which consists of sg_next() function calls. Since m68k doesn't
select ARCH_HAS_SG_CHAIN, it is not necessary to use for_each_sg() in
order to loop over each sg element. But this can help find problems
with drivers that do not properly initialize their sg tables when
CONFIG_DEBUG_SG is enabled.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Cc: linux-arch@vger.kernel.org
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
-rw-r--r-- | arch/m68k/kernel/dma.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c index e546a5534dd4..564665f9af30 100644 --- a/arch/m68k/kernel/dma.c +++ b/arch/m68k/kernel/dma.c | |||
@@ -120,13 +120,16 @@ void dma_sync_single_for_device(struct device *dev, dma_addr_t handle, | |||
120 | } | 120 | } |
121 | EXPORT_SYMBOL(dma_sync_single_for_device); | 121 | EXPORT_SYMBOL(dma_sync_single_for_device); |
122 | 122 | ||
123 | void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents, | 123 | void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sglist, |
124 | enum dma_data_direction dir) | 124 | int nents, enum dma_data_direction dir) |
125 | { | 125 | { |
126 | int i; | 126 | int i; |
127 | struct scatterlist *sg; | ||
127 | 128 | ||
128 | for (i = 0; i < nents; sg++, i++) | 129 | for_each_sg(sglist, sg, nents, i) { |
129 | dma_sync_single_for_device(dev, sg->dma_address, sg->length, dir); | 130 | dma_sync_single_for_device(dev, sg->dma_address, sg->length, |
131 | dir); | ||
132 | } | ||
130 | } | 133 | } |
131 | EXPORT_SYMBOL(dma_sync_sg_for_device); | 134 | EXPORT_SYMBOL(dma_sync_sg_for_device); |
132 | 135 | ||
@@ -151,14 +154,16 @@ dma_addr_t dma_map_page(struct device *dev, struct page *page, | |||
151 | } | 154 | } |
152 | EXPORT_SYMBOL(dma_map_page); | 155 | EXPORT_SYMBOL(dma_map_page); |
153 | 156 | ||
154 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 157 | int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, |
155 | enum dma_data_direction dir) | 158 | enum dma_data_direction dir) |
156 | { | 159 | { |
157 | int i; | 160 | int i; |
161 | struct scatterlist *sg; | ||
158 | 162 | ||
159 | for (i = 0; i < nents; sg++, i++) { | 163 | for_each_sg(sglist, sg, nents, i) { |
160 | sg->dma_address = sg_phys(sg); | 164 | sg->dma_address = sg_phys(sg); |
161 | dma_sync_single_for_device(dev, sg->dma_address, sg->length, dir); | 165 | dma_sync_single_for_device(dev, sg->dma_address, sg->length, |
166 | dir); | ||
162 | } | 167 | } |
163 | return nents; | 168 | return nents; |
164 | } | 169 | } |