Skip to content

Commit

Permalink
Input: do not try to filter out events if handler is not a filter
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Anshul Garg authored and Dmitry Torokhov committed Jan 8, 2015
1 parent 5ab1714 commit 2c50ad3
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions drivers/input/input.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
Expand Down

0 comments on commit 2c50ad3

Please sign in to comment.