1. 28 1月, 2009 1 次提交
    • R
      PCI PM: Fix suspend error paths and testing facility breakage · 418e4da3
      Rafael J. Wysocki 提交于
      If one of device drivers refuses to suspend by returning error code
      from its ->suspend() callback, the devices that have already been
      suspended are resumed by executing their drivers' ->resume()
      callbacks.  Some of these callbacks expect the device's
      configuration space to be restored if the device has been put into
      D3 before they are called.  Unfortunately, this mechanism has been
      broken by recent changes moving the restoration of config spaces
      of some devices (most importantly, USB controllers and HDA Intel)
      into the resume callbacks executed with interrupts off.  Obviously,
      these callbacks are not invoked in the suspend error path and, as a
      result, the system cannot be successfully brought back into the
      working state in case of a suspend error.  The same thing happens
      in the hibernation error path right before putting the system into
      S4.
      
      Similarly, the suspend testing facility associated with the
      /sys/power/pm_test file is broken, because it uses the very same
      mechanism that is used in the suspend and hibernation error paths.
      
      Fix the breakage by making the PCI core restore the configuration
      spaces of PCI devices that haven't been restored already before
      pci_pm_resume() is called for those devices by the PM core.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      418e4da3
  2. 27 1月, 2009 39 次提交