• Brett Creeley's avatar
    ice: Use GLINT_DYN_CTL to disable VF's interrupts · 72ecb896
    Brett Creeley authored
    Currently in ice_free_vf_res() we are writing to the VFINT_DYN_CTLN
    register in the PF's function space to disable all VF's interrupts. This
    is incorrect because this register is only for use in the VF's function
    space. This becomes obvious when seeing that the valid indices used for
    the VFINT_DYN_CTLN register is from 0-63, which is the maximum number of
    interrupts for a VF (not including the OICR interrupt). Fix this by
    writing to the GLINT_DYN_CTL register for each VF. We can do this
    because we keep track of each VF's first_vector_idx inside of the PF's
    function space and the number of interrupts given to each VF.
    
    Also in ice_free_vfs() we were disabling Rx/Tx queues after calling
    pci_disable_sriov(). One part of disabling the Tx queues causes the PF
    driver to trigger a software interrupt, which causes the VF's napi
    routine to run. This doesn't currently work because pci_disable_sriov()
    causes iavf_remove() to be called which disables interrupts. Fix this by
    disabling Rx/Tx queues prior to pci_disable_sriov().
    Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
    Signed-off-by: default avatarAnirudh Venkataramanan <anirudh.venkataramanan@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    72ecb896
ice_virtchnl_pf.c 82.1 KB