return inv;
 }
 
+static void mlx5e_fill_indir_rqt_rqns(struct mlx5e_priv *priv, void *rqtc)
+{
+       int i;
+
+       for (i = 0; i < MLX5E_INDIR_RQT_SIZE; i++) {
+               int ix = i;
+
+               if (priv->params.rss_hfunc == ETH_RSS_HASH_XOR)
+                       ix = mlx5e_bits_invert(i, MLX5E_LOG_INDIR_RQT_SIZE);
+
+               ix = ix % priv->params.num_channels;
+               MLX5_SET(rqtc, rqtc, rq_num[i],
+                        test_bit(MLX5E_STATE_OPENED, &priv->state) ?
+                        priv->channel[ix]->rq.rqn :
+                        priv->drop_rq.rqn);
+       }
+}
+
 static void mlx5e_fill_rqt_rqns(struct mlx5e_priv *priv, void *rqtc,
                                enum mlx5e_rqt_ix rqt_ix)
 {
-       int i;
-       int log_sz;
 
        switch (rqt_ix) {
        case MLX5E_INDIRECTION_RQT:
-               log_sz = priv->params.rx_hash_log_tbl_sz;
-               for (i = 0; i < (1 << log_sz); i++) {
-                       int ix = i;
-
-                       if (priv->params.rss_hfunc == ETH_RSS_HASH_XOR)
-                               ix = mlx5e_bits_invert(i, log_sz);
-
-                       ix = ix % priv->params.num_channels;
-                       MLX5_SET(rqtc, rqtc, rq_num[i],
-                                test_bit(MLX5E_STATE_OPENED, &priv->state) ?
-                                priv->channel[ix]->rq.rqn :
-                                priv->drop_rq.rqn);
-               }
+               mlx5e_fill_indir_rqt_rqns(priv, rqtc);
 
                break;
 
        u32 *in;
        void *rqtc;
        int inlen;
-       int log_sz;
        int sz;
        int err;
 
-       log_sz = (rqt_ix == MLX5E_SINGLE_RQ_RQT) ? 0 :
-                 priv->params.rx_hash_log_tbl_sz;
-       sz = 1 << log_sz;
+       sz = (rqt_ix == MLX5E_SINGLE_RQ_RQT) ? 1 : MLX5E_INDIR_RQT_SIZE;
 
        inlen = MLX5_ST_SZ_BYTES(create_rqt_in) + sizeof(u32) * sz;
        in = mlx5_vzalloc(inlen);
        u32 *in;
        void *rqtc;
        int inlen;
-       int log_sz;
        int sz;
        int err;
 
-       log_sz = (rqt_ix == MLX5E_SINGLE_RQ_RQT) ? 0 :
-                 priv->params.rx_hash_log_tbl_sz;
-       sz = 1 << log_sz;
+       sz = (rqt_ix == MLX5E_SINGLE_RQ_RQT) ? 1 : MLX5E_INDIR_RQT_SIZE;
 
        inlen = MLX5_ST_SZ_BYTES(modify_rqt_in) + sizeof(u32) * sz;
        in = mlx5_vzalloc(inlen);
 
 static void mlx5e_build_netdev_priv(struct mlx5_core_dev *mdev,
                                    struct net_device *netdev,
-                                   int num_comp_vectors)
+                                   int num_channels)
 {
        struct mlx5e_priv *priv = netdev_priv(netdev);
 
        priv->params.tx_max_inline         = mlx5e_get_max_inline_cap(mdev);
        priv->params.min_rx_wqes           =
                MLX5E_PARAMS_DEFAULT_MIN_RX_WQES;
-       priv->params.rx_hash_log_tbl_sz    =
-               (order_base_2(num_comp_vectors) >
-                MLX5E_PARAMS_DEFAULT_RX_HASH_LOG_TBL_SZ) ?
-               order_base_2(num_comp_vectors)           :
-               MLX5E_PARAMS_DEFAULT_RX_HASH_LOG_TBL_SZ;
        priv->params.num_tc                = 1;
        priv->params.default_vlan_prio     = 0;
        priv->params.rss_hfunc             = ETH_RSS_HASH_XOR;
 
        priv->mdev                         = mdev;
        priv->netdev                       = netdev;
-       priv->params.num_channels          = num_comp_vectors;
+       priv->params.num_channels          = num_channels;
        priv->default_vlan_prio            = priv->params.default_vlan_prio;
 
        spin_lock_init(&priv->async_events_spinlock);
 {
        struct net_device *netdev;
        struct mlx5e_priv *priv;
-       int ncv = mdev->priv.eq_table.num_comp_vectors;
+       int nch = min_t(int, mdev->priv.eq_table.num_comp_vectors,
+                       MLX5E_MAX_NUM_CHANNELS);
        int err;
 
        if (mlx5e_check_required_hca_cap(mdev))
                return NULL;
 
-       netdev = alloc_etherdev_mqs(sizeof(struct mlx5e_priv), ncv, ncv);
+       netdev = alloc_etherdev_mqs(sizeof(struct mlx5e_priv), nch, nch);
        if (!netdev) {
                mlx5_core_err(mdev, "alloc_etherdev_mqs() failed\n");
                return NULL;
        }
 
-       mlx5e_build_netdev_priv(mdev, netdev, ncv);
+       mlx5e_build_netdev_priv(mdev, netdev, nch);
        mlx5e_build_netdev(netdev);
 
        netif_carrier_off(netdev);