• Anatolii Gerasymenko's avatar
    ice: Set txq_teid to ICE_INVAL_TEID on ring creation · ccfee182
    Anatolii Gerasymenko authored
    When VF is freshly created, but not brought up, ring->txq_teid
    value is by default set to 0.
    But 0 is a valid TEID. On some platforms the Root Node of
    Tx scheduler has a TEID = 0. This can cause issues as shown below.
    
    The proper way is to set ring->txq_teid to ICE_INVAL_TEID (0xFFFFFFFF).
    
    Testing Hints:
    echo 1 > /sys/class/net/ens785f0/device/sriov_numvfs
    ip link set dev ens785f0v0 up
    ip link set dev ens785f0v0 down
    
    If we have freshly created VF and quickly turn it on and off, so there
    would be no time to reach VIRTCHNL_OP_CONFIG_VSI_QUEUES stage, then
    VIRTCHNL_OP_DISABLE_QUEUES stage will fail with error:
    [  639.531454] disable queue 89 failed 14
    [  639.532233] Failed to disable LAN Tx queues, error: ICE_ERR_AQ_ERROR
    [  639.533107] ice 0000:02:00.0: Failed to stop Tx ring 0 on VSI 5
    
    The reason for the fail is that we are trying to send AQ command to
    delete queue 89, which has never been created and receive an "invalid
    argument" error from firmware.
    
    As this queue has never been created, it's teid and ring->txq_teid
    have default value 0.
    ice_dis_vsi_txq has a check against non-existent queues:
    
    node = ice_sched_find_node_by_teid(pi->root, q_teids[i]);
    if (!node)
    	continue;
    
    But on some platforms the Root Node of Tx scheduler has a teid = 0.
    Hence, ice_sched_find_node_by_teid finds a node with teid = 0 (it is
    pi->root), and we go further to submit an erroneous request to firmware.
    
    Fixes: 37bb8390 ("ice: Move common functions out of ice_main.c part 7/7")
    Signed-off-by: default avatarAnatolii Gerasymenko <anatolii.gerasymenko@intel.com>
    Reviewed-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
    Signed-off-by: default avatarAlice Michael <alice.michael@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    ccfee182
ice_lib.c 109 KB