Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

IB/core: Fix and clean up ib_ud_header_init()

ib_ud_header_init() first clears header and then fills up the various
fields. Later on, it tests header->immediate_present, which it has
already cleared, so the condition is always false. Fix this by adding
an immediate_present parameter and setting header->immediate_present
as is done with grh_present. Also remove unused calculation of
header_len.

Signed-off-by: Eli Cohen <eli@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>

authored by

Eli Cohen and committed by
Roland Dreier
920d706c ccbe9f0b

+7 -12
+4 -10
drivers/infiniband/core/ud_header.c
··· 181 181 * ib_ud_header_init - Initialize UD header structure 182 182 * @payload_bytes:Length of packet payload 183 183 * @grh_present:GRH flag (if non-zero, GRH will be included) 184 + * @immediate_present: specify if immediate data should be used 184 185 * @header:Structure to initialize 185 186 * 186 187 * ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header, ··· 192 191 */ 193 192 void ib_ud_header_init(int payload_bytes, 194 193 int grh_present, 194 + int immediate_present, 195 195 struct ib_ud_header *header) 196 196 { 197 - int header_len; 198 197 u16 packet_length; 199 198 200 199 memset(header, 0, sizeof *header); 201 - 202 - header_len = 203 - IB_LRH_BYTES + 204 - IB_BTH_BYTES + 205 - IB_DETH_BYTES; 206 - if (grh_present) { 207 - header_len += IB_GRH_BYTES; 208 - } 209 200 210 201 header->lrh.link_version = 0; 211 202 header->lrh.link_next_header = ··· 224 231 225 232 header->lrh.packet_length = cpu_to_be16(packet_length); 226 233 227 - if (header->immediate_present) 234 + header->immediate_present = immediate_present; 235 + if (immediate_present) 228 236 header->bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; 229 237 else 230 238 header->bth.opcode = IB_OPCODE_UD_SEND_ONLY;
+1 -1
drivers/infiniband/hw/mlx4/qp.c
··· 1228 1228 for (i = 0; i < wr->num_sge; ++i) 1229 1229 send_size += wr->sg_list[i].length; 1230 1230 1231 - ib_ud_header_init(send_size, mlx4_ib_ah_grh_present(ah), &sqp->ud_header); 1231 + ib_ud_header_init(send_size, mlx4_ib_ah_grh_present(ah), 0, &sqp->ud_header); 1232 1232 1233 1233 sqp->ud_header.lrh.service_level = 1234 1234 be32_to_cpu(ah->av.sl_tclass_flowlabel) >> 28;
+1 -1
drivers/infiniband/hw/mthca/mthca_qp.c
··· 1494 1494 u16 pkey; 1495 1495 1496 1496 ib_ud_header_init(256, /* assume a MAD */ 1497 - mthca_ah_grh_present(to_mah(wr->wr.ud.ah)), 1497 + mthca_ah_grh_present(to_mah(wr->wr.ud.ah)), 0, 1498 1498 &sqp->ud_header); 1499 1499 1500 1500 err = mthca_read_ah(dev, to_mah(wr->wr.ud.ah), &sqp->ud_header);
+1
include/rdma/ib_pack.h
··· 232 232 233 233 void ib_ud_header_init(int payload_bytes, 234 234 int grh_present, 235 + int immediate_present, 235 236 struct ib_ud_header *header); 236 237 237 238 int ib_ud_header_pack(struct ib_ud_header *header,