summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2009-01-16 21:54:43 +0100
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-01-16 12:57:58 -0800
commitaa8c6c93747f7b55fa11e1624fec8ca33763a805 (patch)
treee40bf643ec9916dd2738ef9aaafdfa49ad8b4781 /lib
parent0db29af1e767464d71b89410d61a1e5b668d0370 (diff)
downloadtalos-obmc-linux-aa8c6c93747f7b55fa11e1624fec8ca33763a805.tar.gz
talos-obmc-linux-aa8c6c93747f7b55fa11e1624fec8ca33763a805.zip
PCI PM: Restore standard config registers of all devices early
There is a problem in our handling of suspend-resume of PCI devices that many of them have their standard config registers restored with interrupts enabled and they are put into the full power state with interrupts enabled as well. This may lead to the following scenario: * an interrupt vector is shared between two or more devices * one device is resumed earlier and generates an interrupt * the interrupt handler of another device tries to handle it and attempts to access the device the config space of which hasn't been restored yet and/or which still is in a low power state * the system crashes as a result To prevent this from happening we should restore the standard configuration registers of all devices with interrupts disabled and we should put them into the D0 power state right after that. Unfortunately, this cannot be done using the existing pci_set_power_state(), because it can sleep. Also, to do it we have to make sure that the config spaces of all devices were actually saved during suspend. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud