linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: Lukas Maerdian <lukas@goldelico.com>
Cc: Pavel Machek <pavel@ucw.cz>,
	"Dr. H. Nikolaus Schaller" <hns@goldelico.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
	Marek Belisko <marek@goldelico.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	stern@rowland.harvard.edu
Subject: Re: [PATCH] gpio_keys, twl4030-pwrbutton: stay awake for 1sec on resume
Date: Fri, 4 Jul 2014 22:03:36 +1000	[thread overview]
Message-ID: <20140704220336.5e809819@notabene.brown> (raw)
In-Reply-To: <53B6846A.4030201@goldelico.com>

[-- Attachment #1: Type: text/plain, Size: 3142 bytes --]

On Fri, 04 Jul 2014 12:39:38 +0200 Lukas Maerdian <lukas@goldelico.com> wrote:

> Hi all!
> 
> On 28.06.2014 22:04 UTC+0200, Pavel Machek wrote:
> >> And the msec parameter is described as:
> >>
> >> @msec: Anticipated event processing time (in milliseconds).
> >>
> >> Isn't calling pm_wakeup_event() with a non-zero msec the standard
> >> method to handle this situation? And it is used in other drivers. E.g. in
> >> _mmc_detect_change() or hub_suspend().
> > 
> >  * Notify the PM core of a wakeup event whose source is @ws that will
> >    take                    
> >  * approximately @msec milliseconds to be processed by the kernel.  If
> >    @ws is                 
> >  * not active, activate it.  If @msec is nonzero, set up the @ws'
> >    timer to                    
> >  * execute pm_wakeup_timer_fn() in future.                                                    
> > 
> > Will take @msec milliseconds to be processed by the _kernel_. Yes, USB
> > probing takes a lot of time in kernel. But you are using this
> > parameter to wait for userspace...
> 
> Well, it's not exactly waiting for userspace: The kernel goes to
> suspend, before even being fully resumed.
> 
> In any case, 0 msec (i.e. nothing) seems to be insufficient, even for
> just the in kernel processing. And I think that's exactly the root cause
> of this race condition between the device drivers and the autosleep
> module. Of course this only materializes if CONFIG_PM_AUTOSLEEP and
> CONFIG_PM_WAKELOCKS are enabled, which is rarely used up to now, I guess.
> 
> I think we either need some way of signaling that the kernel has fully
> finished resuming, before autosleep sets the system to suspend state
> again, or we need to set appropriate delays in the individual device
> drivers, to give them enough time to process the resume event.
> 
> As the pm_wakeup_event() call is already in place, I assume, that
> setting appropriate processing times for each individual driver was the
> intended way to go...
> 
> I've CCed Neil Brown, who inserted the pm_wakeup_even() call with a
> 0msec argument in both of the discussed drivers, so maybe he can shed
> some light in this discussion?
> 
> Best regards,
>   Lukas

You definitely shouldn't need a timeout.

I know I understood the whole "autosleep" design once, but I never really
liked it and memory fades.....

I think that a key part of using autosleep was that userspace needs to use
epoll with the EPOLLWAKEUP flag to listen for any events which can wake from
suspend.

If user-space is doing that properly, then the simple pm_wakeup_event(dev,0)
is enough to ensure that the event gets through epoll and into user-space.
I think userspace needs to take a wakelock before reading the event, though I
don't recall the exact details.

So: if Android is trying to use autosleep and finding that an event wakes the
device but it goes back to sleep again before it can handle the event, then
either the driver isn't doing the basic pm_wakeup_event, or android
user-space isn't using epoll and EPOLLWAKEUP as required.

NeilBrown


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

  reply	other threads:[~2014-07-04 12:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-27 21:55 [PATCH] gpio_keys, twl4030-pwrbutton: stay awake for 1sec on resume Lukas Märdian
2014-06-28 17:08 ` Pavel Machek
2014-06-28 17:57   ` Dr. H. Nikolaus Schaller
2014-06-28 20:04     ` Pavel Machek
2014-06-28 21:58       ` Alan Stern
2014-07-04 10:39       ` Lukas Maerdian
2014-07-04 12:03         ` NeilBrown [this message]
2014-07-07 10:42           ` NeilBrown
  -- strict thread matches above, loose matches on Subject: below --
2014-04-10  9:29 Dr. H. Nikolaus Schaller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140704220336.5e809819@notabene.brown \
    --to=neilb@suse.de \
    --cc=dmitry.torokhov@gmail.com \
    --cc=hns@goldelico.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas@goldelico.com \
    --cc=marek@goldelico.com \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).