x86: pci-gart fix
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Thu, 25 Oct 2007 07:13:32 +0000 (09:13 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 25 Oct 2007 07:13:32 +0000 (09:13 +0200)
map_sg could copy the last sg element to another position (if merging
some elements). It breaks sg chaining. This copies only
dma_address/length instead of the whole sg element.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
arch/x86/kernel/pci-gart_64.c

index c56e9ee..ae7e016 100644 (file)
@@ -338,7 +338,6 @@ static int __dma_map_cont(struct scatterlist *start, int nelems,
                
                BUG_ON(s != start && s->offset);
                if (s == start) {
-                       *sout = *s; 
                        sout->dma_address = iommu_bus_base;
                        sout->dma_address += iommu_page*PAGE_SIZE + s->offset;
                        sout->dma_length = s->length;
@@ -365,7 +364,7 @@ static inline int dma_map_cont(struct scatterlist *start, int nelems,
 {
        if (!need) {
                BUG_ON(nelems != 1);
-               *sout = *start;
+               sout->dma_address = start->dma_address;
                sout->dma_length = start->length;
                return 0;
        }