• B
    ice: Fix MSI-X vector fallback logic · 5aaffab4
    Brett Creeley 提交于
    stable inclusion
    from stable-5.10.13
    commit b2a76ea0479ead146dd77f32feaac469182ebd94
    bugzilla: 47995
    
    --------------------------------
    
    [ Upstream commit f3fe97f6 ]
    
    The current MSI-X enablement logic tries to enable best-case MSI-X
    vectors and if that fails we only support a bare-minimum set. This
    includes a single MSI-X for 1 Tx and 1 Rx queue and a single MSI-X
    for the OICR interrupt. Unfortunately, the driver fails to load when we
    don't get as many MSI-X as requested for a couple reasons.
    
    First, the code to allocate MSI-X in the driver tries to allocate
    num_online_cpus() MSI-X for LAN traffic without caring about the number
    of MSI-X actually enabled/requested from the kernel for LAN traffic.
    So, when calling ice_get_res() for the PF VSI, it returns failure
    because the number of available vectors is less than requested. Fix
    this by not allowing the PF VSI to allocation  more than
    pf->num_lan_msix MSI-X vectors and pf->num_lan_msix Rx/Tx queues.
    Limiting the number of queues is done because we don't want more than
    1 Tx/Rx queue per interrupt due to performance conerns.
    
    Second, the driver assigns pf->num_lan_msix = 2, to account for LAN
    traffic and the OICR. However, pf->num_lan_msix is only meant for LAN
    MSI-X. This is causing a failure when the PF VSI tries to
    allocate/reserve the minimum pf->num_lan_msix because the OICR MSI-X has
    already been reserved, so there may not be enough MSI-X vectors left.
    Fix this by setting pf->num_lan_msix = 1 for the failure case. Then the
    ICE_MIN_MSIX accounts for the LAN MSI-X and the OICR MSI-X needed for
    the failure case.
    
    Update the related defines used in ice_ena_msix_range() to align with
    the above behavior and remove the unused RDMA defines because RDMA is
    currently not supported. Also, remove the now incorrect comment.
    
    Fixes: 152b978a ("ice: Rework ice_ena_msix_range")
    Signed-off-by: NBrett Creeley <brett.creeley@intel.com>
    Tested-by: NTony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: NTony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
    Acked-by: NXie XiuQi <xiexiuqi@huawei.com>
    5aaffab4
ice_main.c 180.3 KB