• En-Wei Wu's avatar
    ice: avoid IRQ collision to fix init failure on ACPI S3 resume · bc69ad74
    En-Wei Wu authored
    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: f9f5301e ("ice: Register auxiliary device to provide RDMA")
    Tested-by: default avatarCyrus Lien <cyrus.lien@canonical.com>
    Signed-off-by: default avatarEn-Wei Wu <en-wei.wu@canonical.com>
    Reviewed-by: default avatarWojciech Drewek <wojciech.drewek@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    bc69ad74
ice_main.c 256 KB