From: Shay Drory Date: Fri, 12 Jun 2026 11:38:52 +0000 (+0300) Subject: net/mlx5: devcom, add DEVCOM_CANT_FAIL for non-rollback events X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5e77e4d3023c4d986d2aa5260c5212d8cc3027d;p=thirdparty%2Fkernel%2Flinux.git net/mlx5: devcom, add DEVCOM_CANT_FAIL for non-rollback events Some devcom events are not expected to fail. Rather than attempting a rollback that may not be meaningful, allow callers to pass DEVCOM_CANT_FAIL as the rollback_event to indicate that the event handler should not fail. If it does, emit a warning and stop propagating to further peers, but skip the rollback path. Signed-off-by: Shay Drory Reviewed-by: Mark Bloch Signed-off-by: Tariq Toukan Link: https://patch.msgid.link/20260612113904.537595-4-tariqt@nvidia.com Signed-off-by: Jakub Kicinski --- diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c index 96b4f06d61847..64f92427602de 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c @@ -306,8 +306,13 @@ int mlx5_devcom_locked_send_event(struct mlx5_devcom_comp_dev *devcom, if (pos != devcom && data) { err = comp->handler(event, data, event_data); - if (err) + if (err && rollback_event != DEVCOM_CANT_FAIL) { goto rollback; + } else if (err && rollback_event == DEVCOM_CANT_FAIL) { + WARN_ONCE(1, "devcom component %d event %d failed: %d\n", + comp->id, event, err); + return err; + } } } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h index d5c60c03e55c1..7a704fafdbd3a 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h @@ -46,6 +46,8 @@ mlx5_devcom_register_component(struct mlx5_devcom_dev *devc, void *data); void mlx5_devcom_unregister_component(struct mlx5_devcom_comp_dev *devcom); +#define DEVCOM_CANT_FAIL (INT_MAX) + int mlx5_devcom_locked_send_event(struct mlx5_devcom_comp_dev *devcom, int event, int rollback_event, void *event_data);