[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1276564403.19104.28.camel@HP1>
Date: Mon, 14 Jun 2010 18:13:22 -0700
From: "Michael Chan" <mchan@...adcom.com>
To: linux-pci@...r.kernel.org, netdev@...r.kernel.org
Subject: suspend/resume not working in MSIX mode
I'm debugging the bnx2 driver which doesn't work after suspend/resume if
it is running in MSI-X mode. The problem is that during suspend, the
MSI-X vectors are disabled by the following sequence on x86:
take_cpu_down() -> cpu_disable_common() -> fixup_irqs()
The MSI-X address/data used to disable the vectors are remembered in the
above sequence. During resume, these address/data are then programmed
back to the device during pci_restore_state(), causing all the vectors
to remain disabled.
Some drivers call free_irq() during suspend and request_irq() during
resume, and that should avoid the problem. bnx2 and some other drivers
do not do that. These drivers rely on pci_restore_state() to restore
the MSI-X vectors to the same working state before suspend.
What's the right way to fix this? Thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists