Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −10
Original line number Original line Diff line number Diff line
@@ -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[] = {
 */
 */
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,


	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;
+1 −1
Original line number Original line Diff line number Diff line
@@ -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;
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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,