diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-11-12 01:03:59 -0500 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-11-12 01:22:19 -0500 |
| commit | 87abb6bbdbcfbced2ce0bcad68dd89ac3ff9464b (patch) | |
| tree | fb272c8f41a094b46561d062a5aefdfd24084dac /drivers/macintosh | |
| parent | a309cdc778b9eece59b34e9e1c26e41476dbbcd6 (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>
Diffstat (limited to 'drivers/macintosh')
| -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 */ | |||
| 23 | 23 | ||
| 24 | static struct input_dev *mac_hid_emumouse_dev; | 24 | static struct input_dev *mac_hid_emumouse_dev; |
| 25 | 25 | ||
| 26 | static DEFINE_MUTEX(mac_hid_emumouse_mutex); | ||
| 27 | |||
| 26 | static int mac_hid_create_emumouse(void) | 28 | static 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 | ||
