From 2d3cf73cbc05d5d8c929d37db6a81da6f7242c55 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Mon, 22 Apr 2024 19:10:07 -0400 Subject: [PATCH] Fixes for 6.6 Signed-off-by: Sasha Levin --- ...h-store-eswitch-pointer-before-regis.patch | 97 +++++++++++++++++++ queue-6.6/series | 1 + 2 files changed, 98 insertions(+) create mode 100644 queue-6.6/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch diff --git a/queue-6.6/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch b/queue-6.6/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch new file mode 100644 index 00000000000..b2cbd246be7 --- /dev/null +++ b/queue-6.6/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch @@ -0,0 +1,97 @@ +From 142bb9c41aaafdf33e1c71b215dd398016d378fa Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 9 Apr 2024 22:08:09 +0300 +Subject: net/mlx5: E-switch, store eswitch pointer before registering + devlink_param + +From: Shay Drory + +[ 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 +Reviewed-by: Moshe Shemesh +Signed-off-by: Saeed Mahameed +Signed-off-by: Tariq Toukan +Link: https://lore.kernel.org/r/20240409190820.227554-2-tariqt@nvidia.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 9 +++------ + .../net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 4 ++++ + 2 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +index 3047d7015c525..1789800faaeb6 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +@@ -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, +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +index baaae628b0a0f..e3cce110e52fd 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +@@ -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)); +-- +2.43.0 + diff --git a/queue-6.6/series b/queue-6.6/series index 6f572a6e997..884762f16ab 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -94,3 +94,4 @@ clk-get-runtime-pm-before-walking-tree-for-clk_summa.patch clk-mediatek-do-a-runtime-pm-get-on-controllers-duri.patch x86-bugs-fix-bhi-retpoline-check.patch x86-cpufeatures-fix-dependencies-for-gfni-vaes-and-v.patch +net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch -- 2.47.2