From: FUJITA Tomonori Date: Wed, 17 Oct 2007 08:51:20 +0000 (+0200) Subject: IA64: iommu uses sg_next with an invalid sg element X-Git-Tag: v2.6.24-rc1~490^2~4 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bdb02504f473be6a785741093913ea2acd05626f;p=linux-2.6 IA64: iommu uses sg_next with an invalid sg element sg list elements might not be continuous. Signed-off-by: FUJITA Tomonori Signed-off-by: Jens Axboe --- diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index 4338f4123f..3c95f4184b 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c @@ -1179,7 +1179,6 @@ sba_fill_pdir( u64 *pdirp = NULL; unsigned long dma_offset = 0; - dma_sg--; while (nents-- > 0) { int cnt = startsg->dma_length; startsg->dma_length = 0; @@ -1201,7 +1200,8 @@ sba_fill_pdir( u32 pide = startsg->dma_address & ~PIDE_FLAG; dma_offset = (unsigned long) pide & ~iovp_mask; startsg->dma_address = 0; - dma_sg = sg_next(dma_sg); + if (n_mappings) + dma_sg = sg_next(dma_sg); dma_sg->dma_address = pide | ioc->ibase; pdirp = &(ioc->pdir_base[pide >> iovp_shift]); n_mappings++;