mirror of https://gitee.com/openkylin/linux.git
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: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
594d636320
commit
1966cb225c
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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[] = {
|
||||||
|
|
Loading…
Reference in New Issue