Re: Suspend to ram regression (2.6.24-rc1-git)

From: Kristen Carlson Accardi
Date: Fri Nov 02 2007 - 19:38:34 EST


On Thu, 1 Nov 2007 09:41:46 +0100
Jens Axboe <jens.axboe@xxxxxxxxxx> wrote:

> On Wed, Oct 31 2007, Jens Axboe wrote:
> > Hi,
> >
> > My x60 stopped suspending about two days ago. It just freezes after
> > printing
> >
> > Suspending console(s)
> >
> > where it would normally turn everything off and the 'moon' light would
> > go on. Posting this message in case somebody else knows what is up, if
> > not I'll do a bisect on it tomorrow.
>
> Did the bisect, it points to this commit:
>
> 1556594f913fa81d008cecfe46d7211c919a853 is first bad commit
> commit 31556594f913fa81d008cecfe46d7211c919a853
> Author: Kristen Carlson Accardi <kristen.c.accardi@xxxxxxxxx>
> Date: Thu Oct 25 01:33:26 2007 -0400
>
> [libata] AHCI: add hw link power management support
>
> Booting any kernel after this commit fails suspending to ram, it just
> sits there forever.
>
> --
> Jens Axboe
>

Does this patch fix your problem? It seems to get hung up while disabling
DIPM, and after thinking about this a bit, I don't think we really need
to do this anyway.


Don't disable dipm with SET FEATURES

Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@xxxxxxxxx>

---
drivers/ata/libata-core.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

Index: 2.6-git/drivers/ata/libata-core.c
===================================================================
--- 2.6-git.orig/drivers/ata/libata-core.c 2007-11-01 09:59:17.000000000 -0700
+++ 2.6-git/drivers/ata/libata-core.c 2007-11-02 16:35:13.000000000 -0700
@@ -676,10 +676,11 @@ static int ata_dev_set_dipm(struct ata_d
if (rc)
return rc;

- /* disable DIPM */
- if (ata_dev_enabled(dev) && (dev->flags & ATA_DFLAG_DIPM))
- err_mask = ata_dev_set_feature(dev,
- SETFEATURES_SATA_DISABLE, SATA_DIPM);
+ /*
+ * we don't have to disable DIPM since IPM flags
+ * disallow transitions to SLUMBER, which effectively
+ * disable DIPM if it does not support PARTIAL
+ */
break;
case NOT_AVAILABLE:
case MAX_PERFORMANCE:
@@ -689,10 +690,11 @@ static int ata_dev_set_dipm(struct ata_d
if (rc)
return rc;

- /* disable DIPM */
- if (ata_dev_enabled(dev) && (dev->flags & ATA_DFLAG_DIPM))
- err_mask = ata_dev_set_feature(dev,
- SETFEATURES_SATA_DISABLE, SATA_DIPM);
+ /*
+ * we don't have to disable DIPM since IPM flags
+ * disallow all transitions which effectively
+ * disable DIPM anyway.
+ */
break;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/