Message ID | 20240124081855.115410-2-saeed@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 25461ce8b3d28528f2c55f5e737e99d2906eda83 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,01/14] net/mlx5e: Use the correct lag ports number when creating TISes | expand |
Hello: This series was applied to netdev/net.git (main) by Saeed Mahameed <saeedm@nvidia.com>: On Wed, 24 Jan 2024 00:18:42 -0800 you wrote: > From: Saeed Mahameed <saeedm@nvidia.com> > > The cited commit moved the code of mlx5e_create_tises() and changed the > loop to create TISes over MLX5_MAX_PORTS constant value, instead of > getting the correct lag ports supported by the device, which can cause > FW errors on devices with less than MLX5_MAX_PORTS ports. > > [...] Here is the summary with links: - [net,01/14] net/mlx5e: Use the correct lag ports number when creating TISes https://git.kernel.org/netdev/net/c/25461ce8b3d2 - [net,02/14] net/mlx5: Fix query of sd_group field https://git.kernel.org/netdev/net/c/cfbc3608a8c6 - [net,03/14] net/mlx5e: Fix operation precedence bug in port timestamping napi_poll context https://git.kernel.org/netdev/net/c/3876638b2c7e - [net,04/14] net/mlx5e: Fix inconsistent hairpin RQT sizes https://git.kernel.org/netdev/net/c/c20767fd45e8 - [net,05/14] net/mlx5e: Fix peer flow lists handling https://git.kernel.org/netdev/net/c/d76fdd31f953 - [net,06/14] net/mlx5: Fix a WARN upon a callback command failure https://git.kernel.org/netdev/net/c/cc8091587779 - [net,07/14] net/mlx5: Bridge, fix multicast packets sent to uplink https://git.kernel.org/netdev/net/c/ec7cc38ef9f8 - [net,08/14] net/mlx5: DR, Use the right GVMI number for drop action https://git.kernel.org/netdev/net/c/5665954293f1 - [net,09/14] net/mlx5: DR, Can't go to uplink vport on RX rule https://git.kernel.org/netdev/net/c/5b2a2523eeea - [net,10/14] net/mlx5: Use mlx5 device constant for selecting CQ period mode for ASO https://git.kernel.org/netdev/net/c/20cbf8cbb827 - [net,11/14] net/mlx5e: Allow software parsing when IPsec crypto is enabled https://git.kernel.org/netdev/net/c/20f5468a7988 - [net,12/14] net/mlx5e: Ignore IPsec replay window values on sender side https://git.kernel.org/netdev/net/c/315a597f9bcf - [net,13/14] net/mlx5e: fix a double-free in arfs_create_groups https://git.kernel.org/netdev/net/c/3c6d5189246f - [net,14/14] net/mlx5e: fix a potential double-free in fs_any_create_groups https://git.kernel.org/netdev/net/c/aef855df7e1b You are awesome, thank you!
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index 0bfe1ca8a364..55c6ace0acd5 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -1124,7 +1124,7 @@ static inline bool mlx5_tx_swp_supported(struct mlx5_core_dev *mdev) extern const struct ethtool_ops mlx5e_ethtool_ops; int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn, u32 *mkey); -int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev); +int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises); void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev); int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb, bool enable_mc_lb); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c index 67f546683e85..6ed3a32b7e22 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c @@ -95,7 +95,7 @@ static void mlx5e_destroy_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PO { int tc, i; - for (i = 0; i < MLX5_MAX_PORTS; i++) + for (i = 0; i < mlx5e_get_num_lag_ports(mdev); i++) for (tc = 0; tc < MLX5_MAX_NUM_TC; tc++) mlx5e_destroy_tis(mdev, tisn[i][tc]); } @@ -110,7 +110,7 @@ static int mlx5e_create_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PORT int tc, i; int err; - for (i = 0; i < MLX5_MAX_PORTS; i++) { + for (i = 0; i < mlx5e_get_num_lag_ports(mdev); i++) { for (tc = 0; tc < MLX5_MAX_NUM_TC; tc++) { u32 in[MLX5_ST_SZ_DW(create_tis_in)] = {}; void *tisc; @@ -140,7 +140,7 @@ static int mlx5e_create_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PORT return err; } -int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev) +int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises) { struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs; int err; @@ -169,11 +169,15 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev) goto err_destroy_mkey; } - err = mlx5e_create_tises(mdev, res->tisn); - if (err) { - mlx5_core_err(mdev, "alloc tises failed, %d\n", err); - goto err_destroy_bfreg; + if (create_tises) { + err = mlx5e_create_tises(mdev, res->tisn); + if (err) { + mlx5_core_err(mdev, "alloc tises failed, %d\n", err); + goto err_destroy_bfreg; + } + res->tisn_valid = true; } + INIT_LIST_HEAD(&res->td.tirs_list); mutex_init(&res->td.list_lock); @@ -203,7 +207,8 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev) mlx5_crypto_dek_cleanup(mdev->mlx5e_res.dek_priv); mdev->mlx5e_res.dek_priv = NULL; - mlx5e_destroy_tises(mdev, res->tisn); + if (res->tisn_valid) + mlx5e_destroy_tises(mdev, res->tisn); mlx5_free_bfreg(mdev, &res->bfreg); mlx5_core_destroy_mkey(mdev, res->mkey); mlx5_core_dealloc_transport_domain(mdev, res->td.tdn); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index b5f1c4ca38ba..c8e8f512803e 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5992,7 +5992,7 @@ static int mlx5e_resume(struct auxiliary_device *adev) if (netif_device_present(netdev)) return 0; - err = mlx5e_create_mdev_resources(mdev); + err = mlx5e_create_mdev_resources(mdev, true); if (err) return err; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c index 58845121954c..d77be1b4dd9c 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c @@ -783,7 +783,7 @@ static int mlx5_rdma_setup_rn(struct ib_device *ibdev, u32 port_num, } /* This should only be called once per mdev */ - err = mlx5e_create_mdev_resources(mdev); + err = mlx5e_create_mdev_resources(mdev, false); if (err) goto destroy_ht; } diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h index 8c55ff351e5f..41f03b352401 100644 --- a/include/linux/mlx5/driver.h +++ b/include/linux/mlx5/driver.h @@ -681,6 +681,7 @@ struct mlx5e_resources { struct mlx5_sq_bfreg bfreg; #define MLX5_MAX_NUM_TC 8 u32 tisn[MLX5_MAX_PORTS][MLX5_MAX_NUM_TC]; + bool tisn_valid; } hw_objs; struct net_device *uplink_netdev; struct mutex uplink_netdev_lock;