* [PATCH rdma-next v1 0/3] Print link status when it is changed
@ 2025-02-03 12:48 Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 1/3] IB/cache: Add log messages for IB device state changes Leon Romanovsky
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Leon Romanovsky @ 2025-02-03 12:48 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: Dennis Dalessandro, linux-kernel, linux-rdma, Maher Sanalla
Changelog:
v1:
* Changed print to include port number
* Don't print anything on change state from NOP
v0: https://lore.kernel.org/all/cover.1737290406.git.leon@kernel.org
-----------------------------------------------------------------------
In similar to netdev and hfi1 behavior, add general implementation to
IB/core to print IB port state changes.
"mlx5_core 0000:08:00.0 mlx5_0: Port: 1 Link DOWN"
"mlx5_core 0000:08:00.0 rdmap8s0f0: Port: 2 Link ACTIVE"
Thanks
Maher Sanalla (3):
IB/cache: Add log messages for IB device state changes
RDMA/core: Use ib_port_state_to_str() for IB state sysfs
IB/hfi1: Remove state transition log message and opa_lstate_name()
drivers/infiniband/core/cache.c | 6 ++++++
drivers/infiniband/core/sysfs.c | 14 +-------------
drivers/infiniband/hw/hfi1/chip.c | 18 ------------------
drivers/infiniband/hw/hfi1/chip.h | 1 -
drivers/infiniband/hw/hfi1/driver.c | 2 +-
drivers/infiniband/hw/hfi1/mad.c | 4 ++--
include/rdma/ib_verbs.h | 17 +++++++++++++++++
7 files changed, 27 insertions(+), 35 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH rdma-next v1 1/3] IB/cache: Add log messages for IB device state changes
2025-02-03 12:48 [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
@ 2025-02-03 12:48 ` Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 2/3] RDMA/core: Use ib_port_state_to_str() for IB state sysfs Leon Romanovsky
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Leon Romanovsky @ 2025-02-03 12:48 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: Maher Sanalla, linux-rdma
From: Maher Sanalla <msanalla@nvidia.com>
Enhance visibility into IB device state transitions by adding log messages
to the kernel log (dmesg). Whenever an IB device changes state, a relevant
print will be printed, such as:
"mlx5_core 0000:08:00.0 mlx5_0: Port: 1 Link DOWN"
"mlx5_core 0000:08:00.0 rdmap8s0f0: Port: 2 Link ACTIVE"
Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
drivers/infiniband/core/cache.c | 6 ++++++
include/rdma/ib_verbs.h | 17 +++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index f8413f8a9f26..9979a351577f 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -1501,6 +1501,12 @@ ib_cache_update(struct ib_device *device, u32 port, bool update_gids,
device->port_data[port].cache.pkey = pkey_cache;
}
device->port_data[port].cache.lmc = tprops->lmc;
+
+ if (device->port_data[port].cache.port_state != IB_PORT_NOP &&
+ device->port_data[port].cache.port_state != tprops->state)
+ ibdev_info(device, "Port: %d Link %s\n", port,
+ ib_port_state_to_str(tprops->state));
+
device->port_data[port].cache.port_state = tprops->state;
device->port_data[port].cache.subnet_prefix = tprops->subnet_prefix;
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 0ad104dae253..b59bf30de430 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -519,6 +519,23 @@ enum ib_port_state {
IB_PORT_ACTIVE_DEFER = 5
};
+static inline const char *__attribute_const__
+ib_port_state_to_str(enum ib_port_state state)
+{
+ const char * const states[] = {
+ [IB_PORT_NOP] = "NOP",
+ [IB_PORT_DOWN] = "DOWN",
+ [IB_PORT_INIT] = "INIT",
+ [IB_PORT_ARMED] = "ARMED",
+ [IB_PORT_ACTIVE] = "ACTIVE",
+ [IB_PORT_ACTIVE_DEFER] = "ACTIVE_DEFER",
+ };
+
+ if (state < ARRAY_SIZE(states))
+ return states[state];
+ return "UNKNOWN";
+}
+
enum ib_port_phys_state {
IB_PORT_PHYS_STATE_SLEEP = 1,
IB_PORT_PHYS_STATE_POLLING = 2,
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH rdma-next v1 2/3] RDMA/core: Use ib_port_state_to_str() for IB state sysfs
2025-02-03 12:48 [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 1/3] IB/cache: Add log messages for IB device state changes Leon Romanovsky
@ 2025-02-03 12:48 ` Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 3/3] IB/hfi1: Remove state transition log message and opa_lstate_name() Leon Romanovsky
2025-02-06 8:41 ` [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
3 siblings, 0 replies; 5+ messages in thread
From: Leon Romanovsky @ 2025-02-03 12:48 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: Maher Sanalla, linux-rdma
From: Maher Sanalla <msanalla@nvidia.com>
Refactor the IB state sysfs implementation to replace the local array
used for converting IB state to string with the ib_port_state_to_str()
function.
Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
drivers/infiniband/core/sysfs.c | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index 9f97bef02149..7491328ca5e6 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -216,24 +216,12 @@ static ssize_t state_show(struct ib_device *ibdev, u32 port_num,
struct ib_port_attr attr;
ssize_t ret;
- static const char *state_name[] = {
- [IB_PORT_NOP] = "NOP",
- [IB_PORT_DOWN] = "DOWN",
- [IB_PORT_INIT] = "INIT",
- [IB_PORT_ARMED] = "ARMED",
- [IB_PORT_ACTIVE] = "ACTIVE",
- [IB_PORT_ACTIVE_DEFER] = "ACTIVE_DEFER"
- };
-
ret = ib_query_port(ibdev, port_num, &attr);
if (ret)
return ret;
return sysfs_emit(buf, "%d: %s\n", attr.state,
- attr.state >= 0 &&
- attr.state < ARRAY_SIZE(state_name) ?
- state_name[attr.state] :
- "UNKNOWN");
+ ib_port_state_to_str(attr.state));
}
static ssize_t lid_show(struct ib_device *ibdev, u32 port_num,
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH rdma-next v1 3/3] IB/hfi1: Remove state transition log message and opa_lstate_name()
2025-02-03 12:48 [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 1/3] IB/cache: Add log messages for IB device state changes Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 2/3] RDMA/core: Use ib_port_state_to_str() for IB state sysfs Leon Romanovsky
@ 2025-02-03 12:48 ` Leon Romanovsky
2025-02-06 8:41 ` [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
3 siblings, 0 replies; 5+ messages in thread
From: Leon Romanovsky @ 2025-02-03 12:48 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: Maher Sanalla, Dennis Dalessandro, linux-rdma
From: Maher Sanalla <msanalla@nvidia.com>
Remove the state transition log message from the hfi1 driver, as
the IB core now logs the same information when handling a cache
update event.
While at it, replace the hfi1-specific opa_lstate_name() function with
the ib_verbs equivalent function, ib_port_state_to_str(), for converting
IB port state to a string.
Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
drivers/infiniband/hw/hfi1/chip.c | 18 ------------------
drivers/infiniband/hw/hfi1/chip.h | 1 -
drivers/infiniband/hw/hfi1/driver.c | 2 +-
drivers/infiniband/hw/hfi1/mad.c | 4 ++--
4 files changed, 3 insertions(+), 22 deletions(-)
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
index a442eca498b8..368b6be3226f 100644
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
@@ -12882,22 +12882,6 @@ u32 chip_to_opa_pstate(struct hfi1_devdata *dd, u32 chip_pstate)
}
}
-/* return the OPA port logical state name */
-const char *opa_lstate_name(u32 lstate)
-{
- static const char * const port_logical_names[] = {
- "PORT_NOP",
- "PORT_DOWN",
- "PORT_INIT",
- "PORT_ARMED",
- "PORT_ACTIVE",
- "PORT_ACTIVE_DEFER",
- };
- if (lstate < ARRAY_SIZE(port_logical_names))
- return port_logical_names[lstate];
- return "unknown";
-}
-
/* return the OPA port physical state name */
const char *opa_pstate_name(u32 pstate)
{
@@ -12956,8 +12940,6 @@ static void update_statusp(struct hfi1_pportdata *ppd, u32 state)
break;
}
}
- dd_dev_info(ppd->dd, "logical state changed to %s (0x%x)\n",
- opa_lstate_name(state), state);
}
/**
diff --git a/drivers/infiniband/hw/hfi1/chip.h b/drivers/infiniband/hw/hfi1/chip.h
index 8841db16bde7..6992f6d40255 100644
--- a/drivers/infiniband/hw/hfi1/chip.h
+++ b/drivers/infiniband/hw/hfi1/chip.h
@@ -771,7 +771,6 @@ int is_bx(struct hfi1_devdata *dd);
bool is_urg_masked(struct hfi1_ctxtdata *rcd);
u32 read_physical_state(struct hfi1_devdata *dd);
u32 chip_to_opa_pstate(struct hfi1_devdata *dd, u32 chip_pstate);
-const char *opa_lstate_name(u32 lstate);
const char *opa_pstate_name(u32 pstate);
u32 driver_pstate(struct hfi1_pportdata *ppd);
u32 driver_lstate(struct hfi1_pportdata *ppd);
diff --git a/drivers/infiniband/hw/hfi1/driver.c b/drivers/infiniband/hw/hfi1/driver.c
index 37a6794885d3..50826e7cdb7e 100644
--- a/drivers/infiniband/hw/hfi1/driver.c
+++ b/drivers/infiniband/hw/hfi1/driver.c
@@ -968,7 +968,7 @@ static bool __set_armed_to_active(struct hfi1_packet *packet)
if (hwstate != IB_PORT_ACTIVE) {
dd_dev_info(packet->rcd->dd,
"Unexpected link state %s\n",
- opa_lstate_name(hwstate));
+ ib_port_state_to_str(hwstate));
return false;
}
diff --git a/drivers/infiniband/hw/hfi1/mad.c b/drivers/infiniband/hw/hfi1/mad.c
index a9883295f4af..b39f63ce6dfc 100644
--- a/drivers/infiniband/hw/hfi1/mad.c
+++ b/drivers/infiniband/hw/hfi1/mad.c
@@ -1160,8 +1160,8 @@ static int port_states_transition_allowed(struct hfi1_pportdata *ppd,
if (ret == HFI_TRANSITION_DISALLOWED ||
ret == HFI_TRANSITION_UNDEFINED) {
pr_warn("invalid logical state transition %s -> %s\n",
- opa_lstate_name(logical_old),
- opa_lstate_name(logical_new));
+ ib_port_state_to_str(logical_old),
+ ib_port_state_to_str(logical_new));
return ret;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH rdma-next v1 0/3] Print link status when it is changed
2025-02-03 12:48 [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
` (2 preceding siblings ...)
2025-02-03 12:48 ` [PATCH rdma-next v1 3/3] IB/hfi1: Remove state transition log message and opa_lstate_name() Leon Romanovsky
@ 2025-02-06 8:41 ` Leon Romanovsky
3 siblings, 0 replies; 5+ messages in thread
From: Leon Romanovsky @ 2025-02-06 8:41 UTC (permalink / raw)
To: Jason Gunthorpe, Leon Romanovsky
Cc: Dennis Dalessandro, linux-kernel, linux-rdma, Maher Sanalla
On Mon, 03 Feb 2025 14:48:03 +0200, Leon Romanovsky wrote:
> Changelog:
> v1:
> * Changed print to include port number
> * Don't print anything on change state from NOP
> v0: https://lore.kernel.org/all/cover.1737290406.git.leon@kernel.org
> -----------------------------------------------------------------------
>
> [...]
Applied, thanks!
[1/3] IB/cache: Add log messages for IB device state changes
https://git.kernel.org/rdma/rdma/c/5459f6523c1f1a
[2/3] RDMA/core: Use ib_port_state_to_str() for IB state sysfs
https://git.kernel.org/rdma/rdma/c/1fd119c6db838d
[3/3] IB/hfi1: Remove state transition log message and opa_lstate_name()
https://git.kernel.org/rdma/rdma/c/d9d9434a3fee5c
Best regards,
--
Leon Romanovsky <leon@kernel.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-02-06 8:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-03 12:48 [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 1/3] IB/cache: Add log messages for IB device state changes Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 2/3] RDMA/core: Use ib_port_state_to_str() for IB state sysfs Leon Romanovsky
2025-02-03 12:48 ` [PATCH rdma-next v1 3/3] IB/hfi1: Remove state transition log message and opa_lstate_name() Leon Romanovsky
2025-02-06 8:41 ` [PATCH rdma-next v1 0/3] Print link status when it is changed Leon Romanovsky
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.