Skip to content

Commit

Permalink
libata: clear ering on resume
Browse files Browse the repository at this point in the history
Error timestamps are in jiffies which doesn't run while suspended and
PHY events during resume isn't too uncommon.  When the two are
combined, it can lead to unnecessary speed downs if the machine is
suspended and resumed repeatedly.  Clear error history on resume.

This was reported and verified in bnc#486803 by Vladimir Botka.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Vladimir Botka <vbotka@novell.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed May 11, 2009
1 parent 6ad58b2 commit 6f9c1ea
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions drivers/ata/libata-eh.c
Original file line number Diff line number Diff line change
@@ -3507,6 +3507,8 @@ static void ata_eh_handle_port_suspend(struct ata_port *ap)
*/
static void ata_eh_handle_port_resume(struct ata_port *ap)
{
struct ata_link *link;
struct ata_device *dev;
unsigned long flags;
int rc = 0;

@@ -3521,6 +3523,17 @@ static void ata_eh_handle_port_resume(struct ata_port *ap)

WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED));

/*
* Error timestamps are in jiffies which doesn't run while
* suspended and PHY events during resume isn't too uncommon.
* When the two are combined, it can lead to unnecessary speed
* downs if the machine is suspended and resumed repeatedly.
* Clear error history.
*/
ata_for_each_link(link, ap, HOST_FIRST)
ata_for_each_dev(dev, link, ALL)
ata_ering_clear(&dev->ering);

ata_acpi_set_state(ap, PMSG_ON);

if (ap->ops->port_resume)

0 comments on commit 6f9c1ea

Please sign in to comment.