From nobody Wed Jul 29 18:44:55 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h9LqK6qf5z6mfRN for ; Wed, 29 Jul 2026 18:45:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h9LqK2h23z3Mn4 for ; Wed, 29 Jul 2026 18:45:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785350701; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Fuvuc6l2pNZKDVPsdYuckyT+j/+1Zfa/EuhAe66ovcI=; b=LugmEbKAyWYEzx9z/aIN++ZmBYXhKF06EnLZ14EfyRCQQPnKdGYSxsv457QZ2E58maVVaR nxgclDgQXthBdat/iK6jMt8XcdPBEgmWKfuui/H+poHZVrCA88PjSzsZD/wvKqn3i2X5qz 5k9zHzqBywjoLHhlOnsJqKOsdtWUQlWwmvx0AKlYA8W/VL2uIjJTUmtF4iobuyfnvokvat T1ERbS69/y0QNo8DJ3AAjS8dzQPNmCePrOXv9vomYGKvq0nSbhO/5StFimwaFe/z9MVX9u G1whNmo2fPFvuxZjqsp2XG90BXFy7dJs87Aw+V51tysrFkXuJRCN9ovha7BeEQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785350701; a=rsa-sha256; cv=none; b=hgHofoU6qEN5AdaeazL+1bWlqvlrOPvcjvYFQBCNLNqI/FVabIw5hX6BU4I83VEOpuz5JC dwN7BK7ZFaiNPtl6BtUFGk7ABgos7En6TS29ucRDrmWEPOsyc9RXXfm2JeB3+0T1qXiJak pcRmfwz/d9wyM3qgYeeA/ZYk6wgqTTtq1EOZS3oaXzxPyRUmQbwuEN0chLqkrGpzKaHfwP PIM3N6CGMUwEvu3Kq729zfGUZwTS7ZhsgxvV88VlYQnDhk0xw8q0E5I7anc31ktLEygeJK XzTT2xOkUuwJFa7xsv2z2cmrKgaoPOo/k3vfGqjeQaxp7EoDIej6BiqlY0hKQQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785350701; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Fuvuc6l2pNZKDVPsdYuckyT+j/+1Zfa/EuhAe66ovcI=; b=G2cR853+Iss8BfTZ0TSvzhjazJCat/wIeSQ2ugL3hxspn9mFhXDWHfryDaEVOpfaNsC59W l3GEIa/HgqTEOf2iaPV092tVd5oNBQ7bgvKOkYGVOVbv9eoALwEwhLh/4CY5EyZIXCEpLk NULkuB9pO/+0zPuo13opa1LYttsJ9vXnjx31qACLWr5hme0RoOGveYyoV19UFWuVbY0ey4 XxR14/CtiMNukpNyvHTqGa6Sg4zGLoAQyNE3KU+MPPt5IOOaxGaUOnppWB0yhAxirF2Rmr PWNDNuueP0phxTR9eHrt3xFD0oSDghHaVumlZRZThTeZjyYt6Y7faRnWetqkMw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h9LqK1J3wzfHF for ; Wed, 29 Jul 2026 18:45:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 40471 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 29 Jul 2026 18:44:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: ea44c37d0bd1 - main - OFED: Add generic function to extract IB speed from netdev List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ea44c37d0bd15e796c85f84b57c211ac220c550c Auto-Submitted: auto-generated Date: Wed, 29 Jul 2026 18:44:55 +0000 Message-Id: <6a6a4a27.40471.422e3907@gitrepo.freebsd.org> The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=ea44c37d0bd15e796c85f84b57c211ac220c550c commit ea44c37d0bd15e796c85f84b57c211ac220c550c Author: John Baldwin AuthorDate: 2026-07-29 18:42:19 +0000 Commit: John Baldwin CommitDate: 2026-07-29 18:42:19 +0000 OFED: Add generic function to extract IB speed from netdev Reviewed by: kib Obtained from: Linux commit d41861942fc55c14b6280d9568a0d0112037f065 Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D57952 --- sys/dev/irdma/fbsd_kcompat.h | 1 - sys/dev/irdma/irdma_kcompat.c | 102 ---------------------------- sys/ofed/drivers/infiniband/core/ib_verbs.c | 48 +++++++++++++ sys/ofed/include/rdma/ib_verbs.h | 2 + 4 files changed, 50 insertions(+), 103 deletions(-) diff --git a/sys/dev/irdma/fbsd_kcompat.h b/sys/dev/irdma/fbsd_kcompat.h index 8050d528a9c0..c5ca18204d49 100644 --- a/sys/dev/irdma/fbsd_kcompat.h +++ b/sys/dev/irdma/fbsd_kcompat.h @@ -147,7 +147,6 @@ void irdma_destroy_ah(struct ib_ah *ibah, u32 flags); void irdma_destroy_ah_stub(struct ib_ah *ibah, u32 flags); int irdma_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata); int irdma_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata); -int ib_get_eth_speed(struct ib_device *dev, u32 port_num, u16 *speed, u8 *width); enum rdma_link_layer irdma_get_link_layer(struct ib_device *ibdev, u8 port_num); int irdma_roce_port_immutable(struct ib_device *ibdev, u8 port_num, diff --git a/sys/dev/irdma/irdma_kcompat.c b/sys/dev/irdma/irdma_kcompat.c index 03ddae317d58..7ee81ab5add6 100644 --- a/sys/dev/irdma/irdma_kcompat.c +++ b/sys/dev/irdma/irdma_kcompat.c @@ -1768,108 +1768,6 @@ kc_set_rdma_uverbs_cmd_mask(struct irdma_device *iwdev) iwdev->ibdev.uverbs_ex_cmd_mask |= BIT_ULL(IB_USER_VERBS_EX_CMD_CREATE_CQ); } -static void -ib_get_width_and_speed(u32 netdev_speed, u32 lanes, - u16 *speed, u8 *width) -{ - if (!lanes) { - if (netdev_speed <= SPEED_1000) { - *width = IB_WIDTH_1X; - *speed = IB_SPEED_SDR; - } else if (netdev_speed <= SPEED_10000) { - *width = IB_WIDTH_1X; - *speed = IB_SPEED_FDR10; - } else if (netdev_speed <= SPEED_20000) { - *width = IB_WIDTH_4X; - *speed = IB_SPEED_DDR; - } else if (netdev_speed <= SPEED_25000) { - *width = IB_WIDTH_1X; - *speed = IB_SPEED_EDR; - } else if (netdev_speed <= SPEED_40000) { - *width = IB_WIDTH_4X; - *speed = IB_SPEED_FDR10; - } else if (netdev_speed <= SPEED_50000) { - *width = IB_WIDTH_2X; - *speed = IB_SPEED_EDR; - } else if (netdev_speed <= SPEED_100000) { - *width = IB_WIDTH_4X; - *speed = IB_SPEED_EDR; - } else if (netdev_speed <= SPEED_200000) { - *width = IB_WIDTH_4X; - *speed = IB_SPEED_HDR; - } else { - *width = IB_WIDTH_4X; - *speed = IB_SPEED_NDR; - } - - return; - } - - switch (lanes) { - case 1: - *width = IB_WIDTH_1X; - break; - case 2: - *width = IB_WIDTH_2X; - break; - case 4: - *width = IB_WIDTH_4X; - break; - case 8: - *width = IB_WIDTH_8X; - break; - case 12: - *width = IB_WIDTH_12X; - break; - default: - *width = IB_WIDTH_1X; - } - - switch (netdev_speed / lanes) { - case SPEED_2500: - *speed = IB_SPEED_SDR; - break; - case SPEED_5000: - *speed = IB_SPEED_DDR; - break; - case SPEED_10000: - *speed = IB_SPEED_FDR10; - break; - case SPEED_14000: - *speed = IB_SPEED_FDR; - break; - case SPEED_25000: - *speed = IB_SPEED_EDR; - break; - case SPEED_50000: - *speed = IB_SPEED_HDR; - break; - case SPEED_100000: - *speed = IB_SPEED_NDR; - break; - default: - *speed = IB_SPEED_SDR; - } -} - -int -ib_get_eth_speed(struct ib_device *ibdev, u32 port_num, u16 *speed, u8 *width) -{ - if_t netdev = ibdev->get_netdev(ibdev, port_num); - u32 netdev_speed, lanes; - - if (!netdev) - return -ENODEV; - - netdev_speed = (u32)if_getbaudrate(netdev); - dev_put(netdev); - lanes = 0; - - ib_get_width_and_speed(netdev_speed, lanes, speed, width); - - return 0; -} - u64 irdma_mac_to_u64(const u8 *eth_add) { diff --git a/sys/ofed/drivers/infiniband/core/ib_verbs.c b/sys/ofed/drivers/infiniband/core/ib_verbs.c index 532bba6325de..35e6ace39a01 100644 --- a/sys/ofed/drivers/infiniband/core/ib_verbs.c +++ b/sys/ofed/drivers/infiniband/core/ib_verbs.c @@ -1698,6 +1698,54 @@ int ib_modify_qp_with_udata(struct ib_qp *ib_qp, struct ib_qp_attr *attr, } EXPORT_SYMBOL(ib_modify_qp_with_udata); +int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u16 *speed, u8 *width) +{ + uint64_t netdev_speed; + if_t netdev; + + if (rdma_port_get_link_layer(dev, port_num) != IB_LINK_LAYER_ETHERNET) + return -EINVAL; + + if (!dev->get_netdev) + return -EOPNOTSUPP; + + netdev = dev->get_netdev(dev, port_num); + if (!netdev) + return -ENODEV; + + netdev_speed = if_getbaudrate(netdev); + + dev_put(netdev); + + if (netdev_speed == 0) { + netdev_speed = IF_Mbps(1000); + if_printf(netdev, "speed is unknown, defaulting to 1Gbps\n"); + } + + if (netdev_speed <= IF_Mbps(1000)) { + *width = IB_WIDTH_1X; + *speed = IB_SPEED_SDR; + } else if (netdev_speed <= IF_Mbps(10000)) { + *width = IB_WIDTH_1X; + *speed = IB_SPEED_FDR10; + } else if (netdev_speed <= IF_Mbps(20000)) { + *width = IB_WIDTH_4X; + *speed = IB_SPEED_DDR; + } else if (netdev_speed <= IF_Mbps(25000)) { + *width = IB_WIDTH_1X; + *speed = IB_SPEED_EDR; + } else if (netdev_speed <= IF_Mbps(40000)) { + *width = IB_WIDTH_4X; + *speed = IB_SPEED_FDR10; + } else { + *width = IB_WIDTH_4X; + *speed = IB_SPEED_EDR; + } + + return 0; +} +EXPORT_SYMBOL(ib_get_eth_speed); + int ib_modify_qp(struct ib_qp *qp, struct ib_qp_attr *qp_attr, int qp_attr_mask) diff --git a/sys/ofed/include/rdma/ib_verbs.h b/sys/ofed/include/rdma/ib_verbs.h index 8ac13023020b..3c81440e782f 100644 --- a/sys/ofed/include/rdma/ib_verbs.h +++ b/sys/ofed/include/rdma/ib_verbs.h @@ -3972,6 +3972,8 @@ struct ib_ucontext *ib_uverbs_get_ucontext_file(struct ib_uverbs_file *ufile); int uverbs_destroy_def_handler(struct uverbs_attr_bundle *attrs); +int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u16 *speed, u8 *width); + static inline u8 *rdma_ah_retrieve_dmac(struct rdma_ah_attr *attr) { if (attr->type == RDMA_AH_ATTR_TYPE_ROCE)