Re: [PATCH 01/10] libata: power down controller only on PMSG_SUSPEND

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff Garzik wrote:
Tejun Heo wrote:
The controller only needs to be powered down on PMSG_SUSPEND.  Skip
powering down for all other messages.  This makes disk suspend prep
cycle more efficient and helps controllers which have problems waking
up from D3hot without intervening power removal.

Signed-off-by: Tejun Heo <htejun@xxxxxxxxx>

---

 drivers/scsi/libata-core.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

85016ad86323924d10dc99ac9d7e9e5c0b967b8e
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 9a3bd15..51d3b4b 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -5661,7 +5661,10 @@ int ata_pci_device_suspend(struct pci_de
 {
     pci_save_state(pdev);
     pci_disable_device(pdev);
-    pci_set_power_state(pdev, PCI_D3hot);
+
+    if (state.event == PM_EVENT_SUSPEND)
+        pci_set_power_state(pdev, PCI_D3hot);

If this change makes sense for the D0->D3 transition, surely it would make sense to cover the other operations (save-state, disable) as well?

It probably makes sense for disable but not for save-state. Swsusp takes snapshot of memory after freezing all devices and resumes again to write the snapshot. Resume must be able to reinitialize the hardware from scratch and it depends on PCI config regs saved w/ pci_save_state(). So, state must be saved during freeze.

I'll put pci_disable_device() in the if clause and retest. That should work.

--
tejun
-
: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux