lkml.org 
[lkml]   [2022]   [Apr]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 234/343] ice: Do not skip not enabled queues in ice_vc_dis_qs_msg
    Date
    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 1be3cd4b2bef..2bee8f10ad89 100644
    --- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
    +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
    @@ -3351,9 +3351,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


    \
     
     \ /
      Last update: 2022-04-12 11:31    [W:2.663 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site