[openib-general] Re: [PATCH] mthca: uninitialized variable
Michael S. Tsirkin
mst at mellanox.co.il
Thu Jan 12 07:16:44 PST 2006
Quoting r. Michael S. Tsirkin <mst at mellanox.co.il>:
> Subject: [PATCH] mthca: uninitialized variable
>
> mthca was using sqp->ud_header.grh_present before it was initialized
> by mthca_read_ah. Further, header->grh_present is set by ib_ud_header_init.
>
> Signed-off-by: Michael S. Tsirkin <mst at mellanox.co.il>
This patch was mangled, sorry about that.
I've put an updated copy here: mthca_mlx_grh.patch
Index: linux-2.6.14/drivers/infiniband/hw/mthca/mthca_qp.c
===================================================================
--- linux-2.6.14.orig/drivers/infiniband/hw/mthca/mthca_qp.c 2006-01-12 16:54:43.000000000 +0200
+++ linux-2.6.14/drivers/infiniband/hw/mthca/mthca_qp.c 2006-01-12 16:54:43.000000000 +0200
@@ -1429,7 +1429,7 @@ static int build_mlx_header(struct mthca
u16 pkey;
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);
err = mthca_read_ah(dev, to_mah(wr->wr.ud.ah), &sqp->ud_header);
Index: linux-2.6.14/drivers/infiniband/hw/mthca/mthca_av.c
===================================================================
--- linux-2.6.14.orig/drivers/infiniband/hw/mthca/mthca_av.c 2006-01-12 16:54:31.000000000 +0200
+++ linux-2.6.14/drivers/infiniband/hw/mthca/mthca_av.c 2006-01-12 16:54:43.000000000 +0200
@@ -161,6 +161,11 @@ int mthca_destroy_ah(struct mthca_dev *d
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,
struct ib_ud_header *header)
{
@@ -170,8 +175,7 @@ int mthca_read_ah(struct mthca_dev *dev,
header->lrh.service_level = be32_to_cpu(ah->av->sl_tclass_flowlabel) >> 28;
header->lrh.destination_lid = ah->av->dlid;
header->lrh.source_lid = cpu_to_be16(ah->av->g_slid & 0x7f);
- if (ah->av->g_slid & 0x80) {
- header->grh_present = 1;
+ if (mthca_ah_grh_present(ah)) {
header->grh.traffic_class =
(be32_to_cpu(ah->av->sl_tclass_flowlabel) >> 20) & 0xff;
header->grh.flow_label =
@@ -182,8 +186,6 @@ int mthca_read_ah(struct mthca_dev *dev,
&header->grh.source_gid);
memcpy(header->grh.destination_gid.raw,
ah->av->dgid, 16);
- } else {
- header->grh_present = 0;
}
return 0;
Index: linux-2.6.14/drivers/infiniband/hw/mthca/mthca_dev.h
===================================================================
--- linux-2.6.14.orig/drivers/infiniband/hw/mthca/mthca_dev.h 2006-01-12 16:52:25.000000000 +0200
+++ linux-2.6.14/drivers/infiniband/hw/mthca/mthca_dev.h 2006-01-12 17:00:08.000000000 +0200
@@ -520,6 +520,7 @@ int mthca_create_ah(struct mthca_dev *de
int mthca_destroy_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);
+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_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);
--
MST
More information about the general
mailing list