Re: [BUG] MIPS: Hibernation in the latest linux-mips:master branch not work

Wu Zhangjin
2009-07-01T14:55:52Z

On Wed, 2009-07-01 at 15:16 +0800, Wu Zhangjin wrote:
> On Tue, 2009-06-30 at 15:45 +0100, Ralf Baechle wrote:
> > On Tue, Jun 30, 2009 at 10:41:08PM +0800, Wu Zhangjin wrote:
> >
> > > I just updated my git repository to the master branch of the latest
> > > linux-mips git repository, and tested the STD/Hibernation support on
> > > fuloong2e and yeeloong2f, it failed:
> > >
> > > when using the no_console_suspend kernel command line to debug, it
> > > stopped on:
> > >
> > > PM: Shringking memory... done (1000 pages freed)
> > > PM: Freed 160000 kbytes in 1.68 seconds (95.23 MB/s)
> > > PM: Creating hibernation image:
> > > PM: Need to copy 5053 pages
> > > PM: Hibernation image created (4195 pages copied)
> > >
> > > and then, the number indicator light of keyboard works well, but can not
> > > type anything.
> > >
> > > anybody have tested it on another platform? does it work?
> >
> > At the time of the merge I tested it on Malta and found it to be working.
> >
>
> Just traced it, the executing path is something like this:
>
> hibernate(kernel/power/hibernate.c)
> --> hibernation_snapshot
> --> dpm_resume_end
> --> dpm_resume
> --> device_resume
> --> dev->bus->resume(generic_ide_resume), dev_name(dev) = 0.0
> --> blk_execute_rq
> {
> DECLARE_COMPLETION_ONSTACK(wait);
> ...
> wait_for_completion(&wait); // stop here
> ...
> }
>
> I guess there is a possible bug in the latest ide patches, I'm trying to
> find which one is 'bad'.
>

There is really a bug in one of ide patches, here it is:

commit a1317f714af7aed60ddc182d0122477cbe36ee9b
Author: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Date: Tue Jun 23 23:52:17 2009 -0700

ide: improve handling of Power Management requests

Make hwif->rq point to PM request during PM sequence and do not
allow
any other types of requests to slip in (the old comment was never
correct
as there should be no such requests generated during PM sequence).

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

I have reverted this part of the above patch, seems works, need more
tests:

-
- WARN_ON_ONCE(hwif->rq);
repeat:
prev_port = hwif->host->cur_port;
+
+ if (drive->dev_flags & IDE_DFLAG_BLOCKED)
+ rq = hwif->rq;
+ else
+ WARN_ON_ONCE(hwif->rq);
+

please get more information from this bug report:

[Bug #13663] suspend to ram regression (IDE related)
http://lkml.org/lkml/2009/6/29/341

Regards!
Wu Zhangjin