Message ID | 20231221005721.186607-2-saeed@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | a7e7b40c4bc115dbf2a2bb453d7bbb2e0ea99703 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,01/15] net/mlx5e: Use the correct lag ports number when creating TISes | expand |
Hello: This series was applied to netdev/net-next.git (main) by Saeed Mahameed <saeedm@nvidia.com>: On Wed, 20 Dec 2023 16:57:07 -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-next,01/15] net/mlx5e: Use the correct lag ports number when creating TISes https://git.kernel.org/netdev/net-next/c/a7e7b40c4bc1 - [net-next,02/15] net/mlx5: Fix query of sd_group field https://git.kernel.org/netdev/net-next/c/e04984a37398 - [net-next,03/15] net/mlx5: SD, Introduce SD lib https://git.kernel.org/netdev/net-next/c/4a04a31f4932 - [net-next,04/15] net/mlx5: SD, Implement basic query and instantiation https://git.kernel.org/netdev/net-next/c/63b9ce944c0e - [net-next,05/15] net/mlx5: SD, Implement devcom communication and primary election https://git.kernel.org/netdev/net-next/c/a45af9a96740 - [net-next,06/15] net/mlx5: SD, Implement steering for primary and secondaries https://git.kernel.org/netdev/net-next/c/605fcce33b2d - [net-next,07/15] net/mlx5: SD, Add informative prints in kernel log https://git.kernel.org/netdev/net-next/c/c82d36032511 - [net-next,08/15] net/mlx5e: Create single netdev per SD group https://git.kernel.org/netdev/net-next/c/e2578b4f983c - [net-next,09/15] net/mlx5e: Create EN core HW resources for all secondary devices https://git.kernel.org/netdev/net-next/c/c4fb94aa822d - [net-next,10/15] net/mlx5e: Let channels be SD-aware https://git.kernel.org/netdev/net-next/c/e4f9686bdee7 - [net-next,11/15] net/mlx5e: Support cross-vhca RSS https://git.kernel.org/netdev/net-next/c/c73a3ab8fa6e - [net-next,12/15] net/mlx5e: Support per-mdev queue counter https://git.kernel.org/netdev/net-next/c/d72baceb9253 - [net-next,13/15] net/mlx5e: Block TLS device offload on combined SD netdev https://git.kernel.org/netdev/net-next/c/83a59ce0057b - [net-next,14/15] net/mlx5: Enable SD feature https://git.kernel.org/netdev/net-next/c/c88c49ac9c18 - [net-next,15/15] net/mlx5: Implement management PF Ethernet profile https://git.kernel.org/netdev/net-next/c/22c4640698a1 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 7ee5b79ff3d6..aafb36c9e5d9 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;