Re: BISECTED: 2.6.29-rc2 regression: hibernation hang on eeepc-701

From: Rafael J. Wysocki
Date: Thu Jan 22 2009 - 17:06:24 EST


On Thursday 22 January 2009, Alan Jenkins wrote:
> Rafael J. Wysocki wrote:
> > On Thursday 22 January 2009, Alan Jenkins wrote:
> >
> >> Alan Jenkins wrote:
> >>
> >>> Hibernation hangs just after writing the image. With s2disk I can see
> >>> this from the console messages. The same hang happens with kernel
> >>> swsusp ('echo disk | sudo tee /sys/power/state'), and I can see that
> >>> the image has been written from the HDD led.
> >>>
> >>> In either case, I can still hard-power-off and resume from hibernation.
> >>>
> >>> It doesn't hang if I use the shutdown method (either 'echo shutdown |
> >>> sudo tee /sys/power/disk' or 's2disk -P "shutdown method=shutdown"').
> >>>
> >>>
> >> I've bisected this to commit 571ff7584bb9e05fca0eb79752ae55a46faf3a98.
> >> It doesn't revert cleanly from RC2.
> >>
> >> I think it's distinct from the other two reported suspend regressions.
> >> I'm not using acpi-cpufreq, and the issue doesn't affect resume.
> >>
> >
> > It looks distinct.
> >
> > Do you suspend this box to RAM and does it work?
> >
> Yes, I do use STR on it occasionally, and it still works in RC2.
>
> > Please retest with the appended patch applied.
> >
>
> That fixes it.

OK, it won't hurt to apply it.

Still, the hardware or the BIOS in your box seems to be broken, or both, so I'd
like to debug it a bit more if you don't mind.

Can you please test the patch below instead of the previous one?

Rafael

---
drivers/pci/pci-driver.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

Index: linux-2.6/drivers/pci/pci-driver.c
===================================================================
--- linux-2.6.orig/drivers/pci/pci-driver.c
+++ linux-2.6/drivers/pci/pci-driver.c
@@ -660,7 +660,10 @@ static int pci_pm_poweroff(struct device
if (pci_has_legacy_pm_support(pci_dev))
return pci_legacy_suspend(dev, PMSG_HIBERNATE);

- if (drv && drv->pm && drv->pm->poweroff) {
+ if (!drv || !drv->pm)
+ return pci_set_power_state(dev, PCI_D3hot);
+
+ if (drv->pm->poweroff) {
error = drv->pm->poweroff(dev);
suspend_report_result(drv->pm->poweroff, error);
}

--
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/