diff options
author | Hal Rosenstock <halr@voltaire.com> | 2005-09-07 14:03:41 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2005-09-07 14:03:41 -0400 |
commit | b5dcbf47e10e568273213a4410daa27c11cdba3a (patch) | |
tree | 02024477eaa9b845d973865d6cdebaa0229677f0 | |
parent | 30a7e8ef13b2ff0db7b15af9afdd12b93783f01e (diff) |
[PATCH] IB: RMPP fixes
- Fix payload length of middle RMPP sent segments. Middle payload
lengths should be 0 on the send side.
(This is perhaps a compliance and should not be an interop issue as
middle payload lengths are supposed to be ignored on receive).
- Fix length in first segment of multipacket sends
(This is a compliance issue but does not affect at least OpenIB to
OpenIB RMPP transfers).
Signed-off-by: Hal Rosenstock <halr@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/core/mad_rmpp.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c index 43fd805e0265..2bd8b1cc57c4 100644 --- a/drivers/infiniband/core/mad_rmpp.c +++ b/drivers/infiniband/core/mad_rmpp.c | |||
@@ -593,7 +593,8 @@ static int send_next_seg(struct ib_mad_send_wr_private *mad_send_wr) | |||
593 | rmpp_mad->rmpp_hdr.paylen_newwin = | 593 | rmpp_mad->rmpp_hdr.paylen_newwin = |
594 | cpu_to_be32(mad_send_wr->total_seg * | 594 | cpu_to_be32(mad_send_wr->total_seg * |
595 | (sizeof(struct ib_rmpp_mad) - | 595 | (sizeof(struct ib_rmpp_mad) - |
596 | offsetof(struct ib_rmpp_mad, data))); | 596 | offsetof(struct ib_rmpp_mad, data)) - |
597 | mad_send_wr->pad); | ||
597 | mad_send_wr->sg_list[0].length = sizeof(struct ib_rmpp_mad); | 598 | mad_send_wr->sg_list[0].length = sizeof(struct ib_rmpp_mad); |
598 | } else { | 599 | } else { |
599 | mad_send_wr->send_wr.num_sge = 2; | 600 | mad_send_wr->send_wr.num_sge = 2; |
@@ -602,6 +603,7 @@ static int send_next_seg(struct ib_mad_send_wr_private *mad_send_wr) | |||
602 | mad_send_wr->sg_list[1].length = sizeof(struct ib_rmpp_mad) - | 603 | mad_send_wr->sg_list[1].length = sizeof(struct ib_rmpp_mad) - |
603 | mad_send_wr->data_offset; | 604 | mad_send_wr->data_offset; |
604 | mad_send_wr->sg_list[1].lkey = mad_send_wr->sg_list[0].lkey; | 605 | mad_send_wr->sg_list[1].lkey = mad_send_wr->sg_list[0].lkey; |
606 | rmpp_mad->rmpp_hdr.paylen_newwin = 0; | ||
605 | } | 607 | } |
606 | 608 | ||
607 | if (mad_send_wr->seg_num == mad_send_wr->total_seg) { | 609 | if (mad_send_wr->seg_num == mad_send_wr->total_seg) { |