Re: [PATCH 0/8] Suspend block api (version 8)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 1 Jun 2010 00:05:19 +0200
"Rafael J. Wysocki" <rjw@xxxxxxx> wrote:

> On Monday 31 May 2010, Neil Brown wrote:
> > On Thu, 27 May 2010 23:40:29 +0200 (CEST)
> > Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
> > 
> > > On Thu, 27 May 2010, Rafael J. Wysocki wrote:
> > > 
> > > > On Thursday 27 May 2010, Thomas Gleixner wrote:
> > > > > On Thu, 27 May 2010, Alan Stern wrote:
> > > > > 
> > > > > > On Thu, 27 May 2010, Felipe Balbi wrote:
> > > > > > 
> > > > > > > On Thu, May 27, 2010 at 05:06:23PM +0200, ext Alan Stern wrote:
> > > > > > > >If people don't mind, here is a greatly simplified summary of the
> > > > > > > >comments and objections I have seen so far on this thread:
> > > > > > > >
> > > > > > > >	The in-kernel suspend blocker implementation is okay, even
> > > > > > > >	beneficial.
> > > > > > > 
> > > > > > > I disagree here. I believe expressing that as QoS is much better. Let 
> > > > > > > the kernel decide which power state is better as long as I can say I 
> > > > > > > need 100us IRQ latency or 100ms wakeup latency.
> > > > > > 
> > > > > > Does this mean you believe "echo mem >/sys/power/state" is bad and
> > > > > > should be removed?  Or "echo disk >/sys/power/state"?  They pay no
> > > > > 
> > > > > mem should be replaced by an idle suspend to ram mechanism
> > > > 
> > > > Well, what about when I want the machine to suspend _regardless_ of whether
> > > > or not it's idle at the moment?  That actually happens quite often to me. :-)
> > > 
> > > Fair enough. Let's agree on a non ambigous terminology then:
> > > 
> > >      forced:
> > > 
> > > 	     suspend which you enforce via user interaction, which
> > >      	     also implies that you risk losing wakeups depending on
> > >      	     the hardware properties
> > 
> > Reasonable definition I think.  However the current implementation doesn't
> > exactly match it.
> > With the current implementation you risk losing wakeups *independent* of the
> > hardware properties.
> 
> Define "losing", please.

I did.  See next line in my original.
 "... by which I mean that they will not be seen until some other event
 effects a wake-up".  By "seen" I mean "a user-space process has had a chance
 to react to the event, including having the opportunity to abort the suspend
 (or ensure an immediate wake-up)".
Another way of saying it might be that the event - as an abstract concept -
does not reach it's final destination promptly.  This "final destination" may
be well outside the kernel.

> 
> Currently, we simply don't regard hardware signals occuring _during_ the
> suspend operation itself as wakeups (unless they are wakeup interrupts to be
> precise, because these _are_ taken into account by our current code).
> 
> The reason is that the meaning of given event may be _different_ at run time
> and after the system has been suspended.  For example, consider a power button
> on a PC box.  If it's pressed at run time, it usually means "power off the
> system" to the kernel.  After the system has been suspended, however, it means
> "wake up".  So, you have to switch from one interpretation of the event to the
> other and that's not an atomic operaition (to put it lightly).

Yes, a suspend-toggle switch is inherently racy.  It is only wake-up sources
that are not inherently racy that are interesting.  e.g. a serial line from a
GSM device which reports "You have an SMS message".
I want to be able to turn my freerunner upside-down by which I tell it (via
the accelerometers) that I am done and want it to turn off.  If a TXT message
comes in just then, I don't want it to suspend, I want it to make an alert
noise.
I can put code in to ignore the accelerometer if a txt has just recently come
in, but if the TXT arrives just as the write to /sys/power/state starts, the
UART interrupt handler could have completed before it has the PRE_SUSPEND
method called.  So the suspend will complete and the wakeup from the UART
will have been "lost" in that the event didn't get all the way to its
destination: my ear.
My freerunner has a single core so without CONFIG_PREEMPT it may be that
there is no actual race-window - maybe the PRE_SUSPENDs will all run before a
soft_irq thread has a chance to finish handling of the interrupt (my
knowledge of these details is limits).  But on a muilti-core device I think
there would definitely be a race-window.

Thanks,
NeilBrown

> 
> > Even with ideal hardware events can be lost - by which I mean that they will
> > not be seen until some other event effects a wake-up.
> > e.g. the interrupt which signals the event happens immediately before the
> > suspend is requested (or maybe at the same time as), but the process which
> > needs to handle the event doesn't get a chance to see it before the suspend
> > procedure freezes that process, and even if it did it would have no way to
> > abort the suspend.
> > 
> > So I submit that the current implementation doesn't match your description of
> > "forced", is therefore buggy, and that if it were fixed, that would be
> > sufficient to meet the immediate needs of android.
> 
> I don't really think it may be fixed with respect to every possible kind of
> hardware.  On platforms where I/O interrupts are wakeup events it should
> work right now.  On other platforms it may be impossible to overcome hardware
> limitations.
> 
> Thanks,
> Rafael
> --
> 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/

_______________________________________________
linux-pm mailing list
linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/linux-pm


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux