summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
diff options
context:
space:
mode:
authorMaxim Mikityanskiy <maximmi@nvidia.com>2021-04-09 19:01:51 +0300
committerSaeed Mahameed <saeedm@nvidia.com>2021-08-02 19:26:24 -0700
commit43ec0f41fa73cc4d4f8a67e56fb398eff6881841 (patch)
treed97a0e7c8271d17f3bedf2493c7210c8c9ceea81 /drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
parente6e01b5fdc281ea5819b21c48c813bcb156d3735 (diff)
net/mlx5e: Hide all implementation details of mlx5e_rx_res
This commit moves all implementation details of struct mlx5e_rx_res under en/rx_res.c. All access to RX resources is now done using methods. Encapsulating RX resources into an object allows for better manageability, because all the implementation details are now in a single place, and external code can use only a limited set of API methods to init/teardown the whole thing, reconfigure RSS and LRO parameters, connect TIRs to flow steering and activate/deactivate TIRs. mlx5e_rx_res is self-contained and doesn't depend on struct mlx5e_priv or include en.h. Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c69
1 files changed, 8 insertions, 61 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
index 9264d18b0964..2cf59bb5f898 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
@@ -1172,7 +1172,7 @@ static int mlx5e_set_link_ksettings(struct net_device *netdev,
u32 mlx5e_ethtool_get_rxfh_key_size(struct mlx5e_priv *priv)
{
- return sizeof(priv->rx_res->rss_params.hash.toeplitz_hash_key);
+ return sizeof_field(struct mlx5e_rss_params_hash, toeplitz_hash_key);
}
static u32 mlx5e_get_rxfh_key_size(struct net_device *netdev)
@@ -1198,18 +1198,10 @@ int mlx5e_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
u8 *hfunc)
{
struct mlx5e_priv *priv = netdev_priv(netdev);
- struct mlx5e_rss_params *rss;
- rss = &priv->rx_res->rss_params;
-
- if (indir)
- memcpy(indir, rss->indir.table, sizeof(rss->indir.table));
-
- if (key)
- memcpy(key, rss->hash.toeplitz_hash_key, sizeof(rss->hash.toeplitz_hash_key));
-
- if (hfunc)
- *hfunc = rss->hash.hfunc;
+ mutex_lock(&priv->state_lock);
+ mlx5e_rx_res_rss_get_rxfh(priv->rx_res, indir, key, hfunc);
+ mutex_unlock(&priv->state_lock);
return 0;
}
@@ -1218,58 +1210,13 @@ int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
const u8 *key, const u8 hfunc)
{
struct mlx5e_priv *priv = netdev_priv(dev);
- struct mlx5e_rss_params *rss;
- bool refresh_tirs = false;
- bool refresh_rqt = false;
-
- if ((hfunc != ETH_RSS_HASH_NO_CHANGE) &&
- (hfunc != ETH_RSS_HASH_XOR) &&
- (hfunc != ETH_RSS_HASH_TOP))
- return -EINVAL;
+ int err;
mutex_lock(&priv->state_lock);
-
- rss = &priv->rx_res->rss_params;
-
- if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != rss->hash.hfunc) {
- rss->hash.hfunc = hfunc;
- refresh_rqt = true;
- refresh_tirs = true;
- }
-
- if (indir) {
- memcpy(rss->indir.table, indir, sizeof(rss->indir.table));
- refresh_rqt = true;
- }
-
- if (key) {
- memcpy(rss->hash.toeplitz_hash_key, key, sizeof(rss->hash.toeplitz_hash_key));
- refresh_tirs = refresh_tirs || rss->hash.hfunc == ETH_RSS_HASH_TOP;
- }
-
- if (refresh_rqt && test_bit(MLX5E_STATE_OPENED, &priv->state)) {
- u32 *rqns;
-
- rqns = kvmalloc_array(priv->channels.num, sizeof(*rqns), GFP_KERNEL);
- if (rqns) {
- unsigned int ix;
-
- for (ix = 0; ix < priv->channels.num; ix++)
- rqns[ix] = priv->channels.c[ix]->rq.rqn;
-
- mlx5e_rqt_redirect_indir(&priv->rx_res->indir_rqt, rqns,
- priv->channels.num,
- rss->hash.hfunc, &rss->indir);
- kvfree(rqns);
- }
- }
-
- if (refresh_tirs)
- mlx5e_modify_tirs_hash(priv);
-
+ err = mlx5e_rx_res_rss_set_rxfh(priv->rx_res, indir, key,
+ hfunc == ETH_RSS_HASH_NO_CHANGE ? NULL : &hfunc);
mutex_unlock(&priv->state_lock);
-
- return 0;
+ return err;
}
#define MLX5E_PFC_PREVEN_AUTO_TOUT_MSEC 100