]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net/mlx5e: xsk: Use queue indices starting from 0 for XSK queues
authorMaxim Mikityanskiy <maximmi@nvidia.com>
Fri, 30 Sep 2022 16:29:03 +0000 (09:29 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 1 Oct 2022 20:30:21 +0000 (13:30 -0700)
In the initial implementation of XSK in mlx5e, XSK RQs coexisted with
regular RQs in the same channel. The main idea was to allow RSS work the
same for regular traffic, without need to reconfigure RSS to exclude XSK
queues.

However, this scheme didn't prove to be beneficial, mainly because of
incompatibility with other vendors. Some tools don't properly support
using higher indices for XSK queues, some tools get confused with the
double amount of RQs exposed in sysfs. Some use cases are purely XSK,
and allocating the same amount of unused regular RQs is a waste of
resources.

This commit changes the queuing scheme to the standard one, where XSK
RQs replace regular RQs on the channels where XSK sockets are open. Two
RQs still exist in the channel to allow failsafe disable of XSK, but
only one is exposed at a time. The next commit will achieve the desired
memory save by flushing the buffers when the regular RQ is unused.

As the result of this transition:

1. It's possible to use RSS contexts over XSK RQs.

2. It's possible to dedicate all queues to XSK.

3. When XSK RQs coexist with regular RQs, the admin should make sure no
unwanted traffic goes into XSK RQs by either excluding them from RSS or
settings up the XDP program to return XDP_PASS for non-XSK traffic.

4. When using a mixed fleet of mlx5e devices and other netdevs, the same
configuration can be applied. If the application supports the fallback
to copy mode on unsupported drivers, it will work too.

Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
14 files changed:
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en/channels.c
drivers/net/ethernet/mellanox/mlx5/core/en/channels.h
drivers/net/ethernet/mellanox/mlx5/core/en/params.h
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/tx.c
drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c

index 238307390400c63cf5f7ba7cd2fd34cde14717bb..6bc6472b98f2850f66d3c7535d3a51bd791521b1 100644 (file)
@@ -181,12 +181,6 @@ do {                                                            \
 #define mlx5e_state_dereference(priv, p) \
        rcu_dereference_protected((p), lockdep_is_held(&(priv)->state_lock))
 
-enum mlx5e_rq_group {
-       MLX5E_RQ_GROUP_REGULAR,
-       MLX5E_RQ_GROUP_XSK,
-#define MLX5E_NUM_RQ_GROUPS(g) (1 + MLX5E_RQ_GROUP_##g)
-};
-
 static inline u8 mlx5e_get_num_lag_ports(struct mlx5_core_dev *mdev)
 {
        if (mlx5_lag_is_lacp_owner(mdev))
@@ -1005,7 +999,6 @@ struct mlx5e_profile {
        mlx5e_stats_grp_t *stats_grps;
        const struct mlx5e_rx_handlers *rx_handlers;
        int     max_tc;
-       u8      rq_groups;
        u32     features;
 };
 
index e7c14c0de0a7e3da3a9ae91fb0467f1f84675aac..48581ea3adcb8e33430a22323f90551a0e4763a7 100644 (file)
@@ -10,28 +10,33 @@ unsigned int mlx5e_channels_get_num(struct mlx5e_channels *chs)
        return chs->num;
 }
 
-void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn)
+static struct mlx5e_channel *mlx5e_channels_get(struct mlx5e_channels *chs, unsigned int ix)
 {
-       struct mlx5e_channel *c;
+       WARN_ON_ONCE(ix >= mlx5e_channels_get_num(chs));
+       return chs->c[ix];
+}
 
-       WARN_ON(ix >= mlx5e_channels_get_num(chs));
-       c = chs->c[ix];
+bool mlx5e_channels_is_xsk(struct mlx5e_channels *chs, unsigned int ix)
+{
+       struct mlx5e_channel *c = mlx5e_channels_get(chs, ix);
 
-       *rqn = c->rq.rqn;
+       return test_bit(MLX5E_CHANNEL_STATE_XSK, c->state);
 }
 
-bool mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn)
+void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn)
 {
-       struct mlx5e_channel *c;
+       struct mlx5e_channel *c = mlx5e_channels_get(chs, ix);
 
-       WARN_ON(ix >= mlx5e_channels_get_num(chs));
-       c = chs->c[ix];
+       *rqn = c->rq.rqn;
+}
 
