Commit 920d706c authored by Eli Cohen's avatar Eli Cohen Committed by Roland Dreier

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: default avatarEli Cohen <eli@mellanox.co.il>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent ccbe9f0b
...@@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = { ...@@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = {
* ib_ud_header_init - Initialize UD header structure * ib_ud_header_init - Initialize UD header structure
* @payload_bytes:Length of packet payload * @payload_bytes:Length of packet payload
* @grh_present:GRH flag (if non-zero, GRH will be included) * @grh_present:GRH flag (if non-zero, GRH will be included)
* @immediate_present: specify if immediate data should be used
* @header:Structure to initialize * @header:Structure to initialize
* *
* ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header, * ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header,
...@@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = { ...@@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = {
*/ */
void ib_ud_header_init(int payload_bytes, void ib_ud_header_init(int payload_bytes,
int grh_present, int grh_present,
int immediate_present,
struct ib_ud_header *header) struct ib_ud_header *header)
{ {
int header_len;
u16 packet_length; u16 packet_length;
memset(header, 0, sizeof *header); 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_version = 0;
header->lrh.link_next_header = header->lrh.link_next_header =
grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL; grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL;
...@@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes, ...@@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes,
header->lrh.packet_length = cpu_to_be16(packet_length); 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; header->bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE;
else else
header->bth.opcode = IB_OPCODE_UD_SEND_ONLY; header->bth.opcode = IB_OPCODE_UD_SEND_ONLY;
......
...@@ -1228,7 +1228,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr, ...@@ -1228,7 +1228,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
for (i = 0; i < wr->num_sge; ++i) for (i = 0; i < wr->num_sge; ++i)
send_size += wr->sg_list[i].length; 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 = sqp->ud_header.lrh.service_level =
be32_to_cpu(ah->av.sl_tclass_flowlabel) >> 28; be32_to_cpu(ah->av.sl_tclass_flowlabel) >> 28;
......
...@@ -1494,7 +1494,7 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp, ...@@ -1494,7 +1494,7 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp,
u16 pkey; u16 pkey;
ib_ud_header_init(256, /* assume a MAD */ ib_ud_header_init(256, /* assume a MAD */
mthca_ah_grh_present(to_mah(wr->wr.ud.ah)), mthca_ah_grh_present(to_mah(wr->wr.ud.ah)), 0,
&sqp->ud_header); &sqp->ud_header);
err = mthca_read_ah(dev, to_mah(wr->wr.ud.ah), &sqp->ud_header); err = mthca_read_ah(dev, to_mah(wr->wr.ud.ah), &sqp->ud_header);
......
...@@ -232,6 +232,7 @@ void ib_unpack(const struct ib_field *desc, ...@@ -232,6 +232,7 @@ void ib_unpack(const struct ib_field *desc,
void ib_ud_header_init(int payload_bytes, void ib_ud_header_init(int payload_bytes,
int grh_present, int grh_present,
int immediate_present,
struct ib_ud_header *header); struct ib_ud_header *header);
int ib_ud_header_pack(struct ib_ud_header *header, int ib_ud_header_pack(struct ib_ud_header *header,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment