> -----Original Message-----
> From: Kitszel, Przemyslaw <[email protected]>
> Sent: Friday, May 8, 2026 2:42 PM
> To: [email protected]; Schmidt, Michal
> <[email protected]>; Jakub Kicinski <[email protected]>; Jiri Pirko
> <[email protected]>
> Cc: [email protected]; Simon Horman <[email protected]>; Nguyen,
> Anthony L <[email protected]>; Michal Swiatkowski
> <[email protected]>; Richardson, Bruce
> <[email protected]>; Medvedkin, Vladimir
> <[email protected]>; Connolly, Padraig J
> <[email protected]>; S, Ananth <[email protected]>;
> Miskell, Timothy <[email protected]>; Keller, Jacob E
> <[email protected]>; Czapnik, Lukasz
> <[email protected]>; Loktionov, Aleksandr
> <[email protected]>; Andrew Lunn <[email protected]>;
> David S. Miller <[email protected]>; Eric Dumazet
> <[email protected]>; Paolo Abeni <[email protected]>; Saeed Mahameed
> <[email protected]>; Leon Romanovsky <[email protected]>; Tariq Toukan
> <[email protected]>; Mark Bloch <[email protected]>; Kitszel,
> Przemyslaw <[email protected]>; Jagielski, Jedrzej
> <[email protected]>
> Subject: [PATCH iwl-next v1 10/15] iavf: increase max number of queues
> to 256
> 
> 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);
It looks like a silent data loss on the legacy/V1 opcode path.
You read only 16 bits here.

> +             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