]> git.karo-electronics.de Git - linux-beck.git/commitdiff
IB/core: Do not resolve VLAN if already resolved
authorMoni Shoua <monis@mellanox.com>
Wed, 19 Nov 2014 09:28:18 +0000 (11:28 +0200)
committerRoland Dreier <roland@purestorage.com>
Tue, 16 Dec 2014 02:10:12 +0000 (18:10 -0800)
For RoCE, resolution of layer 2 address attributes forces no VLAN if
link-local GIDs are used.  This patch allows applications to choose
the VLAN ID for link-local based RoCE GIDs by setting IB_QP_VID in
their QP attribute mask, and prevents the core from overriding this
choice.

Cc: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/core/verbs.c

index c2b89cc5dbcad5153ef3e3d072ea0c5e3d384caa..f93eb8da7b5ad443900c3b8b423da505d0531a95 100644 (file)
@@ -879,7 +879,8 @@ int ib_resolve_eth_l2_attrs(struct ib_qp *qp,
                if (rdma_link_local_addr((struct in6_addr *)qp_attr->ah_attr.grh.dgid.raw)) {
                        rdma_get_ll_mac((struct in6_addr *)qp_attr->ah_attr.grh.dgid.raw, qp_attr->ah_attr.dmac);
                        rdma_get_ll_mac((struct in6_addr *)sgid.raw, qp_attr->smac);
-                       qp_attr->vlan_id = rdma_get_vlan_id(&sgid);
+                       if (!(*qp_attr_mask & IB_QP_VID))
+                               qp_attr->vlan_id = rdma_get_vlan_id(&sgid);
                } else {
                        ret = rdma_addr_find_dmac_by_grh(&sgid, &qp_attr->ah_attr.grh.dgid,
                                        qp_attr->ah_attr.dmac, &qp_attr->vlan_id);