aboutsummaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorAnurag Singh <anursing@codeaurora.org>2013-03-19 17:14:21 -0700
committerMister Oyster <oysterized@gmail.com>2017-04-11 11:00:02 +0200
commit43700f033d587c126ffe009918f8a6ed25e43b78 (patch)
tree0039043c508a05e3770096901fbfd23675c19267 /drivers/input
parentb5065b9e10b75f23eb782ffa19b65384d27045a6 (diff)
input: evdev: Move wake_lock_destroy call
Calling wake_lock_destroy from inside a spinlock protected region (or, in general, from atomic context) leads to a 'scheduling while atomic bug' because the internal wakeup source deletion logic calls synchronize_rcu, which can sleep. Moreover, since the interal lists are already protected with RCUs and spinlocks, putting the wake_lock_destroy call in a spinlock is redundant. Change-Id: I10a2239b664a5f43e54495f24fe588fb09282305 Signed-off-by: Anurag Singh <anursing@codeaurora.org>
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/evdev.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index 878b10402..66dd70696 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -751,8 +751,8 @@ static int evdev_disable_suspend_block(struct evdev *evdev,
spin_lock_irq(&client->buffer_lock);
client->use_wake_lock = false;
- wake_lock_destroy(&client->wake_lock);
spin_unlock_irq(&client->buffer_lock);
+ wake_lock_destroy(&client->wake_lock);
return 0;
}