Commit ee357240 authored by Carolina Jubran's avatar Carolina Jubran Committed by Jakub Kicinski
Browse files

net/mlx5e: RSS, Block changing channels number when RXFH is configured



Changing the channels number after configuring the receive flow hash
indirection table may affect the RSS table size. The previous
configuration may no longer be compatible with the new receive flow
hash indirection table.

Block changing the channels number when RXFH is configured and changing
the channels number requires resizing the RSS table size.

Fixes: 74a8dada ("net/mlx5e: Preparations for supporting larger number of channels")
Signed-off-by: default avatarCarolina Jubran <cjubran@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Link: https://lore.kernel.org/r/20240409190820.227554-7-tariqt@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 9eca93f4
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -451,6 +451,23 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,

	mutex_lock(&priv->state_lock);

	/* If RXFH is configured, changing the channels number is allowed only if
	 * it does not require resizing the RSS table. This is because the previous
	 * configuration may no longer be compatible with the new RSS table.
	 */
	if (netif_is_rxfh_configured(priv->netdev)) {
		int cur_rqt_size = mlx5e_rqt_size(priv->mdev, cur_params->num_channels);
		int new_rqt_size = mlx5e_rqt_size(priv->mdev, count);

		if (new_rqt_size != cur_rqt_size) {
			err = -EINVAL;
			netdev_err(priv->netdev,
				   "%s: RXFH is configured, block changing channels number that affects RSS table size (new: %d, current: %d)\n",
				   __func__, new_rqt_size, cur_rqt_size);
			goto out;
		}
	}

	/* Don't allow changing the number of channels if HTB offload is active,
	 * because the numeration of the QoS SQs will change, while per-queue
	 * qdiscs are attached.