| From 6d34a5cdf0f6b5f01808d37846dae782b12a0dd1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 4 Apr 2022 11:35:48 -0700 |
| Subject: ice: Do not skip not enabled queues in ice_vc_dis_qs_msg |
| |
| From: Anatolii Gerasymenko <anatolii.gerasymenko@intel.com> |
| |
| [ Upstream commit 05ef6813b234db3196f083b91db3963f040b65bb ] |
| |
| Disable check for queue being enabled in ice_vc_dis_qs_msg, because |
| there could be a case when queues were created, but were not enabled. |
| We still need to delete those queues. |
| |
| Normal workflow for VF looks like: |
| Enable path: |
| VIRTCHNL_OP_ADD_ETH_ADDR (opcode 10) |
| VIRTCHNL_OP_CONFIG_VSI_QUEUES (opcode 6) |
| VIRTCHNL_OP_ENABLE_QUEUES (opcode 8) |
| |
| Disable path: |
| VIRTCHNL_OP_DISABLE_QUEUES (opcode 9) |
| VIRTCHNL_OP_DEL_ETH_ADDR (opcode 11) |
| |
| The issue appears only in stress conditions when VF is enabled and |
| disabled very fast. |
| Eventually there will be a case, when queues are created by |
| VIRTCHNL_OP_CONFIG_VSI_QUEUES, but are not enabled by |
| VIRTCHNL_OP_ENABLE_QUEUES. |
| In turn, these queues are not deleted by VIRTCHNL_OP_DISABLE_QUEUES, |
| because there is a check whether queues are enabled in |
| ice_vc_dis_qs_msg. |
| |
| When we bring up the VF again, we will see the "Failed to set LAN Tx queue |
| context" error during VIRTCHNL_OP_CONFIG_VSI_QUEUES step. This |
| happens because old 16 queues were not deleted and VF requests to create |
| 16 more, but ice_sched_get_free_qparent in ice_ena_vsi_txq would fail to |
| find a parent node for first newly requested queue (because all nodes |
| are allocated to 16 old queues). |
| |
| Testing Hints: |
| |
| Just enable and disable VF fast enough, so it would be disabled before |
| reaching VIRTCHNL_OP_ENABLE_QUEUES. |
| |
| while true; do |
| ip link set dev ens785f0v0 up |
| sleep 0.065 # adjust delay value for you machine |
| ip link set dev ens785f0v0 down |
| done |
| |
| Fixes: 77ca27c41705 ("ice: add support for virtchnl_queue_select.[tx|rx]_queues bitmap") |
| Signed-off-by: Anatolii Gerasymenko <anatolii.gerasymenko@intel.com> |
| Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com> |
| Signed-off-by: Alice Michael <alice.michael@intel.com> |
| Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |
| index e17813fb71a1..91182a6bc137 100644 |
| --- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |
| +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |
| @@ -3383,9 +3383,9 @@ static int ice_vc_dis_qs_msg(struct ice_vf *vf, u8 *msg) |
| goto error_param; |
| } |
| |
| - /* Skip queue if not enabled */ |
| if (!test_bit(vf_q_id, vf->txq_ena)) |
| - continue; |
| + dev_dbg(ice_pf_to_dev(vsi->back), "Queue %u on VSI %u is not enabled, but stopping it anyway\n", |
| + vf_q_id, vsi->vsi_num); |
| |
| ice_fill_txq_meta(vsi, ring, &txq_meta); |
| |
| -- |
| 2.35.1 |
| |