blackfin: Call sg_for_each to pass through the whole sg list.
authorSonic Zhang <sonic.zhang@analog.com>
Tue, 22 May 2012 10:23:40 +0000 (18:23 +0800)
committerBob Liu <lliubbo@gmail.com>
Tue, 24 Jul 2012 05:39:48 +0000 (13:39 +0800)
Otherwise, chained sg list may be missed.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bob Liu <lliubbo@gmail.com>
arch/blackfin/kernel/dma-mapping.c

index f0d1118f1825bf9c3ce5f280f45fabcdbd3e0391..e7be6532d6a04f00cf7d6d1de5d035e4f3b565a9 100644 (file)
@@ -122,12 +122,13 @@ void __dma_sync(dma_addr_t addr, size_t size,
 EXPORT_SYMBOL(__dma_sync);
 
 int
-dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
+dma_map_sg(struct device *dev, struct scatterlist *sg_list, int nents,
           enum dma_data_direction direction)
 {
+       struct scatterlist *sg;
        int i;
 
-       for (i = 0; i < nents; i++, sg++) {
+       for_each_sg(sg_list, sg, nents, i) {
                sg->dma_address = (dma_addr_t) sg_virt(sg);
                __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction);
        }
@@ -136,12 +137,13 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 }
 EXPORT_SYMBOL(dma_map_sg);
 
-void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
+void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg_list,
                            int nelems, enum dma_data_direction direction)
 {
+       struct scatterlist *sg;
        int i;
 
-       for (i = 0; i < nelems; i++, sg++) {
+       for_each_sg(sg_list, sg, nelems, i) {
                sg->dma_address = (dma_addr_t) sg_virt(sg);
                __dma_sync(sg_dma_address(sg), sg_dma_len(sg), direction);
        }