summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2010-11-11 22:03:59 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2010-11-11 22:22:19 -0800
commit87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b (patch)
treefb272c8f41a094b46561d062a5aefdfd24084dac
parenta309cdc778b9eece59b34e9e1c26e41476dbbcd6 (diff)
downloadlinux-87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b.tar.gz
linux-87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b.tar.bz2
linux-87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b.zip
Input: mac mouse emulation - add locking
We need to add appropriate locking when toggling mac mouse emulation on and off to ensure that input device and handler are in consistent state. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-rw-r--r--drivers/macintosh/mac_hid.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/macintosh/mac_hid.c b/drivers/macintosh/mac_hid.c
index 067f9962f499..6a82388505f0 100644
--- a/drivers/macintosh/mac_hid.c
+++ b/drivers/macintosh/mac_hid.c
@@ -23,6 +23,8 @@ static int mouse_button3_keycode = KEY_RIGHTALT; /* right option key */
static struct input_dev *mac_hid_emumouse_dev;
+static DEFINE_MUTEX(mac_hid_emumouse_mutex);
+
static int mac_hid_create_emumouse(void)
{
static struct lock_class_key mac_hid_emumouse_dev_event_class;
@@ -187,6 +189,10 @@ static int mac_hid_toggle_emumouse(ctl_table *table, int write,
int old_val = *valp;
int rc;
+ rc = mutex_lock_killable(&mac_hid_emumouse_mutex);
+ if (rc)
+ return rc;
+
rc = proc_dointvec(table, write, buffer, lenp, ppos);
if (rc == 0 && write && *valp != old_val) {
@@ -202,6 +208,8 @@ static int mac_hid_toggle_emumouse(ctl_table *table, int write,
if (rc)
*valp = old_val;
+ mutex_unlock(&mac_hid_emumouse_mutex);
+
return rc;
}