Commit 1966cb22 authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: sysrq - add locking to sysrq_filter()

Similarly to the keyboard handler, we are called by different input
devices and thus need to add spinlock if we want to maintain our
state properly.
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 594d6363
...@@ -566,10 +566,16 @@ static const unsigned char sysrq_xlate[KEY_MAX + 1] = ...@@ -566,10 +566,16 @@ static const unsigned char sysrq_xlate[KEY_MAX + 1] =
static bool sysrq_down; static bool sysrq_down;
static int sysrq_alt_use; static int sysrq_alt_use;
static int sysrq_alt; static int sysrq_alt;
static DEFINE_SPINLOCK(sysrq_event_lock);
static bool sysrq_filter(struct input_handle *handle, unsigned int type, static bool sysrq_filter(struct input_handle *handle, unsigned int type,
unsigned int code, int value) unsigned int code, int value)
{ {
bool suppress;
/* We are called with interrupts disabled, just take the lock */
spin_lock(&sysrq_event_lock);
if (type != EV_KEY) if (type != EV_KEY)
goto out; goto out;
...@@ -601,7 +607,10 @@ static bool sysrq_filter(struct input_handle *handle, unsigned int type, ...@@ -601,7 +607,10 @@ static bool sysrq_filter(struct input_handle *handle, unsigned int type,
} }
out: out:
return sysrq_down; suppress = sysrq_down;
spin_unlock(&sysrq_event_lock);
return suppress;
} }
static int sysrq_connect(struct input_handler *handler, static int sysrq_connect(struct input_handler *handler,
...@@ -652,8 +661,8 @@ static void sysrq_disconnect(struct input_handle *handle) ...@@ -652,8 +661,8 @@ static void sysrq_disconnect(struct input_handle *handle)
} }
/* /*
* We are matching on KEY_LEFTALT insteard of KEY_SYSRQ because not all * We are matching on KEY_LEFTALT instead of KEY_SYSRQ because not all
* keyboards have SysRq ikey predefined and so user may add it to keymap * keyboards have SysRq key predefined and so user may add it to keymap
* later, but we expect all such keyboards to have left alt. * later, but we expect all such keyboards to have left alt.
*/ */
static const struct input_device_id sysrq_ids[] = { static const struct input_device_id sysrq_ids[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment