]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/mlx5: devcom, add DEVCOM_CANT_FAIL for non-rollback events
authorShay Drory <shayd@nvidia.com>
Fri, 12 Jun 2026 11:38:52 +0000 (14:38 +0300)
committerJakub Kicinski <kuba@kernel.org>
Mon, 15 Jun 2026 18:40:49 +0000 (11:40 -0700)
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 <shayd@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20260612113904.537595-4-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h

index 96b4f06d6184750741599511a7ad0bedff2474f7..64f92427602de4db0ca66fd245ca0fae31e4fade 100644 (file)
@@ -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;
+                       }
                }
        }
 
index d5c60c03e55c1488164b68ca99a0211963368f80..7a704fafdbd3a8ffef2accf00bf5584f672a1d45 100644 (file)
@@ -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);