From mboxrd@z Thu Jan 1 00:00:00 1970 From: Amir Vadai Subject: [PATCH V1 6/6] IB/rdma_cm: TOS <=> UP mapping for IBoE Date: Wed, 21 Mar 2012 11:25:03 +0200 Message-ID: <1332321903-11704-7-git-send-email-amirv@mellanox.com> References: <1332321903-11704-1-git-send-email-amirv@mellanox.com> Cc: netdev@vger.kernel.org, Roland Dreier , Oren Duer , Amir Vadai , Sean Hefty To: "David S. Miller" Return-path: Received: from eu1sys200aog113.obsmtp.com ([207.126.144.135]:58266 "HELO eu1sys200aog113.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1756860Ab2CUJZi (ORCPT ); Wed, 21 Mar 2012 05:25:38 -0400 In-Reply-To: <1332321903-11704-1-git-send-email-amirv@mellanox.com> Sender: netdev-owner@vger.kernel.org List-ID: From: Amir Vadai Both tagged traffic and untagged traffic use tc tool mapping. Treat RDMA TOS same as IP TOS when mapping to SL Since IP TOS to priority mapping is not exported, had to borrow the code from net/ipv4/route.c Signed-off-by: Amir Vadai CC: Sean Hefty --- We can export IP TOS to priority mapping if the networking maintainers will say where they want it. --- drivers/infiniband/core/cma.c | 35 ++++++++++++++++++++++++++++++++++- 1 files changed, 34 insertions(+), 1 deletions(-) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index e3e470f..c0eeb2c 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -1781,6 +1782,32 @@ static int cma_resolve_iw_route(struct rdma_id_private *id_priv, int timeout_ms) return 0; } +#define ECN_OR_COST(class) TC_PRIO_##class + +static const __u8 tos2prio[16] = { + TC_PRIO_BESTEFFORT, + ECN_OR_COST(BESTEFFORT), + TC_PRIO_BESTEFFORT, + ECN_OR_COST(BESTEFFORT), + TC_PRIO_BULK, + ECN_OR_COST(BULK), + TC_PRIO_BULK, + ECN_OR_COST(BULK), + TC_PRIO_INTERACTIVE, + ECN_OR_COST(INTERACTIVE), + TC_PRIO_INTERACTIVE, + ECN_OR_COST(INTERACTIVE), + TC_PRIO_INTERACTIVE_BULK, + ECN_OR_COST(INTERACTIVE_BULK), + TC_PRIO_INTERACTIVE_BULK, + ECN_OR_COST(INTERACTIVE_BULK) +}; + +static inline char cma_tos2priority(u8 tos) +{ + return tos2prio[IPTOS_TOS(tos)>>1]; +} + static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) { struct rdma_route *route = &id_priv->id.route; @@ -1826,7 +1853,13 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) route->path_rec->reversible = 1; route->path_rec->pkey = cpu_to_be16(0xffff); route->path_rec->mtu_selector = IB_SA_EQ; - route->path_rec->sl = id_priv->tos >> 5; + if (ndev->priv_flags & IFF_802_1Q_VLAN) + route->path_rec->sl = + netdev_get_prio_tc_map(vlan_dev_real_dev(ndev), + cma_tos2priority(id_priv->tos)); + else + route->path_rec->sl = netdev_get_prio_tc_map(ndev, + cma_tos2priority(id_priv->tos)); route->path_rec->mtu = iboe_get_mtu(ndev->mtu); route->path_rec->rate_selector = IB_SA_EQ; -- 1.7.8.2