Re: [PATCH 1/8] PM: Opportunistic suspend support.

Arve Hjønnevåg
2010-05-27T23:36:31Z

2010/5/27 Dmitry Torokhov <dmitry.torokhov@gmail.com>:
> On Wed, May 26, 2010 at 05:52:40PM -0700, Arve Hjønnevåg wrote:
>> 2010/5/26 Alan Stern <stern@rowland.harvard.edu>:
>> > On Wed, 26 May 2010, Arve Hjønnevåg wrote:
>> >
>> >> > I must be missing something.  In Arve's patch 1/8, if the system is in
>> >> > opportunistic suspend, and a wakeup event occurs but no suspend
>> >> > blockers get enabled by the handler, what causes the system to go back
>> >> > into suspend after the event is handled?  Isn't that a loop of some
>> >> > sort?
>> >> >
>> >>
>> >> Yes it is a loop. I think what you are missing is that it only loops
>> >> repeatedly if the driver that aborts suspend does not use a suspend
>> >> blocker.
>> >
>> > You mean "the driver that handles the wakeup event".  I was asking what
>> > happened if suspend succeeded and then a wakeup occurred.  But yes, if
>> > a suspend blocker is used then its release causes another suspend
>> > attempt, with no looping.
>> >
>> >> > And even if it isn't, so what?  What's wrong with looping behavior?
>> >>
>> >> It is a significant power drain.
>> >
>> > Not in the situation I was discussing.
>> >
>>
>> If you meant it spend most of the time suspended, then I agree. It
>> only wastes power when a driver blocks suspend by returning an error
>> from its suspend hook and we are forced to loop doing no useful work.
>>
>
> If driver refuses to suspend that means there are events that need
> processing. I fail to see why it would be called "looping doing no
> useful work".

Because the useful work is done in another thread. All the loop does
is check if the useful work has completed which most likely will slow
down the useful work. Blocking suspend with a suspend blocker until
the useful work is done is more efficient.

--
Arve Hjønnevåg