-       if (!test_bit(MLX5E_CHANNEL_STATE_XSK, c->state))
-               return false;
+void mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn)
+{
+       struct mlx5e_channel *c = mlx5e_channels_get(chs, ix);
+
+       WARN_ON_ONCE(!test_bit(MLX5E_CHANNEL_STATE_XSK, c->state));
 
        *rqn = c->xskrq.rqn;
-       return true;
 }
 
 bool mlx5e_channels_get_ptp_rqn(struct mlx5e_channels *chs, u32 *rqn)
index ca00cbc827cbfd4f81c441fbf505b3df6aa2b3de..637ca90daaa81e5a88fce08741c6cc459b5d8f31 100644 (file)
@@ -9,8 +9,9 @@
 struct mlx5e_channels;
 
 unsigned int mlx5e_channels_get_num(struct mlx5e_channels *chs);
+bool mlx5e_channels_is_xsk(struct mlx5e_channels *chs, unsigned int ix);
 void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn);
-bool mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn);
+void mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn);
 bool mlx5e_channels_get_ptp_rqn(struct mlx5e_channels *chs, u32 *rqn);
 
 #endif /* __MLX5_EN_CHANNELS_H__ */
index cb862c478376254e1c6ed3d8832f2350e182f35c..a3952afdcbe46dc753d02eeded2ede891cf31040 100644 (file)
@@ -53,38 +53,6 @@ struct mlx5e_create_sq_param {
        u8                          min_inline_mode;
 };
 
-static inline bool mlx5e_qid_get_ch_if_in_group(struct mlx5e_params *params,
-                                               u16 qid,
-                                               enum mlx5e_rq_group group,
-                                               u16 *ix)
-{
-       int nch = params->num_channels;
-       int ch = qid - nch * group;
-
-       if (ch < 0 || ch >= nch)
-               return false;
-
-       *ix = ch;
-       return true;
-}
-
-static inline void mlx5e_qid_get_ch_and_group(struct mlx5e_params *params,
-                                             u16 qid,
-                                             u16 *ix,
-                                             enum mlx5e_rq_group *group)
-{
-       u16 nch = params->num_channels;
-
-       *ix = qid % nch;
-       *group = qid / nch;
-}
-
-static inline bool mlx5e_qid_validate(const struct mlx5e_profile *profile,
-                                     struct mlx5e_params *params, u64 qid)
-{
-       return qid < params->num_channels * profile->rq_groups;
-}
-
 /* Striding RQ dynamic parameters */
 
 u8 mlx5e_mpwrq_page_shift(struct mlx5_core_dev *mdev, struct mlx5e_xsk_param *xsk);
