mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 06:55:13 +08:00
ice: pass VSI pointer into ice_vc_isvalid_q_id
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>
This commit is contained in:
parent
09fcde5477
commit
a21605993d
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user