IB/core: Attempt DMAC resolution for only RoCE
authorParav Pandit <parav@mellanox.com>
Tue, 9 Jan 2018 13:24:52 +0000 (15:24 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 15 Jan 2018 22:33:21 +0000 (15:33 -0700)
Instead of returning 0 (success) for RoCE scenarios where DMAC should
not be resolved, avoid such attempt and make code consistent with
ib_create_user_ah().

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 af3f8780f93fd6821e04c0db90d5f877196e30ad..b110db6dbef02649191443dbfe18952995ce7a2d 100644 (file)
@@ -1301,9 +1301,6 @@ static int ib_resolve_eth_dmac(struct ib_device *device,
        if (!rdma_is_port_valid(device, rdma_ah_get_port_num(ah_attr)))
                return -EINVAL;
 
-       if (ah_attr->type != RDMA_AH_ATTR_TYPE_ROCE)
-               return 0;
-
        grh = rdma_ah_retrieve_grh(ah_attr);
 
        if (rdma_is_multicast_addr((struct in6_addr *)ah_attr->grh.dgid.raw)) {
@@ -1369,7 +1366,8 @@ int ib_modify_qp_with_udata(struct ib_qp *ib_qp, struct ib_qp_attr *attr,
        struct ib_qp *qp = ib_qp->real_qp;
        int ret;
 
-       if (attr_mask & IB_QP_AV) {
+       if (attr_mask & IB_QP_AV &&
+           attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE) {
                ret = ib_resolve_eth_dmac(qp->device, &attr->ah_attr);
                if (ret)
                        return ret;