diff options
| author | Anurag Singh <anursing@codeaurora.org> | 2013-03-19 17:14:21 -0700 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-04-11 11:00:02 +0200 |
| commit | 43700f033d587c126ffe009918f8a6ed25e43b78 (patch) | |
| tree | 0039043c508a05e3770096901fbfd23675c19267 /drivers/input | |
| parent | b5065b9e10b75f23eb782ffa19b65384d27045a6 (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.c | 2 |
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; } |
