From: Jianqun xu Date: Wed, 2 Dec 2015 09:09:21 +0000 (+0800) Subject: iommu: rk-iovmm: replace sg_dma_len(sg) with (sg)->length X-Git-Tag: firefly_0821_release~3563 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=79b0a9872aa1fdd5af8f3fa488d5594075a77a9e;p=firefly-linux-kernel-4.4.55.git iommu: rk-iovmm: replace sg_dma_len(sg) with (sg)->length If with CONFIG_NEED_SG_DMA_LENGTH, sg_dma_len(sg) is defined as: ((sg)->dma_length) else, ((sg)->length) But ion_alloc calls sg_set_page to set "sg->length = len", that is the issue. Change-Id: Id9b4b0c727ff685b06aaa7572da7e7e054dce9a2 Signed-off-by: Jianqun xu --- diff --git a/drivers/iommu/rk-iovmm.c b/drivers/iommu/rk-iovmm.c index e071e8653dcb..9aebb5bbabfd 100644 --- a/drivers/iommu/rk-iovmm.c +++ b/drivers/iommu/rk-iovmm.c @@ -72,8 +72,8 @@ dma_addr_t rockchip_iovmm_map(struct device *dev, int order; int ret; - for (; sg_dma_len(sg) < offset; sg = sg_next(sg)) - offset -= sg_dma_len(sg); + for (; sg->length < offset; sg = sg_next(sg)) + offset -= sg->length; start_off = offset_in_page(sg_phys(sg) + offset); size = PAGE_ALIGN(size + start_off); @@ -98,15 +98,16 @@ dma_addr_t rockchip_iovmm_map(struct device *dev, addr = start; do { phys_addr_t phys; + struct scatterlist *sg_tmp; size_t len; phys = sg_phys(sg); - len = sg_dma_len(sg); + len = sg->length; /* if back to back sg entries are contiguous consolidate them */ - while (sg_next(sg) && sg_phys(sg) + - sg_dma_len(sg) == sg_phys(sg_next(sg))) { - len += sg_dma_len(sg_next(sg)); + sg_tmp = sg_next(sg); + while (sg_next(sg) && sg_phys(sg) + sg->length == sg_phys(sg_next(sg))) { + len += sg_tmp->length; sg = sg_next(sg); }