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 <>
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index 1d6d6c8..6c34600 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -710,8 +710,8 @@
 	client->use_wake_lock = false;
-	wake_lock_destroy(&client->wake_lock);
+	wake_lock_destroy(&client->wake_lock);
 	return 0;