ib_core: fix and clean ib_ud_header_init()
Subsystems (2)
PATCH 1/1 ib_core: fix and clean ib_ud_header_init()
ib_ud_header_init() first clears header and then fills up the various fields. Later on it references header->immediate_present which it has cleared so the condition is also false. Fix this by adding an immediate_present field and set it into header->immediate_present as is the case with grh_present. Also remove unused calculation of header_len.
Signed-off-by Eli Cohen <eli-VPRAkNaXOzVS1MOuV/[email protected]>
--- drivers/infiniband/core/ud_header.c | 14 ++++---------- drivers/infiniband/hw/mlx4/qp.c | 3 ++- drivers/infiniband/hw/mthca/mthca_qp.c | 1 + include/rdma/ib_pack.h | 1 + 4 files changed, 8 insertions(+), 11 deletions(-)
drivers/infiniband/core/ud_header.c +4 -10
@@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = {* ib_ud_header_init - Initialize UD header structure * @payload_bytes:Length of packet payload * @grh_present:GRH flag (if non-zero, GRH will be included) +* @immediate_present: specify if immediate data should be used * @header:Structure to initialize * * ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header,
@@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = {*/ void ib_ud_header_init (int payload_bytes,int grh_present, +int immediate_present,struct ib_ud_header *header) { -int header_len;u16 packet_length;memset (header,0 ,sizeof *header); - header_len = -IB_LRH_BYTES + -IB_BTH_BYTES + -IB_DETH_BYTES ; -if (grh_present) { - header_len +=IB_GRH_BYTES ; - } - header->lrh.link_version =0 ; header->lrh.link_next_header = grh_present ?IB_LNH_IBA_GLOBAL :IB_LNH_IBA_LOCAL ;
@@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes, header->lrh.packet_length =cpu_to_be16 (packet_length); -if (header->immediate_present) + header->immediate_present = immediate_present; +if (immediate_present) header->bth.opcode =IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE ;else header->bth.opcode =IB_OPCODE_UD_SEND_ONLY ;
drivers/infiniband/hw/mlx4/qp.c +2 -1
@@ -1228,7 +1228,8 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,for (i =0 ; i < wr->num_sge; ++i) send_size += wr->sg_list[i].length; -ib_ud_header_init (send_size,mlx4_ib_ah_grh_present (ah), &sqp->ud_header); +ib_ud_header_init (send_size,mlx4_ib_ah_grh_present (ah),0 , + &sqp->ud_header); sqp->ud_header.lrh.service_level =be32_to_cpu (ah->av.sl_tclass_flowlabel) >>28 ;
drivers/infiniband/hw/mthca/mthca_qp.c +1 -0
@@ -1495,6 +1495,7 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp,ib_ud_header_init (256 ,/* assume a MAD */ mthca_ah_grh_present (to_mah (wr->wr.ud.ah)), +0 , &sqp->ud_header); err =mthca_read_ah (dev,to_mah (wr->wr.ud.ah), &sqp->ud_header);
include/rdma/ib_pack.h +1 -0
@@ -232,6 +232,7 @@ void ib_unpack(const struct ib_field *desc,void ib_ud_header_init (int payload_bytes,int grh_present, +int immediate_present,struct ib_ud_header *header); int ib_ud_header_pack(struct ib_ud_header *header,
Signature · 6 lines
1.6.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Roland Dreier
Appliedthanks, applied.
Signature · 7 lines
Roland Dreier <[email protected]> For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/index.html -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html