From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Tejun Heo <tj@kernel.org>
Cc: Stephan Diestelhorst <stephan.diestelhorst@gmail.com>,
linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org,
linux-pm@lists.osdl.org, stephan.diestelhorst@amd.com
Subject: [PATCH] SATA / AHCI: Do not play with the link PM during suspend to RAM (was: Re: HDD not suspending properly / dead on resume)
Date: Wed, 28 Jul 2010 23:50:09 +0200 [thread overview]
Message-ID: <201007282350.09676.rjw@sisk.pl> (raw)
In-Reply-To: <4C384580.2080507@kernel.org>
On Saturday, July 10, 2010, Tejun Heo wrote:
> On 07/10/2010 08:50 AM, Stephan Diestelhorst wrote:
> >> I have a box where this problem is kind of reproducible, but it happens _very_
> >> rarely. Also I can't reproduce it on demand running suspend-resume in a tight
> >> loop. Are you able to reproduce it more regurarly?
> >
> > For me it is much more reproducible. If I run multiple direct writing
> > dd-s to the disk in question I trigger it rather reliably (~75% or
> > higher). See the attached script from an earlier email.
> > Maybe that helps triggering your case more reliabl, too?
>
> Can you please try the following git tree?
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git libata-irq-expect
That didn't help, but the appended patch fixes the problem for me.
Thanks,
Rafael
---
From: Rafael J. Wysocki <rjw@sisk.pl>
Subject: SATA / AHCI: Do not play with the link PM during suspend to RAM
My Acer Ferrari One occasionally loses communication with the disk
(which in fact is an Intel SSD) during suspend to RAM. The symptom
is that the IDENTIFY command times out during suspend and the device
is dropped by the kernel, so it is not available during resume and
the system is unuseable as a result. The failure is not readily
reproducible, although it happens once every several suspends and
it always happens after the disk has been shut down by the SCSI
layer's suspend routine.
I was able to track this issue down to the link PM manipulations
carried out by ata_host_suspend(), which probably means that the
SSD's firmware is not implemented correctly. However, the AHCI
driver, which is used on the affected box, doesn't really need to do
anything with the link PM during suspend to RAM, because the whole
controller is going to be put into D3 by ata_pci_device_do_suspend()
immediately and it will undergo full reset during the subsequent
resume anyway. For this reason, make the AHCI driver avoid calling
ata_host_suspend() during suspend to RAM which fixes the problem and
makes sense as a general optimization.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
drivers/ata/ahci.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
Index: linux-2.6/drivers/ata/ahci.c
===================================================================
--- linux-2.6.orig/drivers/ata/ahci.c
+++ linux-2.6/drivers/ata/ahci.c
@@ -595,6 +595,7 @@ static int ahci_pci_device_suspend(struc
struct ahci_host_priv *hpriv = host->private_data;
void __iomem *mmio = hpriv->mmio;
u32 ctl;
+ int rc = 0;
if (mesg.event & PM_EVENT_SUSPEND &&
hpriv->flags & AHCI_HFLAG_NO_SUSPEND) {
@@ -614,7 +615,15 @@ static int ahci_pci_device_suspend(struc
readl(mmio + HOST_CTL); /* flush */
}
- return ata_pci_device_suspend(pdev, mesg);
+ if (mesg.event == PM_EVENT_SUSPEND)
+ pdev->dev.power.power_state = mesg;
+ else
+ rc = ata_host_suspend(host, mesg);
+
+ if (!rc)
+ ata_pci_device_do_suspend(pdev, mesg);
+
+ return rc;
}
static int ahci_pci_device_resume(struct pci_dev *pdev)
next prev parent reply other threads:[~2010-07-28 21:51 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-09 15:50 HDD not suspending properly / dead on resume Stephan Diestelhorst
2010-07-09 21:47 ` Stephan Diestelhorst
2010-07-09 21:53 ` Rafael J. Wysocki
2010-07-09 23:04 ` Stephan Diestelhorst
2010-07-10 0:06 ` Rafael J. Wysocki
2010-07-10 6:50 ` Stephan Diestelhorst
2010-07-10 10:03 ` Tejun Heo
2010-07-10 13:45 ` Rafael J. Wysocki
2010-07-28 21:50 ` Rafael J. Wysocki [this message]
2010-07-30 14:18 ` [PATCH] SATA / AHCI: Do not play with the link PM during suspend to RAM Tejun Heo
2010-08-05 16:08 ` Tejun Heo
2010-08-05 19:58 ` Rafael J. Wysocki
2010-08-06 6:30 ` Stephan Diestelhorst
2010-08-06 7:06 ` Tejun Heo
2010-08-06 9:04 ` Stephan Diestelhorst
2010-08-17 7:51 ` Stephan Diestelhorst
2010-08-17 8:08 ` Tejun Heo
2010-08-17 9:32 ` Stephan Diestelhorst
2010-08-17 10:15 ` Tejun Heo
2010-08-17 10:29 ` Stephan Diestelhorst
2010-08-17 10:51 ` Stephan Diestelhorst
2010-08-17 15:04 ` Tejun Heo
2010-08-17 21:28 ` Stephan Diestelhorst
2010-08-18 6:12 ` Tejun Heo
2010-08-19 16:23 ` Stephan Diestelhorst
2010-08-23 12:03 ` Tejun Heo
2010-08-23 18:58 ` Rafael J. Wysocki
2010-08-24 7:37 ` Tejun Heo
2010-08-24 20:39 ` Rafael J. Wysocki
2010-08-26 23:09 ` Rafael J. Wysocki
2010-08-26 23:46 ` Rafael J. Wysocki
2010-09-02 9:06 ` Tejun Heo
2010-09-02 10:02 ` [PATCH] libata: skip EH autopsy and recovery during suspend Tejun Heo
2010-09-02 14:33 ` Stephan Diestelhorst
2010-09-02 20:11 ` Rafael J. Wysocki
2010-09-02 20:52 ` Stephan Diestelhorst
2010-09-07 11:54 ` Stephan Diestelhorst
2010-09-02 20:16 ` Rafael J. Wysocki
2010-09-02 20:25 ` Tejun Heo
2010-09-02 20:28 ` Rafael J. Wysocki
2010-09-02 20:33 ` Tejun Heo
2010-09-02 21:01 ` [linux-pm] " Alan Stern
2010-09-02 21:09 ` Rafael J. Wysocki
2010-09-03 8:55 ` [linux-pm] " Tejun Heo
2010-09-03 14:16 ` Alan Stern
2010-09-07 12:05 ` [PATCH #upstream-fixes] " Tejun Heo
2010-08-24 16:07 ` [PATCH] SATA / AHCI: Do not play with the link PM during suspend to RAM Stephan Diestelhorst
2010-08-24 16:11 ` Stephan Diestelhorst
2010-08-26 16:15 ` Stephan Diestelhorst
2010-08-26 18:24 ` Rafael J. Wysocki
2010-08-27 23:35 ` Rafael J. Wysocki
2010-09-02 14:31 ` Stephan Diestelhorst
2010-08-17 11:19 ` Rafael J. Wysocki
2010-08-17 11:29 ` Tejun Heo
2010-08-17 12:10 ` Stephan Diestelhorst
2010-08-17 12:09 ` Tejun Heo
2010-08-02 20:48 ` [PATCH] SATA / AHCI: Do not play with the link PM during suspend to RAM (was: Re: HDD not suspending properly / dead on resume) Stephan Diestelhorst
2010-08-02 21:38 ` Rafael J. Wysocki
2010-08-03 8:36 ` Stephan Diestelhorst
2010-08-03 21:13 ` Rafael J. Wysocki
2010-07-10 13:08 ` HDD not suspending properly / dead on resume Rafael J. Wysocki
2010-07-12 15:35 ` Maciej Rutecki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201007282350.09676.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.osdl.org \
--cc=stephan.diestelhorst@amd.com \
--cc=stephan.diestelhorst@gmail.com \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).