net/mlx5: E-switch, store eswitch pointer before registering devlink_param
[ Upstream commit 0553e753ea9ee724acaf6b3dfc7354702af83567 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
00cf046afe
commit
388a7302be
@ -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…
x
Reference in New Issue
Block a user