mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
net/mlx5: E-Switch, move work queue generation counter
The generation counter in mlx5_esw_functions is used to detect stale work items on the E-Switch work queue. Move it from mlx5_esw_functions to the top-level mlx5_eswitch struct so it can guard all work types, not just function-change events. This is a mechanical refactor: no behavioral change. Signed-off-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260428051018.219093-2-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e2d217fe3f
commit
f950ddb57c
|
|
@ -1075,7 +1075,7 @@ static void mlx5_eswitch_event_handler_unregister(struct mlx5_eswitch *esw)
|
|||
if (esw->mode == MLX5_ESWITCH_OFFLOADS &&
|
||||
mlx5_eswitch_is_funcs_handler(esw->dev)) {
|
||||
mlx5_eq_notifier_unregister(esw->dev, &esw->esw_funcs.nb);
|
||||
atomic_inc(&esw->esw_funcs.generation);
|
||||
atomic_inc(&esw->generation);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2072,6 +2072,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
|||
mutex_init(&esw->state_lock);
|
||||
init_rwsem(&esw->mode_lock);
|
||||
refcount_set(&esw->qos.refcnt, 0);
|
||||
atomic_set(&esw->generation, 0);
|
||||
|
||||
esw->enabled_vports = 0;
|
||||
esw->offloads.inline_mode = MLX5_INLINE_MODE_NONE;
|
||||
|
|
|
|||
|
|
@ -340,7 +340,6 @@ struct mlx5_host_work {
|
|||
|
||||
struct mlx5_esw_functions {
|
||||
struct mlx5_nb nb;
|
||||
atomic_t generation;
|
||||
bool host_funcs_disabled;
|
||||
u16 num_vfs;
|
||||
u16 num_ec_vfs;
|
||||
|
|
@ -410,6 +409,7 @@ struct mlx5_eswitch {
|
|||
struct mlx5_devcom_comp_dev *devcom;
|
||||
u16 enabled_ipsec_vf_count;
|
||||
bool eswitch_operation_in_progress;
|
||||
atomic_t generation;
|
||||
};
|
||||
|
||||
void esw_offloads_disable(struct mlx5_eswitch *esw);
|
||||
|
|
|
|||
|
|
@ -3667,7 +3667,7 @@ esw_vfs_changed_event_handler(struct mlx5_eswitch *esw, int work_gen,
|
|||
devl_lock(devlink);
|
||||
|
||||
/* Stale work from one or more mode changes ago. Bail out. */
|
||||
if (work_gen != atomic_read(&esw->esw_funcs.generation))
|
||||
if (work_gen != atomic_read(&esw->generation))
|
||||
goto unlock;
|
||||
|
||||
new_num_vfs = MLX5_GET(query_esw_functions_out, out,
|
||||
|
|
@ -3729,7 +3729,7 @@ int mlx5_esw_funcs_changed_handler(struct notifier_block *nb, unsigned long type
|
|||
esw = container_of(esw_funcs, struct mlx5_eswitch, esw_funcs);
|
||||
|
||||
host_work->esw = esw;
|
||||
host_work->work_gen = atomic_read(&esw_funcs->generation);
|
||||
host_work->work_gen = atomic_read(&esw->generation);
|
||||
|
||||
INIT_WORK(&host_work->work, esw_functions_changed_event_handler);
|
||||
queue_work(esw->work_queue, &host_work->work);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user