net/mlx5: E-switch, store eswitch pointer before registering devlink_param
Next patch will move devlink register to be first. Therefore, whenever mlx5 will register a param, the user will be notified. In order to notify the user, devlink is using the get() callback of the param. Hence, resources that are being used by the get() callback must be set before the devlink param is registered. Therefore, store eswitch pointer inside mdev before registering the param. Signed-off-by: Shay Drory <shayd@nvidia.com> Reviewed-by: Moshe Shemesh <moshe@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://lore.kernel.org/r/20240409190820.227554-2-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
65acf6e050
commit
0553e753ea
2 changed files with 7 additions and 6 deletions
|
@ -1868,6 +1868,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
|||
if (err)
|
||||
goto abort;
|
||||
|
||||
dev->priv.eswitch = esw;
|
||||
err = esw_offloads_init(esw);
|
||||
if (err)
|
||||
goto reps_err;
|
||||
|
@ -1892,11 +1893,6 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
|||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_BASIC;
|
||||
else
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_NONE;
|
||||
if (MLX5_ESWITCH_MANAGER(dev) &&
|
||||
mlx5_esw_vport_match_metadata_supported(esw))
|
||||
esw->flags |= MLX5_ESWITCH_VPORT_MATCH_METADATA;
|
||||
|
||||
dev->priv.eswitch = esw;
|
||||
BLOCKING_INIT_NOTIFIER_HEAD(&esw->n_head);
|
||||
|
||||
esw_info(dev,
|
||||
|
@ -1908,6 +1904,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
|||
|
||||
reps_err:
|
||||
mlx5_esw_vports_cleanup(esw);
|
||||
dev->priv.eswitch = NULL;
|
||||
abort:
|
||||
if (esw->work_queue)
|
||||
destroy_workqueue(esw->work_queue);
|
||||
|
@ -1926,7 +1923,6 @@ void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)
|
|||
|
||||
esw_info(esw->dev, "cleanup\n");
|
||||
|
||||
esw->dev->priv.eswitch = NULL;
|
||||
destroy_workqueue(esw->work_queue);
|
||||
WARN_ON(refcount_read(&esw->qos.refcnt));
|
||||
mutex_destroy(&esw->state_lock);
|
||||
|
@ -1937,6 +1933,7 @@ void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)
|
|||
mutex_destroy(&esw->offloads.encap_tbl_lock);
|
||||
mutex_destroy(&esw->offloads.decap_tbl_lock);
|
||||
esw_offloads_cleanup(esw);
|
||||
esw->dev->priv.eswitch = NULL;
|
||||
mlx5_esw_vports_cleanup(esw);
|
||||
debugfs_remove_recursive(esw->debugfs_root);
|
||||
devl_params_unregister(priv_to_devlink(esw->dev), mlx5_eswitch_params,
|
||||
|
|
|
@ -2476,6 +2476,10 @@ int esw_offloads_init(struct mlx5_eswitch *esw)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (MLX5_ESWITCH_MANAGER(esw->dev) &&
|
||||
mlx5_esw_vport_match_metadata_supported(esw))
|
||||
esw->flags |= MLX5_ESWITCH_VPORT_MATCH_METADATA;
|
||||
|
||||
err = devl_params_register(priv_to_devlink(esw->dev),
|
||||
esw_devlink_params,
|
||||
ARRAY_SIZE(esw_devlink_params));
|
||||
|
|
Loading…
Add table
Reference in a new issue