index 3436ecfcbc2f64ad66b6e187f99a6ec1119553e6..e1095bc36543659ef0175946a5fa321c4d9c60ec 100644 (file)
@@ -24,8 +24,6 @@ struct mlx5e_rx_res {
        struct {
                struct mlx5e_rqt direct_rqt;
                struct mlx5e_tir direct_tir;
-               struct mlx5e_rqt xsk_rqt;
-               struct mlx5e_tir xsk_tir;
        } *channels;
 
        struct {
@@ -320,48 +318,8 @@ static int mlx5e_rx_res_channels_init(struct mlx5e_rx_res *res)
                mlx5e_tir_builder_clear(builder);
        }
 
-       if (!(res->features & MLX5E_RX_RES_FEATURE_XSK))
-               goto out;
-
-       for (ix = 0; ix < res->max_nch; ix++) {
-               err = mlx5e_rqt_init_direct(&res->channels[ix].xsk_rqt,
-                                           res->mdev, false, res->drop_rqn);
-               if (err) {
-                       mlx5_core_warn(res->mdev, "Failed to create an XSK RQT: err = %d, ix = %u\n",
-                                      err, ix);
-                       goto err_destroy_xsk_rqts;
-               }
-       }
-
-       for (ix = 0; ix < res->max_nch; ix++) {
-               mlx5e_tir_builder_build_rqt(builder, res->mdev->mlx5e_res.hw_objs.td.tdn,
-                                           mlx5e_rqt_get_rqtn(&res->channels[ix].xsk_rqt),
-                                           inner_ft_support);
-               mlx5e_tir_builder_build_packet_merge(builder, &res->pkt_merge_param);
-               mlx5e_tir_builder_build_direct(builder);
-
-               err = mlx5e_tir_init(&res->channels[ix].xsk_tir, builder, res->mdev, true);
-               if (err) {
-                       mlx5_core_warn(res->mdev, "Failed to create an XSK TIR: err = %d, ix = %u\n",
-                                      err, ix);
-                       goto err_destroy_xsk_tirs;
-               }
-
-               mlx5e_tir_builder_clear(builder);
-       }
-
        goto out;
 
-err_destroy_xsk_tirs:
-       while (--ix >= 0)
-               mlx5e_tir_destroy(&res->channels[ix].xsk_tir);
-
-       ix = res->max_nch;
-err_destroy_xsk_rqts:
-       while (--ix >= 0)
-               mlx5e_rqt_destroy(&res->channels[ix].xsk_rqt);
-
-       ix = res->max_nch;
 err_destroy_direct_tirs:
        while (--ix >= 0)
                mlx5e_tir_destroy(&res->channels[ix].direct_tir);
@@ -420,12 +378,6 @@ static void mlx5e_rx_res_channels_destroy(struct mlx5e_rx_res *res)
        for (ix = 0; ix < res->max_nch; ix++) {
                mlx5e_tir_destroy(&res->channels[ix].direct_tir);
                mlx5e_rqt_destroy(&res->channels[ix].direct_rqt);
-
-               if (!(res->features & MLX5E_RX_RES_FEATURE_XSK))
-                       continue;
-
-               mlx5e_tir_destroy(&res->channels[ix].xsk_tir);
-               mlx5e_rqt_destroy(&res->channels[ix].xsk_rqt);
        }
 
        kvfree(res->channels);
@@ -491,13 +443,6 @@ u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix)
        return mlx5e_tir_get_tirn(&res->channels[ix].direct_tir);
 }
 
-u32 mlx5e_rx_res_get_tirn_xsk(struct mlx5e_rx_res *res, unsigned int ix)
-{
-       WARN_ON(!(res->features & MLX5E_RX_RES_FEATURE_XSK));
-
-       return mlx5e_tir_get_tirn(&res->channels[ix].xsk_tir);
-}
-
 u32 mlx5e_rx_res_get_tirn_rss(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt)
 {
        struct mlx5e_rss *rss = res->rss[0];
@@ -527,26 +472,14 @@ static void mlx5e_rx_res_channel_activate_direct(struct mlx5e_rx_res *res,
                                                 struct mlx5e_channels *chs,
                                                 unsigned int ix)
 {
-       u32 rqn;
+       u32 rqn = res->rss_rqns[ix];
        int err;
 
-       mlx5e_channels_get_regular_rqn(chs, ix, &rqn);
        err = mlx5e_rqt_redirect_direct(&res->channels[ix].direct_rqt, rqn);
        if (err)
                mlx5_core_warn(res->mdev, "Failed to redirect direct RQT %#x to RQ %#x (channel %u): err = %d\n",
                               mlx5e_rqt_get_rqtn(&res->channels[ix].direct_rqt),
                               rqn, ix, err);
-
-       if (!(res->features & MLX5E_RX_RES_FEATURE_XSK))
-               return;
-
-       if (!mlx5e_channels_get_xsk_rqn(chs, ix, &rqn))
-               rqn = res->drop_rqn;
-       err = mlx5e_rqt_redirect_direct(&res->channels[ix].xsk_rqt, rqn);
-       if (err)
-               mlx5_core_warn(res->mdev, "Failed to redirect XSK RQT %#x to RQ %#x (channel %u): err = %d\n",
-                              mlx5e_rqt_get_rqtn(&res->channels[ix].xsk_rqt),
-                              rqn, ix, err);
 }
 
 static void mlx5e_rx_res_channel_deactivate_direct(struct mlx5e_rx_res *res,
@@ -559,15 +492,6 @@ static void mlx5e_rx_res_channel_deactivate_direct(struct mlx5e_rx_res *res,
                mlx5_core_warn(res->mdev, "Failed to redirect direct RQT %#x to drop RQ %#x (channel %u): err = %d\n",
                               mlx5e_rqt_get_rqtn(&res->channels[ix].direct_rqt),
                               res->drop_rqn, ix, err);
-
-       if (!(res->features & MLX5E_RX_RES_FEATURE_XSK))
-               return;
-
-       err = mlx5e_rqt_redirect_direct(&res->channels[ix].xsk_rqt, res->drop_rqn);
-       if (err)
-               mlx5_core_warn(res->mdev, "Failed to redirect XSK RQT %#x to drop RQ %#x (channel %u): err = %d\n",
-                              mlx5e_rqt_get_rqtn(&res->channels[ix].xsk_rqt),
-                              res->drop_rqn, ix, err);
 }
 
 void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_channels *chs)
@@ -577,8 +501,12 @@ void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_chann
 
        nch = mlx5e_channels_get_num(chs);
 
-       for (ix = 0; ix < chs->num; ix++)
-               mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix]);
+       for (ix = 0; ix < chs->num; ix++) {
+               if (mlx5e_channels_is_xsk(chs, ix))
+                       mlx5e_channels_get_xsk_rqn(chs, ix, &res->rss_rqns[ix]);
+               else
+                       mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix]);
+       }
        res->rss_nch = chs->num;
 
        mlx5e_rx_res_rss_enable(res);
