mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-18 17:12:07 +00:00
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:
|
||
|---|---|---|
| .. | ||
| ice_adminq_cmd.h | ||
| ice_arfs.c | ||
| ice_arfs.h | ||
| ice_base.c | ||
| ice_base.h | ||
| ice_common.c | ||
| ice_common.h | ||
| ice_controlq.c | ||
| ice_controlq.h | ||
| ice_dcb_lib.c | ||
| ice_dcb_lib.h | ||
| ice_dcb_nl.c | ||
| ice_dcb_nl.h | ||
| ice_dcb.c | ||
| ice_dcb.h | ||
| ice_devids.h | ||
| ice_devlink.c | ||
| ice_devlink.h | ||
| ice_ethtool_fdir.c | ||
| ice_ethtool.c | ||
| ice_fdir.c | ||
| ice_fdir.h | ||
| ice_flex_pipe.c | ||
| ice_flex_pipe.h | ||
| ice_flex_type.h | ||
| ice_flow.c | ||
| ice_flow.h | ||
| ice_fltr.c | ||
| ice_fltr.h | ||
| ice_fw_update.c | ||
| ice_fw_update.h | ||
| ice_hw_autogen.h | ||
| ice_lan_tx_rx.h | ||
| ice_lib.c | ||
| ice_lib.h | ||
| ice_main.c | ||
| ice_nvm.c | ||
| ice_nvm.h | ||
| ice_osdep.h | ||
| ice_protocol_type.h | ||
| ice_sched.c | ||
| ice_sched.h | ||
| ice_sriov.c | ||
| ice_sriov.h | ||
| ice_status.h | ||
| ice_switch.c | ||
| ice_switch.h | ||
| ice_txrx_lib.c | ||
| ice_txrx_lib.h | ||
| ice_txrx.c | ||
| ice_txrx.h | ||
| ice_type.h | ||
| ice_virtchnl_pf.c | ||
| ice_virtchnl_pf.h | ||
| ice_xsk.c | ||
| ice_xsk.h | ||
| ice.h | ||
| Makefile | ||