diff options
author | Eyal Perry <eyalpe@mellanox.com> | 2013-11-06 08:37:24 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-07 19:09:44 -0500 |
commit | eb072c4b8da0ba87bc870c7911aae180bae34d4a (patch) | |
tree | df1bdd2dba1c7189cfb278182ee6b540fc4fee50 | |
parent | d32435391974e39c35ade4d115f17c538a96a708 (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.c | 26 |
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 | ||
1851 | static 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 | |||
1851 | static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) | 1871 | static 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); |