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 Signed-off-by: Przemek Kitszel --- 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