* [PATCH 7/8] Input: Block suspend while event queue is not empty. [not found] ` <1273810273-3039-7-git-send-email-arve@android.com> @ 2010-05-14 4:11 ` Arve Hjønnevåg 0 siblings, 0 replies; 5+ messages in thread From: Arve Hjønnevåg @ 2010-05-14 4:11 UTC (permalink / raw) To: linux-pm, linux-kernel Cc: Márton Németh, Jiri Kosina, Dmitry Torokhov, Sven Neumann, Henrik Rydberg, linux-input, Alexey Dobriyan, Tero Saarni, Matthew Garrett Add an ioctl, EVIOCSSUSPENDBLOCK, to enable a suspend_blocker that will block suspend while the event queue is not empty. This allows userspace code to process input events while the device appears to be asleep. Signed-off-by: Arve Hjønnevåg <arve@android.com> --- drivers/input/evdev.c | 22 ++++++++++++++++++++++ include/linux/input.h | 3 +++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 2ee6c7a..bff2247 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -20,6 +20,7 @@ #include <linux/input.h> #include <linux/major.h> #include <linux/device.h> +#include <linux/suspend.h> #include "input-compat.h" struct evdev { @@ -43,6 +44,8 @@ struct evdev_client { struct fasync_struct *fasync; struct evdev *evdev; struct list_head node; + struct suspend_blocker suspend_blocker; + bool use_suspend_blocker; }; static struct evdev *evdev_table[EVDEV_MINORS]; @@ -55,6 +58,8 @@ static void evdev_pass_event(struct evdev_client *client, * Interrupts are disabled, just acquire the lock */ spin_lock(&client->buffer_lock); + if (client->use_suspend_blocker) + suspend_block(&client->suspend_blocker); client->buffer[client->head++] = *event; client->head &= EVDEV_BUFFER_SIZE - 1; spin_unlock(&client->buffer_lock); @@ -234,6 +239,8 @@ static int evdev_release(struct inode *inode, struct file *file) mutex_unlock(&evdev->mutex); evdev_detach_client(evdev, client); + if (client->use_suspend_blocker) + suspend_blocker_unregister(&client->suspend_blocker); kfree(client); evdev_close_device(evdev); @@ -335,6 +342,8 @@ static int evdev_fetch_next_event(struct evdev_client *client, if (have_event) { *event = client->buffer[client->tail++]; client->tail &= EVDEV_BUFFER_SIZE - 1; + if (client->use_suspend_blocker && client->head == client->tail) + suspend_unblock(&client->suspend_blocker); } spin_unlock_irq(&client->buffer_lock); @@ -585,6 +594,19 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, else return evdev_ungrab(evdev, client); + case EVIOCGSUSPENDBLOCK: + return put_user(client->use_suspend_blocker, ip); + + case EVIOCSSUSPENDBLOCK: + spin_lock_irq(&client->buffer_lock); + if (!client->use_suspend_blocker && p) + suspend_blocker_init(&client->suspend_blocker, "evdev"); + else if (client->use_suspend_blocker && !p) + suspend_blocker_unregister(&client->suspend_blocker); + client->use_suspend_blocker = !!p; + spin_unlock_irq(&client->buffer_lock); + return 0; + default: if (_IOC_TYPE(cmd) != 'E') diff --git a/include/linux/input.h b/include/linux/input.h index 7ed2251..b2d93b4 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -82,6 +82,9 @@ struct input_absinfo { #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ +#define EVIOCGSUSPENDBLOCK _IOR('E', 0x91, int) /* get suspend block enable */ +#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int) /* set suspend block enable */ + /* * Event types */ -- 1.6.5.1 _______________________________________________ linux-pm mailing list linux-pm@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/linux-pm ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/8] PM: Add suspend block api. [not found] ` <1273810273-3039-2-git-send-email-arve@android.com> [not found] ` <1273810273-3039-3-git-send-email-arve@android.com> @ 2010-05-14 6:13 ` Paul Walmsley 1 sibling, 0 replies; 5+ messages in thread From: Paul Walmsley @ 2010-05-14 6:13 UTC (permalink / raw) To: Arve Hjønnevåg Cc: Dmitry Torokhov, Sven Neumann, Jesse Barnes, linux-kernel, Tero Saarni, linux-input, linux-pm, Liam Girdwood, Alexey Dobriyan, Matthew Garrett, Len Brown, Jacob Pan, Daniel Mack, Oleg Nesterov, linux-omap, Linus Walleij, Daniel Walker, Theodore Ts'o, Márton Németh, Brian Swetland [-- Attachment #1: Type: TEXT/PLAIN, Size: 5345 bytes --] Hello, some comments on the kernel-level suspend blocker API. On Thu, 13 May 2010, Arve Hjønnevåg wrote: > Adds /sys/power/policy that selects the behaviour of /sys/power/state. > After setting the policy to opportunistic, writes to /sys/power/state > become non-blocking requests that specify which suspend state to enter > when no suspend blockers are active. A special state, "on", stops the > process by activating the "main" suspend blocker. > > Signed-off-by: Arve Hjønnevåg <arve@android.com> Another problem with the suspend-block kernel API is that its primary use-case[1] is to work around the brokenness of patch 1's opportunistic suspend governor. The governor is broken because it intentionally ignores timers and the scheduler. To work around problems caused by this decision, suspend-blocks must be spread throughout the kernel (and userspace) to restore the previous behavior of the system. But if patch 1's opportunistic suspend governor were fixed, most of the need for a suspend blockers would disappear. [ This E-mail expands on some earlier comments[2] and is also related to other opportunistic suspend comments[3]. ] The suspend-block patches require already-working code to be patched to keep it working. This is a backwards approach. Instead, broken code should be patched to fix the brokenness. But the former approach is exactly what the suspend block API is intended to do. Patches 7 and 8 in this series are two clear cases. Patch 7 adds an ioctl to the input subsystem that will cause the system to stay running as long as there is an event in the event queue. Patch 8 adds a suspend-block call to the power_supply code that causes the system to stay running as long as power_supply's changed_work workqueue has work to do. Neither of these patches should be needed, since the default expectation of the mainline Linux kernel is that the system should run when there is work to be done. This longstanding expectation should be preserved, not broken and then patched around. But since patch 1 violates that expectation, there is no choice but to add patches 7 and 8 -- and ultimately many more patches -- to get a working system. Once the opportunistic suspend governor in patch 1 is introduced and enabled, the kernel will suspend the system immediately, even if the system has work to do. The only way to prevent that is to add suspend-blocks. Many suspend blocks will be needed throughout the kernel to keep things working. One might think that patches 7 and 8 are the only changes needed to get a working Android-style opportunistic suspend system. It turns out that many more changes are needed. This can be seen by looking at currently shipping Android kernels, such as the current current Android 'msm' kernel tree[4]. Suspend-blocker usage is spread through many drivers and subsystems: [paul@twilight msm]$ fgrep -r wake_lock . | egrep '(^./drivers|^./arch)' | cut -f1 -d: | sort -u ./arch/arm/mach-msm/htc_battery.c ./arch/arm/mach-msm/pm.c ./arch/arm/mach-msm/qdsp5/adsp.c ./arch/arm/mach-msm/qdsp5/audio_out.c ./arch/arm/mach-msm/smd_qmi.c ./arch/arm/mach-msm/smd_rpcrouter.c ./arch/arm/mach-msm/smd_rpcrouter.h ./arch/arm/mach-msm/smd_rpcrouter_servers.c ./arch/arm/mach-msm/smd_tty.c ./drivers/i2c/chips/mt9t013.c ./drivers/input/evdev.c ./drivers/input/misc/gpio_input.c ./drivers/input/misc/gpio_matrix.c ./drivers/mmc/core/core.c ./drivers/net/msm_rmnet.c ./drivers/rtc/alarm.c ./drivers/serial/msm_serial_hs.c ./drivers/usb/function/mass_storage.c ./drivers/usb/gadget/f_mass_storage.c ./drivers/video/msm/mddi.c ./drivers/video/msm/msm_fb.c I guess this is something like what kernel developers should eventually expect to see if suspend blockers are merged. There is a better way to make the system work as expected: these patch 1 shouldn't break general timer and scheduler assumptions. If patch 1's governor is fixed, most of these calls will be unnecessary. The apparent motivation is to prevent "untrusted" userspace processes from preventing the system from entering a low-power state. I agree that this is a problem. But it should be fixed by modifying the specific Linux code that determines when the idle loop is entered and when the next timer wakeup should occur, on a per-process basis. Such targeted changes would ensure that the rest of the kernel would continue to execute as expected. regards, - Paul 1. Arve Hjønnevåg E-mail to the linux-pm mailing list, dated Mon, 3 May 2010 17:09:22 -0700: http://www.spinics.net/lists/linux-pm/msg18432.html 2. Paul Walmsley E-mail to the linux-pm mailing list, dated Wed, 12 May 2010 21:35:30 -0600: http://lkml.org/lkml/2010/5/12/528 3. Paul Walmsley E-mail to the linux-pm mailing list, dated Thu, 13 May 2010 13:01:33 -0600: http://permalink.gmane.org/gmane.linux.power-management.general/18592 4. git://android.git.kernel.org/kernel/msm.git - as of commit c7f8bcecb06b937c45dd0e342450a3218b286b8d, "[ARM] msm: defconfig: Set mmap_min_addr to 32k" 5. http://android.git.kernel.org/?p=kernel/msm.git;a=blob;f=drivers/mmc/core/core.c;h=22f6ddad85c92f34c55035982049bb03b5abfc74;hb=c7f8bcecb06b937c45dd0e342450a3218b286b8d#l721 [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <1274482015-30899-1-git-send-email-arve@android.com>]
[parent not found: <1274482015-30899-2-git-send-email-arve@android.com>]
[parent not found: <1274482015-30899-3-git-send-email-arve@android.com>]
[parent not found: <1274482015-30899-4-git-send-email-arve@android.com>]
[parent not found: <1274482015-30899-5-git-send-email-arve@android.com>]
[parent not found: <1274482015-30899-6-git-send-email-arve@android.com>]
[parent not found: <1274482015-30899-7-git-send-email-arve@android.com>]
* [PATCH 7/8] Input: Block suspend while event queue is not empty. [not found] ` <1274482015-30899-7-git-send-email-arve@android.com> @ 2010-05-21 22:46 ` Arve Hjønnevåg 0 siblings, 0 replies; 5+ messages in thread From: Arve Hjønnevåg @ 2010-05-21 22:46 UTC (permalink / raw) To: linux-pm, linux-kernel Cc: Rafael J. Wysocki, Arve Hjønnevåg, Dmitry Torokhov, Márton Németh, Sven Neumann, Tero Saarni, Alexey Dobriyan, Matthew Garrett, Jiri Kosina, Henrik Rydberg, linux-input Add an ioctl, EVIOCSSUSPENDBLOCK, to enable a suspend_blocker that will block suspend while the event queue is not empty. This allows userspace code to process input events while the device appears to be asleep. Signed-off-by: Arve Hjønnevåg <arve@android.com> --- drivers/input/evdev.c | 22 ++++++++++++++++++++++ include/linux/input.h | 3 +++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 2ee6c7a..bff2247 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -20,6 +20,7 @@ #include <linux/input.h> #include <linux/major.h> #include <linux/device.h> +#include <linux/suspend.h> #include "input-compat.h" struct evdev { @@ -43,6 +44,8 @@ struct evdev_client { struct fasync_struct *fasync; struct evdev *evdev; struct list_head node; + struct suspend_blocker suspend_blocker; + bool use_suspend_blocker; }; static struct evdev *evdev_table[EVDEV_MINORS]; @@ -55,6 +58,8 @@ static void evdev_pass_event(struct evdev_client *client, * Interrupts are disabled, just acquire the lock */ spin_lock(&client->buffer_lock); + if (client->use_suspend_blocker) + suspend_block(&client->suspend_blocker); client->buffer[client->head++] = *event; client->head &= EVDEV_BUFFER_SIZE - 1; spin_unlock(&client->buffer_lock); @@ -234,6 +239,8 @@ static int evdev_release(struct inode *inode, struct file *file) mutex_unlock(&evdev->mutex); evdev_detach_client(evdev, client); + if (client->use_suspend_blocker) + suspend_blocker_unregister(&client->suspend_blocker); kfree(client); evdev_close_device(evdev); @@ -335,6 +342,8 @@ static int evdev_fetch_next_event(struct evdev_client *client, if (have_event) { *event = client->buffer[client->tail++]; client->tail &= EVDEV_BUFFER_SIZE - 1; + if (client->use_suspend_blocker && client->head == client->tail) + suspend_unblock(&client->suspend_blocker); } spin_unlock_irq(&client->buffer_lock); @@ -585,6 +594,19 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, else return evdev_ungrab(evdev, client); + case EVIOCGSUSPENDBLOCK: + return put_user(client->use_suspend_blocker, ip); + + case EVIOCSSUSPENDBLOCK: + spin_lock_irq(&client->buffer_lock); + if (!client->use_suspend_blocker && p) + suspend_blocker_init(&client->suspend_blocker, "evdev"); + else if (client->use_suspend_blocker && !p) + suspend_blocker_unregister(&client->suspend_blocker); + client->use_suspend_blocker = !!p; + spin_unlock_irq(&client->buffer_lock); + return 0; + default: if (_IOC_TYPE(cmd) != 'E') diff --git a/include/linux/input.h b/include/linux/input.h index 7ed2251..b2d93b4 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -82,6 +82,9 @@ struct input_absinfo { #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ +#define EVIOCGSUSPENDBLOCK _IOR('E', 0x91, int) /* get suspend block enable */ +#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int) /* set suspend block enable */ + /* * Event types */ -- 1.6.5.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1272667021-21312-1-git-send-email-arve@android.com>]
[parent not found: <1272667021-21312-2-git-send-email-arve@android.com>]
[parent not found: <1272667021-21312-3-git-send-email-arve@android.com>]
[parent not found: <1272667021-21312-4-git-send-email-arve@android.com>]
[parent not found: <1272667021-21312-5-git-send-email-arve@android.com>]
[parent not found: <1272667021-21312-6-git-send-email-arve@android.com>]
[parent not found: <1272667021-21312-7-git-send-email-arve@android.com>]
* [PATCH 7/8] Input: Block suspend while event queue is not empty. [not found] ` <1272667021-21312-7-git-send-email-arve@android.com> @ 2010-04-30 22:37 ` Arve Hjønnevåg 0 siblings, 0 replies; 5+ messages in thread From: Arve Hjønnevåg @ 2010-04-30 22:37 UTC (permalink / raw) To: linux-pm, linux-kernel Cc: Rafael J. Wysocki, Alan Stern, Tejun Heo, Oleg Nesterov, Arve Hjønnevåg, Dmitry Torokhov, Thadeu Lima de Souza Cascardo, Márton Németh, Sven Neumann, Tero Saarni, Matthew Garrett, Jiri Kosina, Henrik Rydberg, linux-input Add an ioctl, EVIOCSSUSPENDBLOCK, to enable a suspend_blocker that will block suspend while the event queue is not empty. This allows userspace code to process input events while the device appears to be asleep. Signed-off-by: Arve Hjønnevåg <arve@android.com> --- drivers/input/evdev.c | 22 ++++++++++++++++++++++ include/linux/input.h | 3 +++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 2ee6c7a..66e0d16 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -20,6 +20,7 @@ #include <linux/input.h> #include <linux/major.h> #include <linux/device.h> +#include <linux/suspend_blocker.h> #include "input-compat.h" struct evdev { @@ -43,6 +44,8 @@ struct evdev_client { struct fasync_struct *fasync; struct evdev *evdev; struct list_head node; + struct suspend_blocker suspend_blocker; + bool use_suspend_blocker; }; static struct evdev *evdev_table[EVDEV_MINORS]; @@ -55,6 +58,8 @@ static void evdev_pass_event(struct evdev_client *client, * Interrupts are disabled, just acquire the lock */ spin_lock(&client->buffer_lock); + if (client->use_suspend_blocker) + suspend_block(&client->suspend_blocker); client->buffer[client->head++] = *event; client->head &= EVDEV_BUFFER_SIZE - 1; spin_unlock(&client->buffer_lock); @@ -234,6 +239,8 @@ static int evdev_release(struct inode *inode, struct file *file) mutex_unlock(&evdev->mutex); evdev_detach_client(evdev, client); + if (client->use_suspend_blocker) + suspend_blocker_destroy(&client->suspend_blocker); kfree(client); evdev_close_device(evdev); @@ -335,6 +342,8 @@ static int evdev_fetch_next_event(struct evdev_client *client, if (have_event) { *event = client->buffer[client->tail++]; client->tail &= EVDEV_BUFFER_SIZE - 1; + if (client->use_suspend_blocker && client->head == client->tail) + suspend_unblock(&client->suspend_blocker); } spin_unlock_irq(&client->buffer_lock); @@ -585,6 +594,19 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, else return evdev_ungrab(evdev, client); + case EVIOCGSUSPENDBLOCK: + return put_user(client->use_suspend_blocker, ip); + + case EVIOCSSUSPENDBLOCK: + spin_lock_irq(&client->buffer_lock); + if (!client->use_suspend_blocker && p) + suspend_blocker_init(&client->suspend_blocker, "evdev"); + else if (client->use_suspend_blocker && !p) + suspend_blocker_destroy(&client->suspend_blocker); + client->use_suspend_blocker = !!p; + spin_unlock_irq(&client->buffer_lock); + return 0; + default: if (_IOC_TYPE(cmd) != 'E') diff --git a/include/linux/input.h b/include/linux/input.h index 7ed2251..b2d93b4 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -82,6 +82,9 @@ struct input_absinfo { #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ +#define EVIOCGSUSPENDBLOCK _IOR('E', 0x91, int) /* get suspend block enable */ +#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int) /* set suspend block enable */ + /* * Event types */ -- 1.6.5.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1272429119-12103-1-git-send-email-arve@android.com>]
[parent not found: <1272429119-12103-2-git-send-email-arve@android.com>]
[parent not found: <1272429119-12103-3-git-send-email-arve@android.com>]
[parent not found: <1272429119-12103-4-git-send-email-arve@android.com>]
[parent not found: <1272429119-12103-5-git-send-email-arve@android.com>]
[parent not found: <1272429119-12103-6-git-send-email-arve@android.com>]
[parent not found: <1272429119-12103-7-git-send-email-arve@android.com>]
* [PATCH 7/8] Input: Block suspend while event queue is not empty. [not found] ` <1272429119-12103-7-git-send-email-arve@android.com> @ 2010-04-28 4:31 ` Arve Hjønnevåg 0 siblings, 0 replies; 5+ messages in thread From: Arve Hjønnevåg @ 2010-04-28 4:31 UTC (permalink / raw) To: linux-pm, linux-kernel Cc: linux-input, Márton Németh, Thadeu Lima de Souza Cascardo, Dmitry Torokhov, Sven Neumann, Oleg Nesterov, Jiri Kosina, Tejun Heo, Henrik Rydberg, Tero Saarni, Matthew Garrett Add an ioctl, EVIOCSSUSPENDBLOCK, to enable a suspend_blocker that will block suspend while the event queue is not empty. This allows userspace code to process input events while the device appears to be asleep. Signed-off-by: Arve Hjønnevåg <arve@android.com> --- drivers/input/evdev.c | 22 ++++++++++++++++++++++ include/linux/input.h | 3 +++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 2ee6c7a..66e0d16 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -20,6 +20,7 @@ #include <linux/input.h> #include <linux/major.h> #include <linux/device.h> +#include <linux/suspend_blocker.h> #include "input-compat.h" struct evdev { @@ -43,6 +44,8 @@ struct evdev_client { struct fasync_struct *fasync; struct evdev *evdev; struct list_head node; + struct suspend_blocker suspend_blocker; + bool use_suspend_blocker; }; static struct evdev *evdev_table[EVDEV_MINORS]; @@ -55,6 +58,8 @@ static void evdev_pass_event(struct evdev_client *client, * Interrupts are disabled, just acquire the lock */ spin_lock(&client->buffer_lock); + if (client->use_suspend_blocker) + suspend_block(&client->suspend_blocker); client->buffer[client->head++] = *event; client->head &= EVDEV_BUFFER_SIZE - 1; spin_unlock(&client->buffer_lock); @@ -234,6 +239,8 @@ static int evdev_release(struct inode *inode, struct file *file) mutex_unlock(&evdev->mutex); evdev_detach_client(evdev, client); + if (client->use_suspend_blocker) + suspend_blocker_destroy(&client->suspend_blocker); kfree(client); evdev_close_device(evdev); @@ -335,6 +342,8 @@ static int evdev_fetch_next_event(struct evdev_client *client, if (have_event) { *event = client->buffer[client->tail++]; client->tail &= EVDEV_BUFFER_SIZE - 1; + if (client->use_suspend_blocker && client->head == client->tail) + suspend_unblock(&client->suspend_blocker); } spin_unlock_irq(&client->buffer_lock); @@ -585,6 +594,19 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, else return evdev_ungrab(evdev, client); + case EVIOCGSUSPENDBLOCK: + return put_user(client->use_suspend_blocker, ip); + + case EVIOCSSUSPENDBLOCK: + spin_lock_irq(&client->buffer_lock); + if (!client->use_suspend_blocker && p) + suspend_blocker_init(&client->suspend_blocker, "evdev"); + else if (client->use_suspend_blocker && !p) + suspend_blocker_destroy(&client->suspend_blocker); + client->use_suspend_blocker = !!p; + spin_unlock_irq(&client->buffer_lock); + return 0; + default: if (_IOC_TYPE(cmd) != 'E') diff --git a/include/linux/input.h b/include/linux/input.h index 7ed2251..b2d93b4 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -82,6 +82,9 @@ struct input_absinfo { #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ +#define EVIOCGSUSPENDBLOCK _IOR('E', 0x91, int) /* get suspend block enable */ +#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int) /* set suspend block enable */ + /* * Event types */ -- 1.6.5.1 _______________________________________________ linux-pm mailing list linux-pm@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/linux-pm ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-05-21 22:46 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1273810273-3039-1-git-send-email-arve@android.com> [not found] ` <1273810273-3039-2-git-send-email-arve@android.com> [not found] ` <1273810273-3039-3-git-send-email-arve@android.com> [not found] ` <1273810273-3039-4-git-send-email-arve@android.com> [not found] ` <1273810273-3039-5-git-send-email-arve@android.com> [not found] ` <1273810273-3039-6-git-send-email-arve@android.com> [not found] ` <1273810273-3039-7-git-send-email-arve@android.com> 2010-05-14 4:11 ` [PATCH 7/8] Input: Block suspend while event queue is not empty Arve Hjønnevåg 2010-05-14 6:13 ` [PATCH 1/8] PM: Add suspend block api Paul Walmsley [not found] <1274482015-30899-1-git-send-email-arve@android.com> [not found] ` <1274482015-30899-2-git-send-email-arve@android.com> [not found] ` <1274482015-30899-3-git-send-email-arve@android.com> [not found] ` <1274482015-30899-4-git-send-email-arve@android.com> [not found] ` <1274482015-30899-5-git-send-email-arve@android.com> [not found] ` <1274482015-30899-6-git-send-email-arve@android.com> [not found] ` <1274482015-30899-7-git-send-email-arve@android.com> 2010-05-21 22:46 ` [PATCH 7/8] Input: Block suspend while event queue is not empty Arve Hjønnevåg [not found] <1272667021-21312-1-git-send-email-arve@android.com> [not found] ` <1272667021-21312-2-git-send-email-arve@android.com> [not found] ` <1272667021-21312-3-git-send-email-arve@android.com> [not found] ` <1272667021-21312-4-git-send-email-arve@android.com> [not found] ` <1272667021-21312-5-git-send-email-arve@android.com> [not found] ` <1272667021-21312-6-git-send-email-arve@android.com> [not found] ` <1272667021-21312-7-git-send-email-arve@android.com> 2010-04-30 22:37 ` Arve Hjønnevåg [not found] <1272429119-12103-1-git-send-email-arve@android.com> [not found] ` <1272429119-12103-2-git-send-email-arve@android.com> [not found] ` <1272429119-12103-3-git-send-email-arve@android.com> [not found] ` <1272429119-12103-4-git-send-email-arve@android.com> [not found] ` <1272429119-12103-5-git-send-email-arve@android.com> [not found] ` <1272429119-12103-6-git-send-email-arve@android.com> [not found] ` <1272429119-12103-7-git-send-email-arve@android.com> 2010-04-28 4:31 ` Arve Hjønnevåg
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).