IB/mthca: Initialize grh_present before using it
build_mlx_header() was using sqp->ud_header.grh_present before it was initialized by mthca_read_ah(). Furthermore, header->grh_present is set by ib_ud_header_init, so there's no need to set it again in mthca_read_ah(). Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
c063a06835
commit
9eacee2ac6
|
@ -163,6 +163,11 @@ int mthca_destroy_ah(struct mthca_dev *dev, struct mthca_ah *ah)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mthca_ah_grh_present(struct mthca_ah *ah)
|
||||||
|
{
|
||||||
|
return !!(ah->av->g_slid & 0x80);
|
||||||
|
}
|
||||||
|
|
||||||
int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
|
int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
|
||||||
struct ib_ud_header *header)
|
struct ib_ud_header *header)
|
||||||
{
|
{
|
||||||
|
@ -172,8 +177,7 @@ int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
|
||||||
header->lrh.service_level = be32_to_cpu(ah->av->sl_tclass_flowlabel) >> 28;
|
header->lrh.service_level = be32_to_cpu(ah->av->sl_tclass_flowlabel) >> 28;
|
||||||
header->lrh.destination_lid = ah->av->dlid;
|
header->lrh.destination_lid = ah->av->dlid;
|
||||||
header->lrh.source_lid = cpu_to_be16(ah->av->g_slid & 0x7f);
|
header->lrh.source_lid = cpu_to_be16(ah->av->g_slid & 0x7f);
|
||||||
if (ah->av->g_slid & 0x80) {
|
if (mthca_ah_grh_present(ah)) {
|
||||||
header->grh_present = 1;
|
|
||||||
header->grh.traffic_class =
|
header->grh.traffic_class =
|
||||||
(be32_to_cpu(ah->av->sl_tclass_flowlabel) >> 20) & 0xff;
|
(be32_to_cpu(ah->av->sl_tclass_flowlabel) >> 20) & 0xff;
|
||||||
header->grh.flow_label =
|
header->grh.flow_label =
|
||||||
|
@ -184,8 +188,6 @@ int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
|
||||||
&header->grh.source_gid);
|
&header->grh.source_gid);
|
||||||
memcpy(header->grh.destination_gid.raw,
|
memcpy(header->grh.destination_gid.raw,
|
||||||
ah->av->dgid, 16);
|
ah->av->dgid, 16);
|
||||||
} else {
|
|
||||||
header->grh_present = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -520,6 +520,7 @@ int mthca_create_ah(struct mthca_dev *dev,
|
||||||
int mthca_destroy_ah(struct mthca_dev *dev, struct mthca_ah *ah);
|
int mthca_destroy_ah(struct mthca_dev *dev, struct mthca_ah *ah);
|
||||||
int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
|
int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
|
||||||
struct ib_ud_header *header);
|
struct ib_ud_header *header);
|
||||||
|
int mthca_ah_grh_present(struct mthca_ah *ah);
|
||||||
|
|
||||||
int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);
|
int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);
|
||||||
int mthca_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);
|
int mthca_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);
|
||||||
|
|
|
@ -1434,7 +1434,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 */
|
||||||
sqp->ud_header.grh_present,
|
mthca_ah_grh_present(to_mah(wr->wr.ud.ah)),
|
||||||
&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);
|
||||||
|
|
Loading…
Reference in New Issue