[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251218-vf-bw-lag-mode-v1-7-7d8ed4368bea@nvidia.com>
Date: Thu, 18 Dec 2025 17:58:40 +0200
From: Edward Srouji <edwards@...dia.com>
To: <edwards@...dia.com>, Leon Romanovsky <leon@...nel.org>, Saeed Mahameed
<saeedm@...dia.com>, Tariq Toukan <tariqt@...dia.com>, Mark Bloch
<mbloch@...dia.com>, Andrew Lunn <andrew+netdev@...n.ch>, "David S. Miller"
<davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>, Jakub Kicinski
<kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>, Jason Gunthorpe
<jgg@...pe.ca>
CC: <netdev@...r.kernel.org>, <linux-rdma@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, Or Har-Toov <ohartoov@...dia.com>, "Maher
Sanalla" <msanalla@...dia.com>
Subject: [PATCH rdma-next 07/10] IB/core: Refactor rate_show to use ib_port_attr_to_rate()
From: Or Har-Toov <ohartoov@...dia.com>
Update sysfs rate_show() to rely on ib_port_attr_to_speed_info() for
converting IB port speed and width attributes to data rate and speed
string.
Signed-off-by: Or Har-Toov <ohartoov@...dia.com>
Reviewed-by: Maher Sanalla <msanalla@...dia.com>
Reviewed-by: Mark Bloch <mbloch@...dia.com>
Signed-off-by: Edward Srouji <edwards@...dia.com>
---
drivers/infiniband/core/sysfs.c | 56 ++++++-----------------------------------
1 file changed, 8 insertions(+), 48 deletions(-)
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index 0ed862b38b44..bfaca07933d8 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -292,62 +292,22 @@ static ssize_t cap_mask_show(struct ib_device *ibdev, u32 port_num,
static ssize_t rate_show(struct ib_device *ibdev, u32 port_num,
struct ib_port_attribute *unused, char *buf)
{
+ struct ib_port_speed_info speed_info;
struct ib_port_attr attr;
- char *speed = "";
- int rate; /* in deci-Gb/sec */
ssize_t ret;
ret = ib_query_port(ibdev, port_num, &attr);
if (ret)
return ret;
- switch (attr.active_speed) {
- case IB_SPEED_DDR:
- speed = " DDR";
- rate = 50;
- break;
- case IB_SPEED_QDR:
- speed = " QDR";
- rate = 100;
- break;
- case IB_SPEED_FDR10:
- speed = " FDR10";
- rate = 100;
- break;
- case IB_SPEED_FDR:
- speed = " FDR";
- rate = 140;
- break;
- case IB_SPEED_EDR:
- speed = " EDR";
- rate = 250;
- break;
- case IB_SPEED_HDR:
- speed = " HDR";
- rate = 500;
- break;
- case IB_SPEED_NDR:
- speed = " NDR";
- rate = 1000;
- break;
- case IB_SPEED_XDR:
- speed = " XDR";
- rate = 2000;
- break;
- case IB_SPEED_SDR:
- default: /* default to SDR for invalid rates */
- speed = " SDR";
- rate = 25;
- break;
- }
-
- rate *= ib_width_enum_to_int(attr.active_width);
- if (rate < 0)
- return -EINVAL;
+ ret = ib_port_attr_to_speed_info(&attr, &speed_info);
+ if (ret)
+ return ret;
- return sysfs_emit(buf, "%d%s Gb/sec (%dX%s)\n", rate / 10,
- rate % 10 ? ".5" : "",
- ib_width_enum_to_int(attr.active_width), speed);
+ return sysfs_emit(buf, "%d%s Gb/sec (%dX%s)\n", speed_info.rate / 10,
+ speed_info.rate % 10 ? ".5" : "",
+ ib_width_enum_to_int(attr.active_width),
+ speed_info.str);
}
static const char *phys_state_to_str(enum ib_port_phys_state phys_state)
--
2.47.1
Powered by blists - more mailing lists