From: Uli Luckas <u.luckas@road.de>
To: linux-pm@lists.linux-foundation.org
Cc: swetland@google.com, ncunningham@crca.org.au
Subject: Re: non-racy examples, please (was Re: [PATCH 01/13] PM: Add wake lock api. )
Date: Mon, 9 Feb 2009 02:49:58 +0100 [thread overview]
Message-ID: <200902090249.59119.u.luckas@road.de> (raw)
In-Reply-To: <20090208221747.GM6369@elf.ucw.cz>
On Sunday 08 February 2009, Pavel Machek wrote:
> Hi!
>
> Ok, I think that this wakelock stuff is in "can't be used properly"
> area on Rusty's scale of nasty interfaces.
>
> So... do I understand this correctly that if I want to run "make zImage"
> on Android, I'll need to modify make, gcc, .... to keep system awake?
>
> (How to do that? Give all the userland processes access to
> /sys/wakelocks ?)
>
> BTW what does android do when battery goes critically low? I believe
> you want to suspend, ignoring wakelocks, at that point.
>
> And now, you have some X-like system.
>
> /* We were idle for too long */
> blank_screen();
>
> unlock_all_wakelocks(); /* We want machine to sleep */
>
> wait_for_key();
> /* (here) */
> lock_wakelocks("processing_key_wakelock");
>
> ...is that approximately correct? There's race there, right? If (here)
> processing takes too long, or whatever, kernel will sleep the machine
> before it even displays "do you want to unlock the screen" dialog,
> right?
>
> Can you solve that in a way that works, always?
> Pavel
Pavel, actually Arve's whole wakelock concept is about avoiding races. Please
go back to where he explains the keyboard example.
The idea is that the keyboard driver grabs a wake lock in it's interrupt and
releases the lock only, after the resulting key events are read from the
device's queue.
This way, userspace can safely select on the key events, then grab it's own
lock. At that time, the two locks overlap! After that, userspace reads the
key events. This causes the keyboard driver to relaease it's wake lock.
Userspace still holds it's wake lock thogh.
You see? The locks together with the key events have been passed to userspace
safey. Absolutely race free.
So your example becomes:
/* We were idle for too long */
blank_screen();
unlock_my_wakelocks(); /* We want machine to sleep if no one
else holds a wakelock*/
wait_for_key(); /* Select on key events */
/* (here) */
lock_wakelocks("processing_key_wakelock");
read_key_events();
We should take a look at those cases, though, where a timed wacke locks are
needed. That is definitely unsafe.
Uli
next prev parent reply other threads:[~2009-02-09 1:49 UTC|newest]
Thread overview: 192+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-05 2:50 [RFC][PATCH 00/11] Android PM extensions Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 01/13] PM: Add wake lock api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 02/13] PM: Add early suspend api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 03/13] PM: Implement wakelock api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 04/13] PM: wakelock: Override wakelocks when using /sys/power/state Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 05/13] PM: Add option to disable /sys/power/state interface Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 06/13] PM: Implement early suspend api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 07/13] PM: wakelock: Add /sys/power/request_state Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 08/13] PM: Add user-space wake lock api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 09/13] PM: wakelock: Abort task freezing if a wake lock is held Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 10/13] PM: earlysuspend: Add console switch when user requested sleep state changes Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 11/13] PM: earlysuspend: Removing dependence on console Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 12/13] Input: Hold wake lock while event queue is not empty Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 13/13] ledtrig-sleep: Add led trigger for sleep debugging Arve Hjønnevåg
2009-02-05 9:08 ` [PATCH 12/13] Input: Hold wake lock while event queue is not empty Pavel Machek
2009-02-05 9:06 ` [PATCH 11/13] PM: earlysuspend: Removing dependence on console Pavel Machek
2009-02-05 9:42 ` Arve Hjønnevåg
2009-02-05 9:53 ` Pavel Machek
2009-02-05 9:03 ` [PATCH 10/13] PM: earlysuspend: Add console switch when user requested sleep state changes Pavel Machek
2009-02-05 9:37 ` Arve Hjønnevåg
2009-02-05 9:51 ` Pavel Machek
2009-02-05 10:54 ` Uli Luckas
2009-02-06 2:29 ` Arve Hjønnevåg
2009-02-08 22:02 ` Pavel Machek
2009-02-08 22:53 ` Arve Hjønnevåg
2009-02-08 22:58 ` Pavel Machek
2009-02-05 8:55 ` [PATCH 09/13] PM: wakelock: Abort task freezing if a wake lock is held Pavel Machek
2009-02-05 9:30 ` Arve Hjønnevåg
2009-02-05 9:49 ` Pavel Machek
2009-02-05 9:58 ` Arve Hjønnevåg
2009-02-05 10:02 ` Pavel Machek
2009-02-05 10:08 ` Arve Hjønnevåg
2009-02-06 3:42 ` Arve Hjønnevåg
2009-02-08 23:00 ` Pavel Machek
2009-02-06 0:35 ` mark gross
2009-02-05 8:53 ` [PATCH 08/13] PM: Add user-space wake lock api Pavel Machek
2009-02-05 8:52 ` [PATCH 07/13] PM: wakelock: Add /sys/power/request_state Pavel Machek
2009-02-05 9:25 ` Arve Hjønnevåg
2009-02-05 9:27 ` Pavel Machek
2009-02-07 22:54 ` Rafael J. Wysocki
2009-02-06 0:18 ` [PATCH 06/13] PM: Implement early suspend api mark gross
2009-02-07 22:47 ` Rafael J. Wysocki
2009-02-08 2:32 ` Benjamin Herrenschmidt
2009-02-08 13:33 ` Rafael J. Wysocki
2009-02-05 9:17 ` [PATCH 05/13] PM: Add option to disable /sys/power/state interface Pavel Machek
2009-02-07 22:37 ` Rafael J. Wysocki
2009-02-08 10:33 ` Pavel Machek
2009-02-08 13:50 ` Rafael J. Wysocki
2009-02-08 14:04 ` Brian Swetland
2009-02-08 21:06 ` Pavel Machek
2009-02-08 23:41 ` Rafael J. Wysocki
2009-02-09 1:58 ` Uli Luckas
2009-02-10 0:09 ` Rafael J. Wysocki
2009-02-08 23:40 ` Rafael J. Wysocki
2009-02-08 23:58 ` Arve Hjønnevåg
2009-02-09 0:26 ` Rafael J. Wysocki
2009-02-09 1:35 ` Arve Hjønnevåg
2009-02-09 1:53 ` Brian Swetland
2009-02-09 8:58 ` Pavel Machek
2009-02-09 13:31 ` Brian Swetland
2009-02-10 11:19 ` Pavel Machek
2009-02-09 9:15 ` Pavel Machek
2009-02-09 3:07 ` Alan Stern
2009-02-11 22:26 ` Rafael J. Wysocki
2009-02-09 9:09 ` Pavel Machek
2009-02-12 11:16 ` Matthew Garrett
2009-02-08 21:04 ` Pavel Machek
2009-02-08 21:40 ` Alan Stern
2009-02-08 23:00 ` Arve Hjønnevåg
2009-02-08 23:03 ` Pavel Machek
2009-02-09 0:31 ` Rafael J. Wysocki
2009-02-09 2:11 ` Uli Luckas
2009-02-09 2:24 ` Arve Hjønnevåg
2009-02-09 2:56 ` Uli Luckas
2009-02-09 9:01 ` Pavel Machek
2009-02-10 0:17 ` Rafael J. Wysocki
2009-02-10 9:13 ` Pavel Machek
2009-02-10 14:18 ` Rafael J. Wysocki
2009-02-08 23:41 ` Pavel Machek
2009-02-08 23:44 ` Rafael J. Wysocki
2009-02-08 23:44 ` Rafael J. Wysocki
2009-02-07 22:31 ` [PATCH 04/13] PM: wakelock: Override wakelocks when using /sys/power/state Rafael J. Wysocki
2009-02-05 9:16 ` [PATCH 03/13] PM: Implement wakelock api Pavel Machek
2009-02-05 15:24 ` Alan Stern
2009-02-06 0:10 ` mark gross
2009-02-06 0:38 ` Arve Hjønnevåg
2009-02-07 0:33 ` mark gross
2009-02-07 0:47 ` Arve Hjønnevåg
2009-02-09 18:00 ` mark gross
2009-02-10 20:24 ` Pavel Machek
2009-02-07 22:27 ` Rafael J. Wysocki
2009-02-11 2:52 ` Arve Hjønnevåg
2009-02-05 9:14 ` [PATCH 02/13] PM: Add early suspend api Pavel Machek
2009-02-05 23:26 ` mark gross
2009-02-06 9:33 ` Uli Luckas
2009-02-06 23:26 ` Arve Hjønnevåg
2009-02-07 20:53 ` Rafael J. Wysocki
2009-02-07 23:34 ` Arve Hjønnevåg
2009-02-08 20:59 ` Pavel Machek
2009-02-08 23:59 ` Rafael J. Wysocki
2009-02-05 9:11 ` [PATCH 01/13] PM: Add wake lock api Pavel Machek
2009-02-06 0:28 ` Arve Hjønnevåg
2009-02-06 9:45 ` Uli Luckas
2009-02-08 21:30 ` Pavel Machek
2009-02-08 23:11 ` Arve Hjønnevåg
2009-02-09 9:06 ` Pavel Machek
2009-02-08 22:17 ` non-racy examples, please (was Re: [PATCH 01/13] PM: Add wake lock api.) Pavel Machek
2009-02-08 22:40 ` Arve Hjønnevåg
2009-02-08 23:14 ` Pavel Machek
2009-02-08 23:35 ` Arve Hjønnevåg
2009-02-10 11:15 ` Pavel Machek
2009-02-11 3:12 ` Arve Hjønnevåg
2009-02-09 1:49 ` Uli Luckas [this message]
2009-02-10 11:17 ` non-racy examples, please (was Re: [PATCH 01/13] PM: Add wake lock?api.) Pavel Machek
2009-02-10 12:10 ` Woodruff, Richard
2009-02-10 13:14 ` Pavel Machek
2009-02-10 13:20 ` Woodruff, Richard
2009-02-10 13:42 ` Brian Swetland
2009-02-10 12:35 ` Uli Luckas
2009-02-06 1:32 ` [PATCH 01/13] PM: Add wake lock api mark gross
2009-02-05 22:51 ` mark gross
2009-02-06 0:13 ` Arve Hjønnevåg
2009-02-10 20:25 ` Pavel Machek
2009-02-11 2:11 ` Arve Hjønnevåg
2009-02-11 4:47 ` Brian Swetland
2009-02-11 8:40 ` Uli Luckas
2009-02-11 14:58 ` Alan Stern
2009-02-11 15:45 ` Rafael J. Wysocki
2009-02-08 22:57 ` Pavel Machek
2009-02-11 21:37 ` Pavel Machek
2009-02-11 22:05 ` Alan Stern
2009-02-11 23:55 ` Arve Hjønnevåg
2009-02-12 18:47 ` mark gross
2009-02-07 18:56 ` Rafael J. Wysocki
2009-02-07 22:51 ` Arve Hjønnevåg
2009-02-07 23:25 ` Rafael J. Wysocki
2009-02-08 0:20 ` Arve Hjønnevåg
2009-02-08 21:21 ` Pavel Machek
2009-02-09 0:03 ` Rafael J. Wysocki
2009-02-09 0:15 ` Rafael J. Wysocki
2009-02-09 2:03 ` Arve Hjønnevåg
2009-02-11 22:23 ` Rafael J. Wysocki
2009-02-11 23:42 ` Arve Hjønnevåg
2009-02-12 22:22 ` Rafael J. Wysocki
2009-02-12 23:42 ` Woodruff, Richard
2009-02-13 1:10 ` Matthew Garrett
2009-02-13 2:21 ` Arve Hjønnevåg
2009-02-13 2:40 ` Nigel Cunningham
2009-02-13 3:17 ` Woodruff, Richard
2009-02-13 10:55 ` Uli Luckas
2009-02-13 14:06 ` Matthew Garrett
2009-02-13 14:24 ` Brian Swetland
2009-02-13 14:37 ` Matthew Garrett
2009-02-13 14:46 ` Brian Swetland
2009-02-13 15:07 ` Matthew Garrett
2009-02-13 22:52 ` Rafael J. Wysocki
2009-02-13 16:46 ` Uli Luckas
2009-02-13 17:05 ` Matthew Garrett
2009-02-13 18:13 ` Uli Luckas
2009-02-13 19:14 ` Matthew Garrett
2009-02-13 19:35 ` Uli Luckas
2009-02-13 16:49 ` Uli Luckas
2009-02-13 17:09 ` Matthew Garrett
2009-02-13 18:18 ` Uli Luckas
2009-02-27 13:18 ` Pavel Machek
2009-02-27 14:07 ` Uli Luckas
2009-02-27 20:32 ` Pavel Machek
2009-03-02 13:53 ` Uli Luckas
2009-03-03 14:02 ` Pavel Machek
2009-03-04 13:41 ` Uli Luckas
2009-03-04 14:00 ` Uli Luckas
2009-03-04 14:13 ` Pavel Machek
2009-03-04 14:34 ` Uli Luckas
2009-03-04 17:10 ` Pavel Machek
2009-03-05 17:42 ` Uli Luckas
2009-03-08 8:32 ` Pavel Machek
2009-03-08 12:34 ` Alan Stern
2009-02-13 23:36 ` Arve Hjønnevåg
2009-02-14 0:05 ` Matthew Garrett
2009-02-14 0:50 ` Arve Hjønnevåg
2009-02-14 1:06 ` Matthew Garrett
2009-02-14 1:33 ` Arve Hjønnevåg
2009-02-14 1:49 ` Matthew Garrett
2009-02-14 5:51 ` Arve Hjønnevåg
2009-02-14 20:44 ` Matthew Garrett
2009-02-26 15:04 ` Pavel Machek
2009-02-26 21:11 ` Arve Hjønnevåg
2009-02-26 21:36 ` Pavel Machek
2009-02-27 0:16 ` Arve Hjønnevåg
2009-02-27 9:56 ` Pavel Machek
2009-02-28 3:20 ` Arve Hjønnevåg
2009-02-06 23:51 ` [RFC][PATCH 00/11] Android PM extensions Rafael J. Wysocki
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=200902090249.59119.u.luckas@road.de \
--to=u.luckas@road.de \
--cc=linux-pm@lists.linux-foundation.org \
--cc=ncunningham@crca.org.au \
--cc=swetland@google.com \
/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