aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2010-11-12 01:03:59 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2010-11-12 01:22:19 -0500
commit87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b (patch)
treefb272c8f41a094b46561d062a5aefdfd24084dac
parenta309cdc778b9eece59b34e9e1c26e41476dbbcd6 (diff)
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 */
23 23
24static struct input_dev *mac_hid_emumouse_dev; 24static struct input_dev *mac_hid_emumouse_dev;
25 25
26static DEFINE_MUTEX(mac_hid_emumouse_mutex);
27
26static int mac_hid_create_emumouse(void) 28static int mac_hid_create_emumouse(void)
27{ 29{
28 static struct lock_class_key mac_hid_emumouse_dev_event_class; 30 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,
187 int old_val = *valp; 189 int old_val = *valp;
188 int rc; 190 int rc;
189 191
192 rc = mutex_lock_killable(&mac_hid_emumouse_mutex);
193 if (rc)
194 return rc;
195
190 rc = proc_dointvec(table, write, buffer, lenp, ppos); 196 rc = proc_dointvec(table, write, buffer, lenp, ppos);
191 197
192 if (rc == 0 && write && *valp != old_val) { 198 if (rc == 0 && write && *valp != old_val) {
@@ -202,6 +208,8 @@ static int mac_hid_toggle_emumouse(ctl_table *table, int write,
202 if (rc) 208 if (rc)
203 *valp = old_val; 209 *valp = old_val;
204 210
211 mutex_unlock(&mac_hid_emumouse_mutex);
212
205 return rc; 213 return rc;
206} 214}
207 215