• Brett Creeley's avatar
    ice: Fix Tx timeout when link is toggled on a VF's interface · 4dc926d3
    Brett Creeley authored
    Currently if the iavf is loaded and a VF link transitions from up to
    down to up again a Tx timeout will be triggered. This happens because
    Tx/Rx queue interrupts are only enabled when receiving the
    VIRTCHNL_OP_CONFIG_MAP_IRQ message, which happens on reset or initial
    iavf driver load, but not when bringing link up. This is problematic
    because they are disabled on the VIRTCHNL_OP_DISABLE_QUEUES message,
    which is part of bringing a VF's link down. However, they are not
    enabled on the VIRTCHNL_OP_ENABLE_QUEUES message, which is part of
    bringing a VF's link up.
    
    Fix this by re-enabling the VF's Rx and Tx queue interrupts when they
    were previously configured. This is done by first checking to make
    sure the previous value in QINT_[R|T]QCTL.MSIX_INDX is not 0, which
    is used to represent the OICR in the VF's interrupt space. If the
    MSIX_INDX is non-zero then enable the interrupt by setting the
    QINT_[R|T]CTL.CAUSE_ENA bit to 1.
    Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    4dc926d3
ice_virtchnl_pf.c 104 KB