From 0e226f1f09ed57c0bd496dfc31b1ed62681d86f3 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov Date: Wed, 24 Oct 2012 23:53:01 -0700 Subject: [PATCH] --- yaml --- r: 346921 b: refs/heads/master c: adc4633c86f3358fce676b6c7ce75055e395123a h: refs/heads/master i: 346919: 41b179049347d307aec3a79309b8e8d7a12bc5e4 v: v3 --- [refs] | 2 +- trunk/drivers/input/input.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index e4a85bf414a1..7431c19b3378 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5161870f51acd74442375a6693c0586996d01f44 +refs/heads/master: adc4633c86f3358fce676b6c7ce75055e395123a diff --git a/trunk/drivers/input/input.c b/trunk/drivers/input/input.c index 53a0ddee7872..f1be1a77edf3 100644 --- a/trunk/drivers/input/input.c +++ b/trunk/drivers/input/input.c @@ -534,8 +534,11 @@ EXPORT_SYMBOL(input_grab_device); static void __input_release_device(struct input_handle *handle) { struct input_dev *dev = handle->dev; + struct input_handle *grabber; - if (dev->grab == handle) { + grabber = rcu_dereference_protected(dev->grab, + lockdep_is_held(&dev->mutex)); + if (grabber == handle) { rcu_assign_pointer(dev->grab, NULL); /* Make sure input_pass_event() notices that grab is gone */ synchronize_rcu();