Adjust all bitmaps and arrays in ice to accept 256 VF queues.
Extend struct ice_vf::num_req_qs width to allow 256 queues.
Keep old/legacy size for virtchnl opcodes that were designed to accept
only up to 16 queues.

Reviewed-by: Jedrzej Jagielski <[email protected]>
Signed-off-by: Przemek Kitszel <[email protected]>
---
 drivers/net/ethernet/intel/ice/ice_lag.h     |  2 +-
 drivers/net/ethernet/intel/ice/ice_vf_lib.h  |  9 +++++----
 drivers/net/ethernet/intel/ice/ice_lib.c     |  2 +-
 drivers/net/ethernet/intel/ice/ice_sriov.c   |  4 ++--
 drivers/net/ethernet/intel/ice/ice_vf_lib.c  |  8 ++++----
 drivers/net/ethernet/intel/ice/virt/queues.c | 14 +++++++-------
 6 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_lag.h 
b/drivers/net/ethernet/intel/ice/ice_lag.h
index 4bfffecbdc97..39f6a6cc844d 100644
--- a/drivers/net/ethernet/intel/ice/ice_lag.h
+++ b/drivers/net/ethernet/intel/ice/ice_lag.h
@@ -52,7 +52,7 @@ struct ice_lag {
        u8 bond_lport_sec; /* lport values for secondary PF */
 
        /* q_home keeps track of which interface the q is currently on */
-       u8 q_home[ICE_MAX_SRIOV_VFS][ICE_MAX_QS_PER_VF_VCV1];
+       u8 q_home[ICE_MAX_SRIOV_VFS][ICE_MAX_QS_PER_VF];
 
        /* placeholder VSI for hanging VF queues from on secondary interface */
        struct ice_vsi *sec_vf[ICE_MAX_SRIOV_VFS];
diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.h 
b/drivers/net/ethernet/intel/ice/ice_vf_lib.h
index 36dbe5412336..1b56f7150eb7 100644
--- a/drivers/net/ethernet/intel/ice/ice_vf_lib.h
+++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.h
@@ -21,6 +21,7 @@
 /* VF resource constraints */
 /* for "old" virtchnl opcodes that accept up to 16 queues */
 #define ICE_MAX_QS_PER_VF_VCV1 16
+#define ICE_MAX_QS_PER_VF      256
 
 struct ice_pf;
 struct ice_vf;
@@ -162,8 +163,8 @@ struct ice_vf {
        u8 dev_lan_addr[ETH_ALEN];
        u8 hw_lan_addr[ETH_ALEN];
        struct ice_time_mac legacy_last_added_umac;
-       DECLARE_BITMAP(txq_ena, ICE_MAX_QS_PER_VF_VCV1);
-       DECLARE_BITMAP(rxq_ena, ICE_MAX_QS_PER_VF_VCV1);
+       DECLARE_BITMAP(txq_ena, ICE_MAX_QS_PER_VF);
+       DECLARE_BITMAP(rxq_ena, ICE_MAX_QS_PER_VF);
        struct ice_vlan port_vlan_info; /* Port VLAN ID, QoS, and TPID */
        struct virtchnl_vlan_caps vlan_v2_caps;
        struct ice_mbx_vf_info mbx_info;
@@ -185,7 +186,7 @@ struct ice_vf {
        DECLARE_BITMAP(vf_states, ICE_VF_STATES_NBITS); /* VF runtime states */
 
        unsigned long vf_caps;          /* VF's adv. capabilities */
-       u8 num_req_qs;                  /* num of queue pairs requested by VF */
+       u16 num_req_qs;                 /* num of queue pairs requested by VF */
        u16 num_mac;
        u16 num_mac_lldp;
        u16 num_vf_qs;                  /* num of queue configured per VF */
@@ -206,7 +207,7 @@ struct ice_vf {
        u16 lldp_recipe_id;
        u16 lldp_rule_id;
 
-       struct ice_vf_qs_bw qs_bw[ICE_MAX_QS_PER_VF_VCV1];
+       struct ice_vf_qs_bw qs_bw[ICE_MAX_QS_PER_VF];
 };
 
 /* Flags for controlling behavior of ice_reset_vf */
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c 
b/drivers/net/ethernet/intel/ice/ice_lib.c
index 09e1dcab2179..2ac4e23f30b5 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -925,7 +925,7 @@ static void ice_vsi_set_rss_params(struct ice_vsi *vsi)
                 * For VSI_LUT, LUT size should be set to 64 bytes.
                 */
                vsi->rss_table_size = ICE_LUT_VSI_SIZE;
-               vsi->rss_size = ICE_MAX_QS_PER_VF_VCV1;
+               vsi->rss_size = ICE_MAX_QS_PER_VF;
                vsi->rss_lut_type = ICE_LUT_VSI;
                break;
        case ICE_VSI_LB:
diff --git a/drivers/net/ethernet/intel/ice/ice_sriov.c 
b/drivers/net/ethernet/intel/ice/ice_sriov.c
index 0482454f453b..28f9e68f46cd 100644
--- a/drivers/net/ethernet/intel/ice/ice_sriov.c
+++ b/drivers/net/ethernet/intel/ice/ice_sriov.c
@@ -398,15 +398,15 @@ static int ice_set_per_vf_res(struct ice_pf *pf, u16 
num_vfs)
        }
 
        num_txq = min_t(u16, num_msix_per_vf - ICE_NONQ_VECS_VF,
-                       ICE_MAX_QS_PER_VF_VCV1);
+                       ICE_MAX_QS_PER_VF);
        avail_qs = ice_get_avail_txq_count(pf) / num_vfs;
        if (!avail_qs)
                num_txq = 0;
        else if (num_txq > avail_qs)
                num_txq = rounddown_pow_of_two(avail_qs);
 
        num_rxq = min_t(u16, num_msix_per_vf - ICE_NONQ_VECS_VF,
-                       ICE_MAX_QS_PER_VF_VCV1);
+                       ICE_MAX_QS_PER_VF);
        avail_qs = ice_get_avail_rxq_count(pf) / num_vfs;
        if (!avail_qs)
                num_rxq = 0;
diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.c 
b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
index 8e88ab8547ab..55ad03085bc9 100644
--- a/drivers/net/ethernet/intel/ice/ice_vf_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
@@ -535,8 +535,8 @@ static void ice_vf_rebuild_host_cfg(struct ice_vf *vf)
 static void ice_set_vf_state_qs_dis(struct ice_vf *vf)
 {
        /* Clear Rx/Tx enabled queues flag */
-       bitmap_zero(vf->txq_ena, ICE_MAX_QS_PER_VF_VCV1);
-       bitmap_zero(vf->rxq_ena, ICE_MAX_QS_PER_VF_VCV1);
+       bitmap_zero(vf->txq_ena, ICE_MAX_QS_PER_VF);
+       bitmap_zero(vf->rxq_ena, ICE_MAX_QS_PER_VF);
        clear_bit(ICE_VF_STATE_QS_ENA, vf->vf_states);
 }
 
@@ -1222,8 +1222,8 @@ bool ice_is_vf_trusted(struct ice_vf *vf)
  */
 bool ice_vf_has_no_qs_ena(struct ice_vf *vf)
 {
-       return bitmap_empty(vf->rxq_ena, ICE_MAX_QS_PER_VF_VCV1) &&
-              bitmap_empty(vf->txq_ena, ICE_MAX_QS_PER_VF_VCV1);
+       return bitmap_empty(vf->rxq_ena, ICE_MAX_QS_PER_VF) &&
+              bitmap_empty(vf->txq_ena, ICE_MAX_QS_PER_VF);
 }
 
 /**
diff --git a/drivers/net/ethernet/intel/ice/virt/queues.c 
b/drivers/net/ethernet/intel/ice/virt/queues.c
index 7b165ee11a90..1d9f69026d1b 100644
--- a/drivers/net/ethernet/intel/ice/virt/queues.c
+++ b/drivers/net/ethernet/intel/ice/virt/queues.c
@@ -658,7 +658,7 @@ int ice_vc_cfg_q_bw(struct ice_vf *vf, u8 *msg)
                goto err;
        }
 
-       if (qbw->num_queues > ICE_MAX_QS_PER_VF_VCV1 ||
+       if (qbw->num_queues > ICE_MAX_QS_PER_VF ||
            qbw->num_queues > min_t(u16, vsi->alloc_txq, vsi->alloc_rxq)) {
                dev_err(ice_pf_to_dev(vf->pf), "VF-%d trying to configure more 
than allocated number of queues: %d\n",
                        vf->vf_id, min_t(u16, vsi->alloc_txq, vsi->alloc_rxq));
@@ -750,7 +750,7 @@ int ice_vc_cfg_q_quanta(struct ice_vf *vf, u8 *msg)
                goto err;
        }
 
-       if (end_qid > ICE_MAX_QS_PER_VF_VCV1 ||
+       if (end_qid > ICE_MAX_QS_PER_VF ||
            end_qid > min_t(u16, vsi->alloc_txq, vsi->alloc_rxq)) {
                dev_err(ice_pf_to_dev(vf->pf), "VF-%d trying to configure more 
than allocated number of queues: %d\n",
                        vf->vf_id, min_t(u16, vsi->alloc_txq, vsi->alloc_rxq));
@@ -818,7 +818,7 @@ int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
        if (!vsi)
                goto error_param;
 
-       if (qci->num_queue_pairs > ICE_MAX_QS_PER_VF_VCV1 ||
+       if (qci->num_queue_pairs > ICE_MAX_QS_PER_VF ||
            qci->num_queue_pairs > min_t(u16, vsi->alloc_txq, vsi->alloc_rxq)) {
                dev_err(ice_pf_to_dev(pf), "VF-%d requesting more than 
supported number of queues: %d\n",
                        vf->vf_id, min_t(u16, vsi->alloc_txq, vsi->alloc_rxq));
@@ -996,16 +996,16 @@ int ice_vc_request_qs_msg(struct ice_vf *vf, u8 *msg)
        if (!req_queues) {
                dev_err(dev, "VF %d tried to request 0 queues. Ignoring.\n",
                        vf->vf_id);
-       } else if (req_queues > ICE_MAX_QS_PER_VF_VCV1) {
+       } else if (req_queues > ICE_MAX_QS_PER_VF) {
                dev_err(dev, "VF %d tried to request more than %d queues.\n",
-                       vf->vf_id, ICE_MAX_QS_PER_VF_VCV1);
-               vfres->num_queue_pairs = ICE_MAX_QS_PER_VF_VCV1;
+                       vf->vf_id, ICE_MAX_QS_PER_VF);
+               vfres->num_queue_pairs = ICE_MAX_QS_PER_VF;
        } else if (req_queues > cur_queues &&
                   req_queues - cur_queues > tx_rx_queue_left) {
                dev_warn(dev, "VF %d requested %u more queues, but only %u 
left.\n",
                         vf->vf_id, req_queues - cur_queues, tx_rx_queue_left);
                vfres->num_queue_pairs = min_t(u16, max_allowed_vf_queues,
-                                              ICE_MAX_QS_PER_VF_VCV1);
+                                              ICE_MAX_QS_PER_VF);
        } else {
                /* request is successful, then reset VF */
                vf->num_req_qs = req_queues;
-- 
2.39.3

Reply via email to