From: Sasha Levin Date: Mon, 22 Apr 2024 23:10:06 +0000 (-0400) Subject: Fixes for 6.8 X-Git-Tag: v5.15.157~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=122ea3f6ee99f9dc9cdf41e537080867dd4dc8cf;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.8 Signed-off-by: Sasha Levin --- diff --git a/queue-6.8/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch b/queue-6.8/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch new file mode 100644 index 00000000000..a432d96ff77 --- /dev/null +++ b/queue-6.8/net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch @@ -0,0 +1,97 @@ +From e83578f2929462633d94b014970f0859a622cc3b 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.8/series b/queue-6.8/series index ffbaaaa1f9f..8c191b14c51 100644 --- a/queue-6.8/series +++ b/queue-6.8/series @@ -83,3 +83,4 @@ selftests-powerpc-papr-vpd-fix-missing-variable-init.patch x86-bugs-fix-bhi-retpoline-check.patch x86-cpufeatures-fix-dependencies-for-gfni-vaes-and-v.patch block-propagate-partition-scanning-errors-to-the-blk.patch +net-mlx5-e-switch-store-eswitch-pointer-before-regis.patch