aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2007-10-17 04:51:20 -0400
committerJens Axboe <jens.axboe@oracle.com>2007-10-17 04:51:20 -0400
commitbdb02504f473be6a785741093913ea2acd05626f (patch)
tree6365038f20fd6bf68adfdb37c2be25f396bcc1d2 /arch
parent8bf50f71cbfc7d043f0f135da72b3feefeaa0eb8 (diff)
IA64: iommu uses sg_next with an invalid sg element
sg list elements might not be continuous. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/hp/common/sba_iommu.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index 4338f4123f31..3c95f4184b99 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -1179,7 +1179,6 @@ sba_fill_pdir(
1179 u64 *pdirp = NULL; 1179 u64 *pdirp = NULL;
1180 unsigned long dma_offset = 0; 1180 unsigned long dma_offset = 0;
1181 1181
1182 dma_sg--;
1183 while (nents-- > 0) { 1182 while (nents-- > 0) {
1184 int cnt = startsg->dma_length; 1183 int cnt = startsg->dma_length;
1185 startsg->dma_length = 0; 1184 startsg->dma_length = 0;
@@ -1201,7 +1200,8 @@ sba_fill_pdir(
1201 u32 pide = startsg->dma_address & ~PIDE_FLAG; 1200 u32 pide = startsg->dma_address & ~PIDE_FLAG;
1202 dma_offset = (unsigned long) pide & ~iovp_mask; 1201 dma_offset = (unsigned long) pide & ~iovp_mask;
1203 startsg->dma_address = 0; 1202 startsg->dma_address = 0;
1204 dma_sg = sg_next(dma_sg); 1203 if (n_mappings)
1204 dma_sg = sg_next(dma_sg);
1205 dma_sg->dma_address = pide | ioc->ibase; 1205 dma_sg->dma_address = pide | ioc->ibase;
1206 pdirp = &(ioc->pdir_base[pide >> iovp_shift]); 1206 pdirp = &(ioc->pdir_base[pide >> iovp_shift]);
1207 n_mappings++; 1207 n_mappings++;