Increase the max number of queues that driver will handle to 256.
Use old legacy limit in the virtchnl handling of iavf_map_queues().

Reviewed-by: Jedrzej Jagielski <[email protected]>
Signed-off-by: Przemek Kitszel <[email protected]>
---
 drivers/net/ethernet/intel/iavf/iavf.h          |  4 +++-
 drivers/net/ethernet/intel/iavf/iavf_main.c     |  4 ++--
 drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 15 ++++++++-------
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/intel/iavf/iavf.h 
b/drivers/net/ethernet/intel/iavf/iavf.h
index a0c42f2357fb..569686d34ff4 100644
--- a/drivers/net/ethernet/intel/iavf/iavf.h
+++ b/drivers/net/ethernet/intel/iavf/iavf.h
@@ -87,8 +87,10 @@ struct iavf_vsi {
 #define IAVF_TX_DESC(R, i) (&(((struct iavf_tx_desc *)((R)->desc))[i]))
 #define IAVF_TX_CTXTDESC(R, i) \
        (&(((struct iavf_tx_context_desc *)((R)->desc))[i]))
+
 /* for "old" virtchnl opcodes that accept up to 16 queues */
 #define IAVF_MAX_REQ_QUEUES_VCV1       16
+#define IAVF_MAX_REQ_QUEUES            256
 
 #define IAVF_HKEY_ARRAY_SIZE ((IAVF_VFQF_HKEY_MAX_INDEX + 1) * 4)
 #define IAVF_HLUT_ARRAY_SIZE ((IAVF_VFQF_HLUT_MAX_INDEX + 1) * 4)
@@ -108,7 +110,7 @@ struct iavf_q_vector {
        struct napi_struct napi;
        struct iavf_ring_container rx;
        struct iavf_ring_container tx;
-       u32 ring_mask;
+       DECLARE_BITMAP(ring_mask, IAVF_MAX_REQ_QUEUES);
        u8 itr_countdown;       /* when 0 should adjust adaptive ITR */
        u8 num_ringpairs;       /* total number of ring pairs in vector */
        u16 v_idx;              /* index in the vsi->q_vector array. */
diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c 
b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 8149b01ae24a..abc0fe070ee7 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -439,7 +439,7 @@ iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int 
v_idx, int r_idx)
        q_vector->rx.count++;
        q_vector->rx.next_update = jiffies + 1;
        q_vector->rx.target_itr = ITR_TO_REG(rx_ring->itr_setting);
-       q_vector->ring_mask |= BIT(r_idx);
+       set_bit(r_idx, q_vector->ring_mask);
        wr32(hw, IAVF_VFINT_ITRN1(IAVF_RX_ITR, q_vector->reg_idx),
             q_vector->rx.current_itr >> 1);
        q_vector->rx.current_itr = q_vector->rx.target_itr;
@@ -5362,7 +5362,7 @@ static int iavf_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
        pci_set_master(pdev);
 
        netdev = alloc_etherdev_mq(sizeof(struct iavf_adapter),
-                                  IAVF_MAX_REQ_QUEUES_VCV1);
+                                  IAVF_MAX_REQ_QUEUES);
        if (!netdev) {
                err = -ENOMEM;
                goto err_alloc_etherdev;
diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c 
b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
index d3b5398b6130..9102bc4bddb0 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
@@ -260,19 +260,19 @@ int iavf_send_vf_ptp_caps_msg(struct iavf_adapter 
*adapter)
  **/
 static void iavf_validate_num_queues(struct iavf_adapter *adapter)
 {
-       if (adapter->vf_res->num_queue_pairs > IAVF_MAX_REQ_QUEUES_VCV1) {
+       if (adapter->vf_res->num_queue_pairs > IAVF_MAX_REQ_QUEUES) {
                struct virtchnl_vsi_resource *vsi_res;
                int i;
 
                dev_info(&adapter->pdev->dev, "Received %d queues, but can only 
have a max of %d\n",
                         adapter->vf_res->num_queue_pairs,
-                        IAVF_MAX_REQ_QUEUES_VCV1);
+                        IAVF_MAX_REQ_QUEUES);
                dev_info(&adapter->pdev->dev, "Fixing by reducing queues to 
%d\n",
-                        IAVF_MAX_REQ_QUEUES_VCV1);
-               adapter->vf_res->num_queue_pairs = IAVF_MAX_REQ_QUEUES_VCV1;
+                        IAVF_MAX_REQ_QUEUES);
+               adapter->vf_res->num_queue_pairs = IAVF_MAX_REQ_QUEUES;
                for (i = 0; i < adapter->vf_res->num_vsis; i++) {
                        vsi_res = &adapter->vf_res->vsi_res[i];
-                       vsi_res->num_queue_pairs = IAVF_MAX_REQ_QUEUES_VCV1;
+                       vsi_res->num_queue_pairs = IAVF_MAX_REQ_QUEUES;
                }
        }
 }
@@ -554,8 +554,9 @@ void iavf_map_queues(struct iavf_adapter *adapter)
 
                vecmap->vsi_id = adapter->vsi_res->vsi_id;
                vecmap->vector_id = v_idx + NONQ_VECS;
-               vecmap->txq_map = q_vector->ring_mask;
-               vecmap->rxq_map = q_vector->ring_mask;
+               vecmap->txq_map = bitmap_read(q_vector->ring_mask, 0,
+                                             IAVF_MAX_REQ_QUEUES_VCV1);
+               vecmap->rxq_map = vecmap->txq_map;
                vecmap->rxitr_idx = IAVF_RX_ITR;
                vecmap->txitr_idx = IAVF_TX_ITR;
        }
-- 
2.39.3

Reply via email to