IB/core: fix unmap_sg argument
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Fri, 2 Dec 2016 13:45:26 +0000 (14:45 +0100)
committerDoug Ledford <dledford@redhat.com>
Wed, 14 Dec 2016 19:21:26 +0000 (14:21 -0500)
__ib_umem_release calls dma_unmap_sg with a different number of
sg_entries than ib_umem_get uses for dma_map_sg. This might cause
trouble for implementations that merge sglist entries and results
in the following dma debug complaint:

DMA-API: device driver frees DMA sg list with different entry
         count [map count=2] [unmap count=1]

Fix it by using the correct value.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/umem.c

index 224ad274ea0b8a73e30304e8e5bc9f935c8b98e5..0120e7ff449f9db0776c358c508e9e91bcfed254 100644 (file)
@@ -51,7 +51,7 @@ static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int d
 
        if (umem->nmap > 0)
                ib_dma_unmap_sg(dev, umem->sg_head.sgl,
-                               umem->nmap,
+                               umem->npages,
                                DMA_BIDIRECTIONAL);
 
        for_each_sg(umem->sg_head.sgl, sg, umem->npages, i) {