aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorLin Ming <ming.m.lin@intel.com>2011-12-22 01:50:48 -0500
committerJeff Garzik <jgarzik@redhat.com>2012-01-08 19:14:59 -0500
commite90b1e5a6e04c8892007ff8db20ef6d4fbdb5402 (patch)
tree0a08c16dcf48edbaa1307a873440bddd04c994b7 /drivers/ata
parent28fd00d42cca178638f51c08efa986a777c24a4b (diff)
ata: update ata port's runtime status during system resume
The ata port is brought back to full power state during system resume. So its runtime PM status will have to be updated to reflect the actual post-system sleep status. This also fixes below warning during system suspend/resume. WARNING: at /work/linux/drivers/ata/libata-eh.c:4034 ata_scsi_port_error_handler+0x89/0x557() 4034 WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED)); Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-core.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index d5935e4f3529..ba1ed9b3acc3 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5298,7 +5298,7 @@ static int ata_port_suspend(struct device *dev)
5298 return ata_port_suspend_common(dev); 5298 return ata_port_suspend_common(dev);
5299} 5299}
5300 5300
5301static int ata_port_resume(struct device *dev) 5301static int ata_port_resume_common(struct device *dev)
5302{ 5302{
5303 struct ata_port *ap = to_ata_port(dev); 5303 struct ata_port *ap = to_ata_port(dev);
5304 int rc; 5304 int rc;
@@ -5308,6 +5308,20 @@ static int ata_port_resume(struct device *dev)
5308 return rc; 5308 return rc;
5309} 5309}
5310 5310
5311static int ata_port_resume(struct device *dev)
5312{
5313 int rc;
5314
5315 rc = ata_port_resume_common(dev);
5316 if (!rc) {
5317 pm_runtime_disable(dev);
5318 pm_runtime_set_active(dev);
5319 pm_runtime_enable(dev);
5320 }
5321
5322 return rc;
5323}
5324
5311static int ata_port_runtime_idle(struct device *dev) 5325static int ata_port_runtime_idle(struct device *dev)
5312{ 5326{
5313 return pm_runtime_suspend(dev); 5327 return pm_runtime_suspend(dev);
@@ -5318,7 +5332,7 @@ static const struct dev_pm_ops ata_port_pm_ops = {
5318 .resume = ata_port_resume, 5332 .resume = ata_port_resume,
5319 5333
5320 .runtime_suspend = ata_port_suspend_common, 5334 .runtime_suspend = ata_port_suspend_common,
5321 .runtime_resume = ata_port_resume, 5335 .runtime_resume = ata_port_resume_common,
5322 .runtime_idle = ata_port_runtime_idle, 5336 .runtime_idle = ata_port_runtime_idle,
5323}; 5337};
5324 5338