From b2709c30cf9513812e02cce9a0fe339b08daad47 Mon Sep 17 00:00:00 2001 From: Amir Vadai Date: Sun, 24 Jan 2010 17:12:34 +0200 Subject: [PATCH] sdp: must use ib_sg_dma_*, not sg_dma_* for mapping This fixes OFED bug 1895, althoug some warnings are still generated, when running qperf sdp_bw with large sizes (using zcopy), on the truescale adapters. Signed-off-by: Dave Olson Signed-off-by: Amir Vadai --- drivers/infiniband/ulp/sdp/sdp_zcopy.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/ulp/sdp/sdp_zcopy.c b/drivers/infiniband/ulp/sdp/sdp_zcopy.c index 392669760791..bb57d08b656c 100644 --- a/drivers/infiniband/ulp/sdp/sdp_zcopy.c +++ b/drivers/infiniband/ulp/sdp/sdp_zcopy.c @@ -402,6 +402,7 @@ static int sdp_alloc_fmr(struct sock *sk, void *uaddr, size_t len, { struct ib_pool_fmr *fmr; struct ib_umem *umem; + struct ib_device *dev; u64 *pages; struct ib_umem_chunk *chunk; int n, j, k; @@ -433,12 +434,17 @@ static int sdp_alloc_fmr(struct sock *sk, void *uaddr, size_t len, n = 0; + dev = sdp_sk(sk)->ib_device; list_for_each_entry(chunk, &umem->chunk_list, list) { for (j = 0; j < chunk->nmap; ++j) { - len = sg_dma_len(&chunk->page_list[j]) >> PAGE_SHIFT; + len = ib_sg_dma_len(dev, + &chunk->page_list[j]) >> PAGE_SHIFT; + for (k = 0; k < len; ++k) { - pages[n++] = sg_dma_address(&chunk->page_list[j]) + + pages[n++] = ib_sg_dma_address(dev, + &chunk->page_list[j]) + umem->page_size * k; + } } } -- 2.50.1