summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Dreier <rolandd@cisco.com>2006-12-16 00:57:26 +0300
committerRoland Dreier <rolandd@cisco.com>2006-12-16 00:57:26 +0300
commitc59a3da1342ff456e5123361739bc331446cda21 (patch)
treea75aa1d937a774f53e1875849082d28683c859ec
parentd1998ef38a13c4e74c69df55ccd38b0440c429b2 (diff)
downloadlinux-c59a3da1342ff456e5123361739bc331446cda21.tar.xz
IB: Fix ib_dma_alloc_coherent() wrapper
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>
-rw-r--r--include/rdma/ib_verbs.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 3c2e10574b23..0bfa3328d686 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -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;
+ }
}
/**