aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEyal Perry <eyalpe@mellanox.com>2013-11-06 08:37:24 -0500
committerDavid S. Miller <davem@davemloft.net>2013-11-07 19:09:44 -0500
commiteb072c4b8da0ba87bc870c7911aae180bae34d4a (patch)
treedf1bdd2dba1c7189cfb278182ee6b540fc4fee50
parentd32435391974e39c35ade4d115f17c538a96a708 (diff)
RDMA/cma: Set IBoE SL (user-priority) by egress map when using vlans
On top of commit 366cddb40 "IB/rdma_cm: TOS <=> UP mapping for IBoE", add support for case vlan egress map is used. When the IBoE session is being set over a vlan, inherit the socket priority to vlan priority mapping which was configured for the vlan device egress map. Signed-off-by: Eyal Perry <eyalpe@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/infiniband/core/cma.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index a082fd9e7ebe..d2172e71f985 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1848,6 +1848,26 @@ static int cma_resolve_iw_route(struct rdma_id_private *id_priv, int timeout_ms)
1848 return 0; 1848 return 0;
1849} 1849}
1850 1850
1851static int iboe_tos_to_sl(struct net_device *ndev, int tos)
1852{
1853 int prio;
1854 struct net_device *dev;
1855
1856 prio = rt_tos2priority(tos);
1857 dev = ndev->priv_flags & IFF_802_1Q_VLAN ?
1858 vlan_dev_real_dev(ndev) : ndev;
1859
1860 if (dev->num_tc)
1861 return netdev_get_prio_tc_map(dev, prio);
1862
1863#if IS_ENABLED(CONFIG_VLAN_8021Q)
1864 if (ndev->priv_flags & IFF_802_1Q_VLAN)
1865 return (vlan_dev_get_egress_qos_mask(ndev, prio) &
1866 VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
1867#endif
1868 return 0;
1869}
1870
1851static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) 1871static int cma_resolve_iboe_route(struct rdma_id_private *id_priv)
1852{ 1872{
1853 struct rdma_route *route = &id_priv->id.route; 1873 struct rdma_route *route = &id_priv->id.route;
@@ -1888,11 +1908,7 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv)
1888 route->path_rec->reversible = 1; 1908 route->path_rec->reversible = 1;
1889 route->path_rec->pkey = cpu_to_be16(0xffff); 1909 route->path_rec->pkey = cpu_to_be16(0xffff);
1890 route->path_rec->mtu_selector = IB_SA_EQ; 1910 route->path_rec->mtu_selector = IB_SA_EQ;
1891 route->path_rec->sl = netdev_get_prio_tc_map( 1911 route->path_rec->sl = iboe_tos_to_sl(ndev, id_priv->tos);
1892 ndev->priv_flags & IFF_802_1Q_VLAN ?
1893 vlan_dev_real_dev(ndev) : ndev,
1894 rt_tos2priority(id_priv->tos));
1895
1896 route->path_rec->mtu = iboe_get_mtu(ndev->mtu); 1912 route->path_rec->mtu = iboe_get_mtu(ndev->mtu);
1897 route->path_rec->rate_selector = IB_SA_EQ; 1913 route->path_rec->rate_selector = IB_SA_EQ;
1898 route->path_rec->rate = iboe_get_rate(ndev); 1914 route->path_rec->rate = iboe_get_rate(ndev);