]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
ice: avoid IRQ collision to fix init failure on ACPI S3 resume
authorEn-Wei Wu <en-wei.wu@canonical.com>
Thu, 30 May 2024 14:21:31 +0000 (22:21 +0800)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Thu, 13 Jun 2024 15:24:17 +0000 (08:24 -0700)
commitbc69ad74867dba1377abe14356c94a946d9837a3
treef5e2de38cac512bfbb48bce2872dadc96fa6558b
parenta9b9741854a9fe9df948af49ca5514e0ed0429df
ice: avoid IRQ collision to fix init failure on ACPI S3 resume

A bug in https://bugzilla.kernel.org/show_bug.cgi?id=218906 describes
that irdma would break and report hardware initialization failed after
suspend/resume with Intel E810 NIC (tested on 6.9.0-rc5).

The problem is caused due to the collision between the irq numbers
requested in irdma and the irq numbers requested in other drivers
after suspend/resume.

The irq numbers used by irdma are derived from ice's ice_pf->msix_entries
which stores mappings between MSI-X index and Linux interrupt number.
It's supposed to be cleaned up when suspend and rebuilt in resume but
it's not, causing irdma using the old irq numbers stored in the old
ice_pf->msix_entries to request_irq() when resume. And eventually
collide with other drivers.

This patch fixes this problem. On suspend, we call ice_deinit_rdma() to
clean up the ice_pf->msix_entries (and free the MSI-X vectors used by
irdma if we've dynamically allocated them). On resume, we call
ice_init_rdma() to rebuild the ice_pf->msix_entries (and allocate the
MSI-X vectors if we would like to dynamically allocate them).

Fixes: f9f5301e7e2d ("ice: Register auxiliary device to provide RDMA")
Tested-by: Cyrus Lien <cyrus.lien@canonical.com>
Signed-off-by: En-Wei Wu <en-wei.wu@canonical.com>
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_main.c