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>
This commit is contained in:
parent
a309cdc778
commit
87abb6bbdb
@ -23,6 +23,8 @@ static int mouse_button3_keycode = KEY_RIGHTALT; /* right option key */
|
|||||||
|
|
||||||
static struct input_dev *mac_hid_emumouse_dev;
|
static struct input_dev *mac_hid_emumouse_dev;
|
||||||
|
|
||||||
|
static DEFINE_MUTEX(mac_hid_emumouse_mutex);
|
||||||
|
|
||||||
static int mac_hid_create_emumouse(void)
|
static int mac_hid_create_emumouse(void)
|
||||||
{
|
{
|
||||||
static struct lock_class_key mac_hid_emumouse_dev_event_class;
|
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 old_val = *valp;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
rc = mutex_lock_killable(&mac_hid_emumouse_mutex);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
rc = proc_dointvec(table, write, buffer, lenp, ppos);
|
rc = proc_dointvec(table, write, buffer, lenp, ppos);
|
||||||
|
|
||||||
if (rc == 0 && write && *valp != old_val) {
|
if (rc == 0 && write && *valp != old_val) {
|
||||||
@ -202,6 +208,8 @@ static int mac_hid_toggle_emumouse(ctl_table *table, int write,
|
|||||||
if (rc)
|
if (rc)
|
||||||
*valp = old_val;
|
*valp = old_val;
|
||||||
|
|
||||||
|
mutex_unlock(&mac_hid_emumouse_mutex);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user