Skip to content

Commit

Permalink
ata: update ata port's runtime status during system resume
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lin Ming authored and Jeff Garzik committed Jan 9, 2012
1 parent 28fd00d commit e90b1e5
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions drivers/ata/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -5298,7 +5298,7 @@ static int ata_port_suspend(struct device *dev)
return ata_port_suspend_common(dev);
}

static int ata_port_resume(struct device *dev)
static int ata_port_resume_common(struct device *dev)
{
struct ata_port *ap = to_ata_port(dev);
int rc;
Expand All @@ -5308,6 +5308,20 @@ static int ata_port_resume(struct device *dev)
return rc;
}

static int ata_port_resume(struct device *dev)
{
int rc;

rc = ata_port_resume_common(dev);
if (!rc) {
pm_runtime_disable(dev);
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
}

return rc;
}

static int ata_port_runtime_idle(struct device *dev)
{
return pm_runtime_suspend(dev);
Expand All @@ -5318,7 +5332,7 @@ static const struct dev_pm_ops ata_port_pm_ops = {
.resume = ata_port_resume,

.runtime_suspend = ata_port_suspend_common,
.runtime_resume = ata_port_resume,
.runtime_resume = ata_port_resume_common,
.runtime_idle = ata_port_runtime_idle,
};

Expand Down

0 comments on commit e90b1e5

Please sign in to comment.