From f6ead001dce857aa30970c51e0ad8bbc2180f3e8 Mon Sep 17 00:00:00 2001 From: Russell King Date: Tue, 7 Nov 2006 21:01:30 +0000 Subject: [PATCH] --- yaml --- r: 43369 b: refs/heads/master c: df58d0359581bbd4ee741406d81e69456c684f9d h: refs/heads/master i: 43367: cefc515a0a081718c2821e8fc75109d53444f5d3 v: v3 --- [refs] | 2 +- trunk/arch/arm/kernel/apm.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index a125b3d10671..21617531e147 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b729c09a452a659cdf4d29d83943aa798c5c4ffc +refs/heads/master: df58d0359581bbd4ee741406d81e69456c684f9d diff --git a/trunk/arch/arm/kernel/apm.c b/trunk/arch/arm/kernel/apm.c index bbe98e3b860b..845af0bc1108 100644 --- a/trunk/arch/arm/kernel/apm.c +++ b/trunk/arch/arm/kernel/apm.c @@ -340,6 +340,7 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg) wait_event(apm_suspend_waitqueue, as->suspend_state == SUSPEND_DONE); } else { + as->suspend_state = SUSPEND_WAIT; up(&state_lock); /* @@ -349,8 +350,14 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg) * acknowledged. */ err = queue_suspend_event(APM_USER_SUSPEND, as); - if (err < 0) + if (err < 0) { + /* + * Avoid taking the lock here - this + * should be fine. + */ + as->suspend_state = SUSPEND_NONE; break; + } if (err > 0) apm_suspend();