|
@@ -557,11 +557,11 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
|
|
struct vio_dev *viodev = to_vio_dev(dev);
|
|
struct vio_dev *viodev = to_vio_dev(dev);
|
|
struct iommu_table *tbl;
|
|
struct iommu_table *tbl;
|
|
struct scatterlist *sgl;
|
|
struct scatterlist *sgl;
|
|
- int ret, count = 0;
|
|
|
|
|
|
+ int ret, count;
|
|
size_t alloc_size = 0;
|
|
size_t alloc_size = 0;
|
|
|
|
|
|
tbl = get_iommu_table_base(dev);
|
|
tbl = get_iommu_table_base(dev);
|
|
- for (sgl = sglist; count < nelems; count++, sgl++)
|
|
|
|
|
|
+ for_each_sg(sglist, sgl, nelems, count)
|
|
alloc_size += roundup(sgl->length, IOMMU_PAGE_SIZE(tbl));
|
|
alloc_size += roundup(sgl->length, IOMMU_PAGE_SIZE(tbl));
|
|
|
|
|
|
if (vio_cmo_alloc(viodev, alloc_size)) {
|
|
if (vio_cmo_alloc(viodev, alloc_size)) {
|
|
@@ -577,7 +577,7 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
- for (sgl = sglist, count = 0; count < ret; count++, sgl++)
|
|
|
|
|
|
+ for_each_sg(sglist, sgl, ret, count)
|
|
alloc_size -= roundup(sgl->dma_length, IOMMU_PAGE_SIZE(tbl));
|
|
alloc_size -= roundup(sgl->dma_length, IOMMU_PAGE_SIZE(tbl));
|
|
if (alloc_size)
|
|
if (alloc_size)
|
|
vio_cmo_dealloc(viodev, alloc_size);
|
|
vio_cmo_dealloc(viodev, alloc_size);
|
|
@@ -594,10 +594,10 @@ static void vio_dma_iommu_unmap_sg(struct device *dev,
|
|
struct iommu_table *tbl;
|
|
struct iommu_table *tbl;
|
|
struct scatterlist *sgl;
|
|
struct scatterlist *sgl;
|
|
size_t alloc_size = 0;
|
|
size_t alloc_size = 0;
|
|
- int count = 0;
|
|
|
|
|
|
+ int count;
|
|
|
|
|
|
tbl = get_iommu_table_base(dev);
|
|
tbl = get_iommu_table_base(dev);
|
|
- for (sgl = sglist; count < nelems; count++, sgl++)
|
|
|
|
|
|
+ for_each_sg(sglist, sgl, nelems, count)
|
|
alloc_size += roundup(sgl->dma_length, IOMMU_PAGE_SIZE(tbl));
|
|
alloc_size += roundup(sgl->dma_length, IOMMU_PAGE_SIZE(tbl));
|
|
|
|
|
|
dma_iommu_ops.unmap_sg(dev, sglist, nelems, direction, attrs);
|
|
dma_iommu_ops.unmap_sg(dev, sglist, nelems, direction, attrs);
|