826eb0ff89
but allow discarding BTF information when loading modules, so that upgrades which are otherwise ABI compatible still work. this allows using BTF information when matching and available, while degrading gracefully if the currently running kernel is not identical to the one that module was built for. in case of a mismatch, the kernel will log a warning when loading the module, for example: Jan 30 13:57:58 test kernel: BPF: type_id=184 bits_offset=4096 Jan 30 13:57:58 test kernel: BPF: Jan 30 13:57:58 test kernel: BPF: Invalid name Jan 30 13:57:58 test kernel: BPF: Jan 30 13:57:58 test kernel: failed to validate module [bonding] BTF: -22 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
73 lines
2.4 KiB
Diff
73 lines
2.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
Date: Sat, 7 Jan 2023 13:48:41 +0100
|
|
Subject: [PATCH] Revert "RDMA/irdma: Report the correct link speed"
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
seem to cause a regression with some NICs:
|
|
https://lore.kernel.org/netdev/CAK8fFZ6A_Gphw_3-QMGKEFQk=sfCw1Qmq0TVZK3rtAi7vb621A@mail.gmail.com/
|
|
|
|
This reverts commit e8553504e366c8a47d1f6156c30d6eb9778cda13.
|
|
|
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
drivers/infiniband/hw/irdma/verbs.c | 35 ++++++++++++++++++++++++++---
|
|
1 file changed, 32 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c
|
|
index f6973ea55eda..132fe91bb799 100644
|
|
--- a/drivers/infiniband/hw/irdma/verbs.c
|
|
+++ b/drivers/infiniband/hw/irdma/verbs.c
|
|
@@ -63,6 +63,36 @@ static int irdma_query_device(struct ib_device *ibdev,
|
|
return 0;
|
|
}
|
|
|
|
+/**
|
|
+ * irdma_get_eth_speed_and_width - Get IB port speed and width from netdev speed
|
|
+ * @link_speed: netdev phy link speed
|
|
+ * @active_speed: IB port speed
|
|
+ * @active_width: IB port width
|
|
+ */
|
|
+static void irdma_get_eth_speed_and_width(u32 link_speed, u16 *active_speed,
|
|
+ u8 *active_width)
|
|
+{
|
|
+ if (link_speed <= SPEED_1000) {
|
|
+ *active_width = IB_WIDTH_1X;
|
|
+ *active_speed = IB_SPEED_SDR;
|
|
+ } else if (link_speed <= SPEED_10000) {
|
|
+ *active_width = IB_WIDTH_1X;
|
|
+ *active_speed = IB_SPEED_FDR10;
|
|
+ } else if (link_speed <= SPEED_20000) {
|
|
+ *active_width = IB_WIDTH_4X;
|
|
+ *active_speed = IB_SPEED_DDR;
|
|
+ } else if (link_speed <= SPEED_25000) {
|
|
+ *active_width = IB_WIDTH_1X;
|
|
+ *active_speed = IB_SPEED_EDR;
|
|
+ } else if (link_speed <= SPEED_40000) {
|
|
+ *active_width = IB_WIDTH_4X;
|
|
+ *active_speed = IB_SPEED_FDR10;
|
|
+ } else {
|
|
+ *active_width = IB_WIDTH_4X;
|
|
+ *active_speed = IB_SPEED_EDR;
|
|
+ }
|
|
+}
|
|
+
|
|
/**
|
|
* irdma_query_port - get port attributes
|
|
* @ibdev: device pointer from stack
|
|
@@ -90,9 +120,8 @@ static int irdma_query_port(struct ib_device *ibdev, u32 port,
|
|
props->state = IB_PORT_DOWN;
|
|
props->phys_state = IB_PORT_PHYS_STATE_DISABLED;
|
|
}
|
|
-
|
|
- ib_get_eth_speed(ibdev, port, &props->active_speed,
|
|
- &props->active_width);
|
|
+ irdma_get_eth_speed_and_width(SPEED_100000, &props->active_speed,
|
|
+ &props->active_width);
|
|
|
|
if (rdma_protocol_roce(ibdev, 1)) {
|
|
props->gid_tbl_len = 32;
|