ice: pass VSI pointer into ice_vc_isvalid_q_id
authorJacob Keller <jacob.e.keller@intel.com>
Fri, 16 Feb 2024 22:06:35 +0000 (14:06 -0800)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Mon, 4 Mar 2024 18:22:18 +0000 (10:22 -0800)
The ice_vc_isvalid_q_id() function takes a VSI index and a queue ID. It
looks up the VSI from its index, and then validates that the queue number
is valid for that VSI.

The VSI ID passed is typically a VSI index from the VF. This VSI number is
validated by the PF to ensure that it matches the VSI associated with the
VF already.

In every flow where ice_vc_isvalid_q_id() is called, the PF driver already
has a pointer to the VSI associated with the VF. This pointer is obtained
using ice_get_vf_vsi(), rather than looking up the VSI using the index sent
by the VF.

Since we already know which VSI to operate on, we can modify
ice_vc_isvalid_q_id() to take a VSI pointer instead of a VSI index. Pass
the VSI we found from ice_get_vf_vsi() instead of re-doing the lookup. This
removes some unnecessary computation and scanning of the VSI list.

It also removes the last place where the driver directly used the VSI
number from the VF. This will pave the way for refactoring to communicate
relative VSI numbers to the VF instead of absolute numbers from the PF
space.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_virtchnl.c

index c925813ec9caf06d11199ca066a5096e6d034b4e..3dd4e5af0b6a3c4db55c25c180cd9f6e088ef3ed 100644 (file)
@@ -562,17 +562,15 @@ bool ice_vc_isvalid_vsi_id(struct ice_vf *vf, u16 vsi_id)
 
 /**
  * ice_vc_isvalid_q_id
- * @vf: pointer to the VF info
- * @vsi_id: VSI ID
+ * @vsi: VSI to check queue ID against
  * @qid: VSI relative queue ID
  *
  * check for the valid queue ID
  */
-static bool ice_vc_isvalid_q_id(struct ice_vf *vf, u16 vsi_id, u8 qid)
+static bool ice_vc_isvalid_q_id(struct ice_vsi *vsi, u8 qid)
 {
-       struct ice_vsi *vsi = ice_find_vsi(vf->pf, vsi_id);
        /* allocated Tx and Rx queues should be always equal for VF VSI */
-       return (vsi && (qid < vsi->alloc_txq));
+       return qid < vsi->alloc_txq;
 }
 
 /**
@@ -1330,7 +1328,7 @@ static int ice_vc_ena_qs_msg(struct ice_vf *vf, u8 *msg)
         */
        q_map = vqs->rx_queues;
        for_each_set_bit(vf_q_id, &q_map, ICE_MAX_RSS_QS_PER_VF) {
-               if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
+               if (!ice_vc_isvalid_q_id(vsi, vf_q_id)) {
                        v_ret = VIRTCHNL_STATUS_ERR_PARAM;
                        goto error_param;
                }
@@ -1352,7 +1350,7 @@ static int ice_vc_ena_qs_msg(struct ice_vf *vf, u8 *msg)
 
        q_map = vqs->tx_queues;
        for_each_set_bit(vf_q_id, &q_map, ICE_MAX_RSS_QS_PER_VF) {
-               if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
+               if (!ice_vc_isvalid_q_id(vsi, vf_q_id)) {
                        v_ret = VIRTCHNL_STATUS_ERR_PARAM;
                        goto error_param;
                }
@@ -1457,7 +1455,7 @@ static int ice_vc_dis_qs_msg(struct ice_vf *vf, u8 *msg)
                q_map = vqs->tx_queues;
 
                for_each_set_bit(vf_q_id, &q_map, ICE_MAX_RSS_QS_PER_VF) {
-                       if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
+                       if (!ice_vc_isvalid_q_id(vsi, vf_q_id)) {
                                v_ret = VIRTCHNL_STATUS_ERR_PARAM;
                                goto error_param;
                        }
@@ -1483,7 +1481,7 @@ static int ice_vc_dis_qs_msg(struct ice_vf *vf, u8 *msg)
                bitmap_zero(vf->rxq_ena, ICE_MAX_RSS_QS_PER_VF);
        } else if (q_map) {
                for_each_set_bit(vf_q_id, &q_map, ICE_MAX_RSS_QS_PER_VF) {
-                       if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
+                       if (!ice_vc_isvalid_q_id(vsi, vf_q_id)) {
                                v_ret = VIRTCHNL_STATUS_ERR_PARAM;
                                goto error_param;
                        }
@@ -1539,7 +1537,7 @@ ice_cfg_interrupt(struct ice_vf *vf, struct ice_vsi *vsi, u16 vector_id,
        for_each_set_bit(vsi_q_id_idx, &qmap, ICE_MAX_RSS_QS_PER_VF) {
                vsi_q_id = vsi_q_id_idx;
 
-               if (!ice_vc_isvalid_q_id(vf, vsi->vsi_num, vsi_q_id))
+               if (!ice_vc_isvalid_q_id(vsi, vsi_q_id))
                        return VIRTCHNL_STATUS_ERR_PARAM;
 
                q_vector->num_ring_rx++;
@@ -1553,7 +1551,7 @@ ice_cfg_interrupt(struct ice_vf *vf, struct ice_vsi *vsi, u16 vector_id,
        for_each_set_bit(vsi_q_id_idx, &qmap, ICE_MAX_RSS_QS_PER_VF) {
                vsi_q_id = vsi_q_id_idx;
 
-               if (!ice_vc_isvalid_q_id(vf, vsi->vsi_num, vsi_q_id))
+               if (!ice_vc_isvalid_q_id(vsi, vsi_q_id))
                        return VIRTCHNL_STATUS_ERR_PARAM;
 
                q_vector->num_ring_tx++;
@@ -1710,7 +1708,7 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
                    qpi->txq.headwb_enabled ||
                    !ice_vc_isvalid_ring_len(qpi->txq.ring_len) ||
                    !ice_vc_isvalid_ring_len(qpi->rxq.ring_len) ||
-                   !ice_vc_isvalid_q_id(vf, qci->vsi_id, qpi->txq.queue_id)) {
+                   !ice_vc_isvalid_q_id(vsi, qpi->txq.queue_id)) {
                        goto error_param;
                }