IB/core: Limit DMAC resolution to RoCE Connected QPs
authorParav Pandit <parav@mellanox.com>
Tue, 9 Jan 2018 13:24:53 +0000 (15:24 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 15 Jan 2018 22:33:21 +0000 (15:33 -0700)
Resolving DMAC for RoCE is applicable to only Connected mode QPs.
So resolve DMAC for only for Connected mode QPs.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/verbs.c

index b110db6dbef02649191443dbfe18952995ce7a2d..49a2a764c0bfa39be46e408a34e08dd0e3f056b9 100644 (file)
@@ -1349,6 +1349,14 @@ static int _ib_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr,
        return ret;
 }
 
+static bool is_qp_type_connected(const struct ib_qp *qp)
+{
+       return (qp->qp_type == IB_QPT_UC ||
+               qp->qp_type == IB_QPT_RC ||
+               qp->qp_type == IB_QPT_XRC_INI ||
+               qp->qp_type == IB_QPT_XRC_TGT);
+}
+
 /**
  * ib_modify_qp_with_udata - Modifies the attributes for the specified QP.
  * @ib_qp: The QP to modify.
@@ -1367,7 +1375,8 @@ int ib_modify_qp_with_udata(struct ib_qp *ib_qp, struct ib_qp_attr *attr,
        int ret;
 
        if (attr_mask & IB_QP_AV &&
-           attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE) {
+           attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE &&
+           is_qp_type_connected(qp)) {
                ret = ib_resolve_eth_dmac(qp->device, &attr->ah_attr);
                if (ret)
                        return ret;