@@ -621,33 +549,17 @@ void mlx5e_rx_res_channels_deactivate(struct mlx5e_rx_res *res)
        }
 }
 
-int mlx5e_rx_res_xsk_activate(struct mlx5e_rx_res *res, struct mlx5e_channels *chs,
-                             unsigned int ix)
+void mlx5e_rx_res_xsk_update(struct mlx5e_rx_res *res, struct mlx5e_channels *chs,
+                            unsigned int ix, bool xsk)
 {
-       u32 rqn;
-       int err;
-
-       if (!mlx5e_channels_get_xsk_rqn(chs, ix, &rqn))
-               return -EINVAL;
-
-       err = mlx5e_rqt_redirect_direct(&res->channels[ix].xsk_rqt, rqn);
-       if (err)
-               mlx5_core_warn(res->mdev, "Failed to redirect XSK RQT %#x to XSK RQ %#x (channel %u): err = %d\n",
-                              mlx5e_rqt_get_rqtn(&res->channels[ix].xsk_rqt),
-                              rqn, ix, err);
-       return err;
-}
+       if (xsk)
+               mlx5e_channels_get_xsk_rqn(chs, ix, &res->rss_rqns[ix]);
+       else
+               mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix]);
 
-int mlx5e_rx_res_xsk_deactivate(struct mlx5e_rx_res *res, unsigned int ix)
-{
-       int err;
+       mlx5e_rx_res_rss_enable(res);
 
-       err = mlx5e_rqt_redirect_direct(&res->channels[ix].xsk_rqt, res->drop_rqn);
-       if (err)
-               mlx5_core_warn(res->mdev, "Failed to redirect XSK RQT %#x to drop RQ %#x (channel %u): err = %d\n",
-                              mlx5e_rqt_get_rqtn(&res->channels[ix].xsk_rqt),
-                              res->drop_rqn, ix, err);
-       return err;
+       mlx5e_rx_res_channel_activate_direct(res, chs, ix);
 }
 
 int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res,
index b39b20a720e0fa244b2047d2ee3ad969f18bfdc9..5d5f64fab60ffe6a993090c93e065413e5d74cbc 100644 (file)
@@ -17,8 +17,7 @@ struct mlx5e_rss_params_hash;
 
 enum mlx5e_rx_res_features {
        MLX5E_RX_RES_FEATURE_INNER_FT = BIT(0),
-       MLX5E_RX_RES_FEATURE_XSK = BIT(1),
-       MLX5E_RX_RES_FEATURE_PTP = BIT(2),
+       MLX5E_RX_RES_FEATURE_PTP = BIT(1),
 };
 
 /* Setup */
@@ -32,7 +31,6 @@ void mlx5e_rx_res_free(struct mlx5e_rx_res *res);
 
 /* TIRN getters for flow steering */
 u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix);
-u32 mlx5e_rx_res_get_tirn_xsk(struct mlx5e_rx_res *res, unsigned int ix);
 u32 mlx5e_rx_res_get_tirn_rss(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt);
 u32 mlx5e_rx_res_get_tirn_rss_inner(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt);
 u32 mlx5e_rx_res_get_tirn_ptp(struct mlx5e_rx_res *res);
