Added a check to the return values of ib_get_cached_gid and ib_get_cached_pkey
before using the values that they set (becasue those functions may fail).

Signed-off-by: Dotan Barak <[EMAIL PROTECTED]>

---

diff --git a/drivers/infiniband/hw/mthca/mthca_av.c 
b/drivers/infiniband/hw/mthca/mthca_av.c
index 4b111a8..cb72041 100644
--- a/drivers/infiniband/hw/mthca/mthca_av.c
+++ b/drivers/infiniband/hw/mthca/mthca_av.c
@@ -268,6 +268,8 @@ int mthca_ah_grh_present(struct mthca_ah *ah)
 int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah *ah,
                  struct ib_ud_header *header)
 {
+       int ret;
+
        if (ah->type == MTHCA_AH_ON_HCA)
                return -EINVAL;
 
@@ -280,10 +282,12 @@ int mthca_read_ah(struct mthca_dev *dev, struct mthca_ah 
*ah,
                header->grh.flow_label    =
                        ah->av->sl_tclass_flowlabel & cpu_to_be32(0xfffff);
                header->grh.hop_limit     = ah->av->hop_limit;
-               ib_get_cached_gid(&dev->ib_dev,
+               ret = ib_get_cached_gid(&dev->ib_dev,
                                  be32_to_cpu(ah->av->port_pd) >> 24,
                                  ah->av->gid_index % dev->limits.gid_table_len,
                                  &header->grh.source_gid);
+               if (ret)
+                       return ret;
                memcpy(header->grh.destination_gid.raw,
                       ah->av->dgid, 16);
        }
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c 
b/drivers/infiniband/hw/mthca/mthca_qp.c
index 0e5461c..22970ec 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -1536,11 +1536,13 @@ static int build_mlx_header(struct mthca_dev *dev, 
struct mthca_sqp *sqp,
                sqp->ud_header.lrh.source_lid = IB_LID_PERMISSIVE;
        sqp->ud_header.bth.solicited_event = !!(wr->send_flags & 
IB_SEND_SOLICITED);
        if (!sqp->qp.ibqp.qp_num)
-               ib_get_cached_pkey(&dev->ib_dev, sqp->qp.port,
+               err = ib_get_cached_pkey(&dev->ib_dev, sqp->qp.port,
                                   sqp->pkey_index, &pkey);
        else
-               ib_get_cached_pkey(&dev->ib_dev, sqp->qp.port,
+               err = ib_get_cached_pkey(&dev->ib_dev, sqp->qp.port,
                                   wr->wr.ud.pkey_index, &pkey);
+       if (err)
+               return err;
        sqp->ud_header.bth.pkey = cpu_to_be16(pkey);
        sqp->ud_header.bth.destination_qpn = cpu_to_be32(wr->wr.ud.remote_qpn);
        sqp->ud_header.bth.psn = cpu_to_be32((sqp->send_psn++) & ((1 << 24) - 
1));
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to