diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-11-11 22:03:59 -0800 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-11-11 22:22:19 -0800 |
commit | 87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b (patch) | |
tree | fb272c8f41a094b46561d062a5aefdfd24084dac /drivers/macintosh/mac_hid.c | |
parent | a309cdc778b9eece59b34e9e1c26e41476dbbcd6 (diff) | |
download | linux-87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b.tar.bz2 |
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>
Diffstat (limited to 'drivers/macintosh/mac_hid.c')
-rw-r--r-- | drivers/macintosh/mac_hid.c | 8 |
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; } |