@@ -40,9 +38,8 @@ u32 mlx5e_rx_res_get_tirn_ptp(struct mlx5e_rx_res *res);
 /* Activate/deactivate API */
 void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_channels *chs);
 void mlx5e_rx_res_channels_deactivate(struct mlx5e_rx_res *res);
-int mlx5e_rx_res_xsk_activate(struct mlx5e_rx_res *res, struct mlx5e_channels *chs,
-                             unsigned int ix);
-int mlx5e_rx_res_xsk_deactivate(struct mlx5e_rx_res *res, unsigned int ix);
+void mlx5e_rx_res_xsk_update(struct mlx5e_rx_res *res, struct mlx5e_channels *chs,
+                            unsigned int ix, bool xsk);
 
 /* Configuration API */
 void mlx5e_rx_res_rss_set_indir_uniform(struct mlx5e_rx_res *res, unsigned int nch);
index 6058b1e72c6cf4fc9f4af408fc1a85ec3b34653a..9804ef15a4d6e5568da58ee15be62666a139adf5 100644 (file)
@@ -124,16 +124,10 @@ static int mlx5e_xsk_enable_locked(struct mlx5e_priv *priv,
         * any Fill Ring entries at the setup stage.
         */
 
-       err = mlx5e_rx_res_xsk_activate(priv->rx_res, &priv->channels, ix);
-       if (unlikely(err))
-               goto err_deactivate;
+       mlx5e_rx_res_xsk_update(priv->rx_res, &priv->channels, ix, true);
 
        return 0;
 
-err_deactivate:
-       mlx5e_deactivate_xsk(c);
-       mlx5e_close_xsk(c);
-
 err_remove_pool:
        mlx5e_xsk_remove_pool(&priv->xsk, ix);
 
@@ -171,7 +165,7 @@ static int mlx5e_xsk_disable_locked(struct mlx5e_priv *priv, u16 ix)
                goto remove_pool;
 
        c = priv->channels.c[ix];
-       mlx5e_rx_res_xsk_deactivate(priv->rx_res, ix);
+       mlx5e_rx_res_xsk_update(priv->rx_res, &priv->channels, ix, false);
        mlx5e_deactivate_xsk(c);
        mlx5e_close_xsk(c);
 
@@ -209,11 +203,10 @@ int mlx5e_xsk_setup_pool(struct net_device *dev, struct xsk_buff_pool *pool, u16
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
        struct mlx5e_params *params = &priv->channels.params;
-       u16 ix;
 
-       if (unlikely(!mlx5e_qid_get_ch_if_in_group(params, qid, MLX5E_RQ_GROUP_XSK, &ix)))
+       if (unlikely(qid >= params->num_channels))
                return -EINVAL;
 
-       return pool ? mlx5e_xsk_enable_pool(priv, pool, ix) :
-                     mlx5e_xsk_disable_pool(priv, ix);
+       return pool ? mlx5e_xsk_enable_pool(priv, pool, qid) :
+                     mlx5e_xsk_disable_pool(priv, qid);
 }
index d7dfc7d2c058ae4ab495a1e627069530b69dcfe2..ff03c43833bbf0148b6b1243a407a19224cbbeab 100644 (file)
@@ -66,7 +66,7 @@ static int mlx5e_init_xsk_rq(struct mlx5e_channel *c,
        rq->xsk_pool     = pool;
        rq->stats        = &c->priv->channel_stats[c->ix]->xskrq;
        rq->ptp_cyc2time = mlx5_rq_ts_translator(mdev);
-       rq_xdp_ix        = c->ix + params->num_channels * MLX5E_RQ_GROUP_XSK;
+       rq_xdp_ix        = c->ix;
        err = mlx5e_rq_set_handlers(rq, params, xsk);
        if (err)
                return err;
index c856fc3f197e274d09156fb1bd810a1508599742..367a9505ca4f998b97e316ae17dc01111f3b04e1 100644 (file)
@@ -12,15 +12,14 @@ int mlx5e_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)
        struct mlx5e_priv *priv = netdev_priv(dev);
        struct mlx5e_params *params = &priv->channels.params;
        struct mlx5e_channel *c;
-       u16 ix;
 
        if (unlikely(!mlx5e_xdp_is_active(priv)))
                return -ENETDOWN;
 
-       if (unlikely(!mlx5e_qid_get_ch_if_in_group(params, qid, MLX5E_RQ_GROUP_XSK, &ix)))
+       if (unlikely(qid >= params->num_channels))
                return -EINVAL;
 
-       c = priv->channels.c[ix];
+       c = priv->channels.c[qid];
 
        if (!napi_if_scheduled_mark_missed(&c->napi)) {
                /* To avoid WQE overrun, don't post a NOP if async_icosq is not
index 2a67798cd4464ca8c18e50959aa0a0b2f5a7333e..aac32e505c14fe0c5b451cf58e8dd4f42393ed6b 100644 (file)
@@ -451,15 +451,7 @@ static int flow_get_tirn(struct mlx5e_priv *priv,
                eth_rule->rss = rss;
                mlx5e_rss_refcnt_inc(eth_rule->rss);
        } else {
-               struct mlx5e_params *params = &priv->channels.params;
-               enum mlx5e_rq_group group;
-               u16 ix;
-
-               mlx5e_qid_get_ch_and_group(params, fs->ring_cookie, &ix, &group);
-
-               *tirn = group == MLX5E_RQ_GROUP_XSK ?
-                       mlx5e_rx_res_get_tirn_xsk(priv->rx_res, ix) :
-                       mlx5e_rx_res_get_tirn_direct(priv->rx_res, ix);
+               *tirn = mlx5e_rx_res_get_tirn_direct(priv->rx_res, fs->ring_cookie);
        }
 
        return 0;
@@ -682,8 +674,7 @@ static int validate_flow(struct mlx5e_priv *priv,
                return -ENOSPC;
 
        if (fs->ring_cookie != RX_CLS_FLOW_DISC)
-               if (!mlx5e_qid_validate(priv->profile, &priv->channels.params,
-                                       fs->ring_cookie))
+               if (fs->ring_cookie >= priv->channels.params.num_channels)
                        return -EINVAL;
 
        switch (flow_type_mask(fs->flow_type)) {
index 129a0d678ccefbc3c13a8dbe793c0d27d4b507b5..21fe43406d888fa51d7fc513777c59c52beede04 100644 (file)
@@ -2690,7 +2690,7 @@ static int mlx5e_update_netdev_queues(struct mlx5e_priv *priv)
        struct netdev_tc_txq old_tc_to_txq[TC_MAX_QUEUE], *tc_to_txq;
        struct net_device *netdev = priv->netdev;
        int old_num_txqs, old_ntc;
-       int num_rxqs, nch, ntc;
+       int nch, ntc;
        int err;
        int i;
 
@@ -2701,7 +2701,6 @@ static int mlx5e_update_netdev_queues(struct mlx5e_priv *priv)
 
        nch = priv->channels.params.num_channels;
        ntc = priv->channels.params.mqprio.num_tc;
-       num_rxqs = nch * priv->profile->rq_groups;
        tc_to_txq = priv->channels.params.mqprio.tc_to_txq;
 
        err = mlx5e_netdev_set_tcs(netdev, nch, ntc, tc_to_txq);
@@ -2710,7 +2709,7 @@ static int mlx5e_update_netdev_queues(struct mlx5e_priv *priv)
        err = mlx5e_update_tx_netdev_queues(priv);
        if (err)
                goto err_tcs;
-       err = netif_set_real_num_rx_queues(netdev, num_rxqs);
+       err = netif_set_real_num_rx_queues(netdev, nch);
        if (err) {
                netdev_warn(netdev, "netif_set_real_num_rx_queues failed, %d\n", err);
                goto err_txqs;
@@ -5199,7 +5198,7 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
                goto err_destroy_q_counters;
        }
 
-       features = MLX5E_RX_RES_FEATURE_XSK | MLX5E_RX_RES_FEATURE_PTP;
+       features = MLX5E_RX_RES_FEATURE_PTP;
        if (priv->channels.params.tunneled_offload_en)
                features |= MLX5E_RX_RES_FEATURE_INNER_FT;
        err = mlx5e_rx_res_init(priv->rx_res, priv->mdev, features,
@@ -5390,7 +5389,6 @@ static const struct mlx5e_profile mlx5e_nic_profile = {
        .update_carrier    = mlx5e_update_carrier,
        .rx_handlers       = &mlx5e_rx_handlers_nic,
        .max_tc            = MLX5E_MAX_NUM_TC,
-       .rq_groups         = MLX5E_NUM_RQ_GROUPS(XSK),
        .stats_grps        = mlx5e_nic_stats_grps,
        .stats_grps_num    = mlx5e_nic_stats_grps_num,
        .features          = BIT(MLX5E_PROFILE_FEATURE_PTP_RX) |
@@ -5423,8 +5421,7 @@ mlx5e_calc_max_nch(struct mlx5_core_dev *mdev, struct net_device *netdev,
        max_nch = mlx5e_profile_max_num_channels(mdev, profile);
 
        /* netdev rx queues */
-       tmp = netdev->num_rx_queues / max_t(u8, profile->rq_groups, 1);
-       max_nch = min_t(unsigned int, max_nch, tmp);
+       max_nch = min_t(unsigned int, max_nch, netdev->num_rx_queues);
 
        /* netdev tx queues */
        tmp = netdev->num_tx_queues;
@@ -5568,11 +5565,7 @@ static unsigned int mlx5e_get_max_num_txqs(struct mlx5_core_dev *mdev,
 static unsigned int mlx5e_get_max_num_rxqs(struct mlx5_core_dev *mdev,
                                           const struct mlx5e_profile *profile)
 {
-       unsigned int nch;
-
-       nch = mlx5e_profile_max_num_channels(mdev, profile);
-
-       return nch * profile->rq_groups;
+       return mlx5e_profile_max_num_channels(mdev, profile);
 }
 
 struct net_device *
index 83b2febe8a7b341868561ffe2ba99b1cb1056a13..794cd8dfe9c911f7c6480c877cb81bc6beac96fa 100644 (file)
@@ -1224,7 +1224,6 @@ static const struct mlx5e_profile mlx5e_rep_profile = {
        .update_stats           = mlx5e_stats_update_ndo_stats,
        .rx_handlers            = &mlx5e_rx_handlers_rep,
        .max_tc                 = 1,
-       .rq_groups              = MLX5E_NUM_RQ_GROUPS(REGULAR),
        .stats_grps             = mlx5e_rep_stats_grps,
        .stats_grps_num         = mlx5e_rep_stats_grps_num,
        .max_nch_limit          = mlx5e_rep_max_nch_limit,
@@ -1244,8 +1243,6 @@ static const struct mlx5e_profile mlx5e_uplink_rep_profile = {
        .update_carrier         = mlx5e_update_carrier,
        .rx_handlers            = &mlx5e_rx_handlers_rep,
        .max_tc                 = MLX5E_MAX_NUM_TC,
-       /* XSK is needed so we can replace profile with NIC netdev */
-       .rq_groups              = MLX5E_NUM_RQ_GROUPS(XSK),
        .stats_grps             = mlx5e_ul_rep_stats_grps,
        .stats_grps_num         = mlx5e_ul_rep_stats_grps_num,
 };
index 35f797cfd21eb991a6e3c7dab3e1e6ed942c0357..4e3a75496dd9ac213d53b6962d6dee6e92d70b9d 100644 (file)
@@ -463,7 +463,6 @@ static const struct mlx5e_profile mlx5i_nic_profile = {
        .update_carrier    = NULL, /* no HW update in IB link */
        .rx_handlers       = &mlx5i_rx_handlers,
        .max_tc            = MLX5I_MAX_NUM_TC,
-       .rq_groups         = MLX5E_NUM_RQ_GROUPS(REGULAR),
        .stats_grps        = mlx5i_stats_grps,
        .stats_grps_num    = mlx5i_stats_grps_num,
 };
index 0b86e78dbc0e211952e16655bfc4a1db0122392b..0227a521d301e5f4410be751dc904952dd9d7175 100644 (file)
@@ -349,7 +349,6 @@ static const struct mlx5e_profile mlx5i_pkey_nic_profile = {
        .update_stats      = NULL,
        .rx_handlers       = &mlx5i_rx_handlers,
        .max_tc            = MLX5I_MAX_NUM_TC,
-       .rq_groups         = MLX5E_NUM_RQ_GROUPS(REGULAR),
 };
 
 const struct mlx5e_profile *mlx5i_pkey_get_profile(void)