ice: Fix configuring VIRTCHNL_OP_CONFIG_VSI_QUEUES with unbalanced queues
Currently the VIRTCHNL_OP_CONFIG_VSI_QUEUES command may fail if there are less RX queues than TX queues requested. To fix it, only configure RXDID if RX queue exists. Fixes: e753df8fbca5 ("ice: Add support Flex RXD") Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com> Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
288ecf491b
commit
c7cb9dfc57
@ -1621,9 +1621,6 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
|
||||
}
|
||||
|
||||
for (i = 0; i < qci->num_queue_pairs; i++) {
|
||||
struct ice_hw *hw;
|
||||
u32 rxdid;
|
||||
u16 pf_q;
|
||||
qpi = &qci->qpair[i];
|
||||
if (qpi->txq.vsi_id != qci->vsi_id ||
|
||||
qpi->rxq.vsi_id != qci->vsi_id ||
|
||||
@ -1664,6 +1661,7 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
|
||||
/* copy Rx queue info from VF into VSI */
|
||||
if (qpi->rxq.ring_len > 0) {
|
||||
u16 max_frame_size = ice_vc_get_max_frame_size(vf);
|
||||
u32 rxdid;
|
||||
|
||||
vsi->rx_rings[i]->dma = qpi->rxq.dma_ring_addr;
|
||||
vsi->rx_rings[i]->count = qpi->rxq.ring_len;
|
||||
@ -1691,26 +1689,25 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
|
||||
vf->vf_id, i);
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
/* If Rx flex desc is supported, select RXDID for Rx
|
||||
* queues. Otherwise, use legacy 32byte descriptor
|
||||
* format. Legacy 16byte descriptor is not supported.
|
||||
* If this RXDID is selected, return error.
|
||||
*/
|
||||
if (vf->driver_caps &
|
||||
VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC) {
|
||||
rxdid = qpi->rxq.rxdid;
|
||||
if (!(BIT(rxdid) & pf->supported_rxdids))
|
||||
goto error_param;
|
||||
} else {
|
||||
rxdid = ICE_RXDID_LEGACY_1;
|
||||
}
|
||||
|
||||
ice_write_qrxflxp_cntxt(&vsi->back->hw,
|
||||
vsi->rxq_map[q_idx],
|
||||
rxdid, 0x03, false);
|
||||
}
|
||||
|
||||
/* VF Rx queue RXDID configuration */
|
||||
pf_q = vsi->rxq_map[qpi->rxq.queue_id];
|
||||
rxdid = qpi->rxq.rxdid;
|
||||
hw = &vsi->back->hw;
|
||||
|
||||
/* If Rx flex desc is supported, select RXDID for Rx queues.
|
||||
* Otherwise, use legacy 32byte descriptor format.
|
||||
* Legacy 16byte descriptor is not supported. If this RXDID
|
||||
* is selected, return error.
|
||||
*/
|
||||
if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC) {
|
||||
if (!(BIT(rxdid) & pf->supported_rxdids))
|
||||
goto error_param;
|
||||
} else {
|
||||
rxdid = ICE_RXDID_LEGACY_1;
|
||||
}
|
||||
|
||||
ice_write_qrxflxp_cntxt(hw, pf_q, rxdid, 0x03, false);
|
||||
}
|
||||
|
||||
/* send the response to the VF */
|
||||
|
Loading…
x
Reference in New Issue
Block a user