Skip to content

Commit c12f4c6

Browse files
mosheshemesh2kuba-moo
authored andcommitted
net/mlx5: Move fw reset unload to mlx5_fw_reset_complete_reload
Refactor fw reset code to have the unload driver part done on mlx5_fw_reset_complete_reload(), so if it was called by the PF which initiated the reload fw activate flow, the unload part will be handled by the mlx5_devlink_reload_fw_activate() callback itself and not by the reset event work. This will be used by the downstream patch to invoke devlink reload callbacks with devlink lock held. Signed-off-by: Moshe Shemesh <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 2dec18a commit c12f4c6

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

drivers/net/ethernet/mellanox/mlx5/core/devlink.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,16 @@ static int mlx5_devlink_reload_fw_activate(struct devlink *devlink, struct netli
104104
if (err)
105105
return err;
106106

107-
return mlx5_fw_reset_wait_reset_done(dev);
107+
err = mlx5_fw_reset_wait_reset_done(dev);
108+
if (err)
109+
return err;
110+
111+
mlx5_unload_one(dev);
112+
err = mlx5_health_wait_pci_up(dev);
113+
if (err)
114+
NL_SET_ERR_MSG_MOD(extack, "FW activate aborted, PCI reads fail after reset");
115+
116+
return err;
108117
}
109118

110119
static int mlx5_devlink_trigger_fw_live_patch(struct devlink *devlink,

drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ static void mlx5_fw_reset_complete_reload(struct mlx5_core_dev *dev)
149149
if (test_bit(MLX5_FW_RESET_FLAGS_PENDING_COMP, &fw_reset->reset_flags)) {
150150
complete(&fw_reset->done);
151151
} else {
152+
mlx5_unload_one(dev);
153+
if (mlx5_health_wait_pci_up(dev))
154+
mlx5_core_err(dev, "reset reload flow aborted, PCI reads still not working\n");
152155
mlx5_load_one(dev, false);
153156
devlink_remote_reload_actions_performed(priv_to_devlink(dev), 0,
154157
BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT) |
@@ -183,15 +186,9 @@ static void mlx5_sync_reset_reload_work(struct work_struct *work)
183186
struct mlx5_fw_reset *fw_reset = container_of(work, struct mlx5_fw_reset,
184187
reset_reload_work);
185188
struct mlx5_core_dev *dev = fw_reset->dev;
186-
int err;
187189

188190
mlx5_sync_reset_clear_reset_requested(dev, false);
189191
mlx5_enter_error_state(dev, true);
190-
mlx5_unload_one(dev);
191-
err = mlx5_health_wait_pci_up(dev);
192-
if (err)
193-
mlx5_core_err(dev, "reset reload flow aborted, PCI reads still not working\n");
194-
fw_reset->ret = err;
195192
mlx5_fw_reset_complete_reload(dev);
196193
}
197194

@@ -395,7 +392,6 @@ static void mlx5_sync_reset_now_event(struct work_struct *work)
395392
}
396393

397394
mlx5_enter_error_state(dev, true);
398-
mlx5_unload_one(dev);
399395
done:
400396
fw_reset->ret = err;
401397
mlx5_fw_reset_complete_reload(dev);

0 commit comments

Comments
 (0)