Re: [Update][PATCH] MM / PM: Force GFP_NOIO during suspend/hibernation and resume

Rafael J. Wysocki
2010-01-30T18:56:14Z

On Monday 25 January 2010, Alexey Starikovskiy wrote:
> Rafael J. Wysocki пишет:
> > On Saturday 23 January 2010, Maxim Levitsky wrote:
> >> On Fri, 2010-01-22 at 22:19 +0100, Rafael J. Wysocki wrote:
> >>> On Friday 22 January 2010, Maxim Levitsky wrote:
> >>>> On Fri, 2010-01-22 at 10:42 +0900, KOSAKI Motohiro wrote:
> >>>>>>>> Probably we have multiple option. but I don't think GFP_NOIO is good
> >>>>>>>> option. It assume the system have lots non-dirty cache memory and it isn't
> >>>>>>>> guranteed.
> >>>>>>> Basically nothing is guaranteed in this case. However, does it actually make
> >>>>>>> things _worse_?
> >>>>>> Hmm..
> >>>>>> Do you mean we don't need to prevent accidental suspend failure?
> >>>>>> Perhaps, I did misunderstand your intention. If you think your patch solve
> >>>>>> this this issue, I still disagree. but If you think your patch mitigate
> >>>>>> the pain of this issue, I agree it. I don't have any reason to oppose your
> >>>>>> first patch.
> >>>>> One question. Have anyone tested Rafael's $subject patch?
> >>>>> Please post test result. if the issue disapper by the patch, we can
> >>>>> suppose the slowness is caused by i/o layer.
> >>>> I did.
> >>>>
> >>>> As far as I could see, patch does solve the problem I described.
> >>>>
> >>>> Does it affect speed of suspend? I can't say for sure. It seems to be
> >>>> the same.
> >>> Thanks for testing.
> >> I'll test that too, soon.
> >> Just to note that I left my hibernate loop run overnight, and now I am
> >> posting from my notebook after it did 590 hibernate cycles.
> >
> > Did you have a chance to test it?
> >
> >> Offtopic, but Note that to achieve that I had to stop using global acpi
> >> hardware lock. I tried all kinds of things, but for now it just hands
> >> from time to time.
> >> See http://bugzilla.kernel.org/show_bug.cgi?id=14668
> >
> > I'm going to look at that later this week, although I'm not sure I can do more
> > than Alex about that.
> >
> > Rafael
> Rafael,
> If you can point to where one may insert callback to be called just before handing control to resume kernel,
> it may help...

Generally speaking, I'd do that in a .suspend() callback of one of devices.

If that's inconvenient, you can also place it in the .pre_restore() platform
hibernate callback (drivers/acpi/sleep.c). It only disables GPEs right now,
it might release the global lock as well.

The .pre_restore() callback is executed after all devices have been suspended,
so there's no danger any driver would re-acquire the global lock after that.

Rafael