IB: Fix ib_dma_alloc_coherent() wrapper
Roland Dreier [Fri, 15 Dec 2006 21:57:26 +0000 (13:57 -0800)]
The ib_dma_alloc_coherent() wrapper uses a u64* for the dma_handle
parameter, unlike dma_alloc_coherent, which uses dma_addr_t*.  This
means that we need a temporary variable to handle the case when
ib_dma_alloc_coherent() just falls through directly to
dma_alloc_coherent() on architectures where sizeof u64 != sizeof
dma_addr_t.

Signed-off-by: Roland Dreier <rolandd@cisco.com>

include/rdma/ib_verbs.h

index 3c2e105..0bfa332 100644 (file)
@@ -1639,7 +1639,14 @@ static inline void *ib_dma_alloc_coherent(struct ib_device *dev,
 {
        if (dev->dma_ops)
                return dev->dma_ops->alloc_coherent(dev, size, dma_handle, flag);
-       return dma_alloc_coherent(dev->dma_device, size, dma_handle, flag);
+       else {
+               dma_addr_t handle;
+               void *ret;
+
+               ret = dma_alloc_coherent(dev->dma_device, size, &handle, flag);
+               *dma_handle = handle;
+               return ret;
+       }
 }
 
 /**