diff options
author | Sonic Zhang <sonic.zhang@analog.com> | 2012-05-22 06:23:40 -0400 |
---|---|---|
committer | Bob Liu <lliubbo@gmail.com> | 2012-07-24 01:39:48 -0400 |
commit | 86d688a3c370093f978c7ced9b510944301fc9d4 (patch) | |
tree | 8cce56eaa8994c2af8108af887939e712bb7061f /arch | |
parent | c8d11a06bf8242d5d6ff86fa2514c4f50cb847fb (diff) |
blackfin: Call sg_for_each to pass through the whole sg list.
Otherwise, chained sg list may be missed.
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bob Liu <lliubbo@gmail.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/blackfin/kernel/dma-mapping.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/blackfin/kernel/dma-mapping.c b/arch/blackfin/kernel/dma-mapping.c index f0d1118f1825..e7be6532d6a0 100644 --- a/arch/blackfin/kernel/dma-mapping.c +++ b/arch/blackfin/kernel/dma-mapping.c | |||
@@ -122,12 +122,13 @@ void __dma_sync(dma_addr_t addr, size_t size, | |||
122 | EXPORT_SYMBOL(__dma_sync); | 122 | EXPORT_SYMBOL(__dma_sync); |
123 | 123 | ||
124 | int | 124 | int |
125 | dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 125 | dma_map_sg(struct device *dev, struct scatterlist *sg_list, int nents, |
126 | enum dma_data_direction direction) | 126 | enum dma_data_direction direction) |
127 | { | 127 | { |
128 | struct scatterlist *sg; | ||
128 | int i; | 129 | int i; |
129 | 130 | ||
130 | for (i = 0; i < nents; i++, sg++) { | 131 | for_each_sg(sg_list, sg, nents, i) { |
131 | sg->dma_address = (dma_addr_t) sg_virt(sg); | 132 | sg->dma_address = (dma_addr_t) sg_virt(sg); |
132 | __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction); | 133 | __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction); |
133 | } | 134 | } |
@@ -136,12 +137,13 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | |||
136 | } | 137 | } |
137 | EXPORT_SYMBOL(dma_map_sg); | 138 | EXPORT_SYMBOL(dma_map_sg); |
138 | 139 | ||
139 | void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, | 140 | void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg_list, |
140 | int nelems, enum dma_data_direction direction) | 141 | int nelems, enum dma_data_direction direction) |
141 | { | 142 | { |
143 | struct scatterlist *sg; | ||
142 | int i; | 144 | int i; |
143 | 145 | ||
144 | for (i = 0; i < nelems; i++, sg++) { | 146 | for_each_sg(sg_list, sg, nelems, i) { |
145 | sg->dma_address = (dma_addr_t) sg_virt(sg); | 147 | sg->dma_address = (dma_addr_t) sg_virt(sg); |
146 | __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction); | 148 | __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction); |
147 | } | 149 | } |