summaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/mad_rmpp.h
diff options
context:
space:
mode:
authorSean Hefty <sean.hefty@intel.com>2005-10-25 10:51:39 -0700
committerRoland Dreier <rolandd@cisco.com>2005-10-25 10:51:39 -0700
commit34816ad98efe4d47ffd858a0345321f9d85d9420 (patch)
tree8a5ed6a9b80e667c4c02d9993711ced06d158555 /drivers/infiniband/core/mad_rmpp.h
parentae7971a7706384ca373fb7e212fe195698e6c5a1 (diff)
downloadtalos-obmc-linux-34816ad98efe4d47ffd858a0345321f9d85d9420.tar.gz
talos-obmc-linux-34816ad98efe4d47ffd858a0345321f9d85d9420.zip
[IB] Fix MAD layer DMA mappings to avoid touching data buffer once mapped
The MAD layer was violating the DMA API by touching data buffers used for sends after the DMA mapping was done. This causes problems on non-cache-coherent architectures, because the device doing DMA won't see updates to the payload buffers that exist only in the CPU cache. Fix this by having all MAD consumers use ib_create_send_mad() to allocate their send buffers, and moving the DMA mapping into the MAD layer so it can be done just before calling send (and after any modifications of the send buffer by the MAD layer). Tested on a non-cache-coherent PowerPC 440SPe system. Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/core/mad_rmpp.h')
-rw-r--r--drivers/infiniband/core/mad_rmpp.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/infiniband/core/mad_rmpp.h b/drivers/infiniband/core/mad_rmpp.h
index c4924dfb8e75..f0616fd22494 100644
--- a/drivers/infiniband/core/mad_rmpp.h
+++ b/drivers/infiniband/core/mad_rmpp.h
@@ -51,6 +51,8 @@ ib_process_rmpp_recv_wc(struct ib_mad_agent_private *agent,
int ib_process_rmpp_send_wc(struct ib_mad_send_wr_private *mad_send_wr,
struct ib_mad_send_wc *mad_send_wc);
+void ib_rmpp_send_handler(struct ib_mad_send_wc *mad_send_wc);
+
void ib_cancel_rmpp_recvs(struct ib_mad_agent_private *agent);
int ib_retry_rmpp(struct ib_mad_send_wr_private *mad_send_wr);
OpenPOWER on IntegriCloud