Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/cma: Always set static rate to 0 for RoCE

Set static rate to 0 as it should be discovered by path query and
has no meaning for RoCE.
This also avoid of using the rtnl lock and ethtool API, which is
a bottleneck when try to setup many rdma-cm connections at the same
time, especially with multiple processes.

Fixes: 3c86aa70bf67 ("RDMA/cm: Add RDMA CM support for IBoE devices")
Signed-off-by: Mark Zhang <markzhang@nvidia.com>
Link: https://lore.kernel.org/r/f72a4f8b667b803aee9fa794069f61afb5839ce4.1685960567.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>

authored by

Mark Zhang and committed by
Leon Romanovsky
58030c76 2de43f5b

+2 -25
+2 -2
drivers/infiniband/core/cma.c
··· 3295 3295 route->path_rec->traffic_class = tos; 3296 3296 route->path_rec->mtu = iboe_get_mtu(ndev->mtu); 3297 3297 route->path_rec->rate_selector = IB_SA_EQ; 3298 - route->path_rec->rate = iboe_get_rate(ndev); 3298 + route->path_rec->rate = IB_RATE_PORT_CURRENT; 3299 3299 dev_put(ndev); 3300 3300 route->path_rec->packet_life_time_selector = IB_SA_EQ; 3301 3301 /* In case ACK timeout is set, use this value to calculate ··· 4964 4964 if (!ndev) 4965 4965 return -ENODEV; 4966 4966 4967 - ib.rec.rate = iboe_get_rate(ndev); 4967 + ib.rec.rate = IB_RATE_PORT_CURRENT; 4968 4968 ib.rec.hop_limit = 1; 4969 4969 ib.rec.mtu = iboe_get_mtu(ndev->mtu); 4970 4970
-23
include/rdma/ib_addr.h
··· 194 194 return 0; 195 195 } 196 196 197 - static inline int iboe_get_rate(struct net_device *dev) 198 - { 199 - struct ethtool_link_ksettings cmd; 200 - int err; 201 - 202 - rtnl_lock(); 203 - err = __ethtool_get_link_ksettings(dev, &cmd); 204 - rtnl_unlock(); 205 - if (err) 206 - return IB_RATE_PORT_CURRENT; 207 - 208 - if (cmd.base.speed >= 40000) 209 - return IB_RATE_40_GBPS; 210 - else if (cmd.base.speed >= 30000) 211 - return IB_RATE_30_GBPS; 212 - else if (cmd.base.speed >= 20000) 213 - return IB_RATE_20_GBPS; 214 - else if (cmd.base.speed >= 10000) 215 - return IB_RATE_10_GBPS; 216 - else 217 - return IB_RATE_PORT_CURRENT; 218 - } 219 - 220 197 static inline int rdma_link_local_addr(struct in6_addr *addr) 221 198 { 222 199 if (addr->s6_addr32[0] == htonl(0xfe800000) &&