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>
This commit is contained in:
parent
8bf50f71cb
commit
bdb02504f4
@ -1179,7 +1179,6 @@ sba_fill_pdir(
|
|||||||
u64 *pdirp = NULL;
|
u64 *pdirp = NULL;
|
||||||
unsigned long dma_offset = 0;
|
unsigned long dma_offset = 0;
|
||||||
|
|
||||||
dma_sg--;
|
|
||||||
while (nents-- > 0) {
|
while (nents-- > 0) {
|
||||||
int cnt = startsg->dma_length;
|
int cnt = startsg->dma_length;
|
||||||
startsg->dma_length = 0;
|
startsg->dma_length = 0;
|
||||||
@ -1201,6 +1200,7 @@ sba_fill_pdir(
|
|||||||
u32 pide = startsg->dma_address & ~PIDE_FLAG;
|
u32 pide = startsg->dma_address & ~PIDE_FLAG;
|
||||||
dma_offset = (unsigned long) pide & ~iovp_mask;
|
dma_offset = (unsigned long) pide & ~iovp_mask;
|
||||||
startsg->dma_address = 0;
|
startsg->dma_address = 0;
|
||||||
|
if (n_mappings)
|
||||||
dma_sg = sg_next(dma_sg);
|
dma_sg = sg_next(dma_sg);
|
||||||
dma_sg->dma_address = pide | ioc->ibase;
|
dma_sg->dma_address = pide | ioc->ibase;
|
||||||
pdirp = &(ioc->pdir_base[pide >> iovp_shift]);
|
pdirp = &(ioc->pdir_base[pide >> iovp_shift]);
|
||||||
|
Loading…
Reference in New Issue
Block a user