Input: do not try to filter out events if handler is not a filter
If given input handler is not a filter there is no point is iterating list of events in a packet to see if some of them need to be filtered out. Signed-off-by: Anshul Garg <anshul.g@samsung.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Родитель
5ab1714570
Коммит
2c50ad340c
|
@ -100,23 +100,24 @@ static unsigned int input_to_handler(struct input_handle *handle,
|
|||
struct input_value *end = vals;
|
||||
struct input_value *v;
|
||||
|
||||
for (v = vals; v != vals + count; v++) {
|
||||
if (handler->filter &&
|
||||
handler->filter(handle, v->type, v->code, v->value))
|
||||
continue;
|
||||
if (end != v)
|
||||
*end = *v;
|
||||
end++;
|
||||
if (handler->filter) {
|
||||
for (v = vals; v != vals + count; v++) {
|
||||
if (handler->filter(handle, v->type, v->code, v->value))
|
||||
continue;
|
||||
if (end != v)
|
||||
*end = *v;
|
||||
end++;
|
||||
}
|
||||
count = end - vals;
|
||||
}
|
||||
|
||||
count = end - vals;
|
||||
if (!count)
|
||||
return 0;
|
||||
|
||||
if (handler->events)
|
||||
handler->events(handle, vals, count);
|
||||
else if (handler->event)
|
||||
for (v = vals; v != end; v++)
|
||||
for (v = vals; v != vals + count; v++)
|
||||
handler->event(handle, v->type, v->code, v->value);
|
||||
|
||||
return count;
|
||||
|
@ -143,8 +144,11 @@ static void input_pass_values(struct input_dev *dev,
|
|||
count = input_to_handler(handle, vals, count);
|
||||
} else {
|
||||
list_for_each_entry_rcu(handle, &dev->h_list, d_node)
|
||||
if (handle->open)
|
||||
if (handle->open) {
|
||||
count = input_to_handler(handle, vals, count);
|
||||
if (!count)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
|
|
Загрузка…
Ссылка в новой задаче