|
@@ -100,23 +100,24 @@ static unsigned int input_to_handler(struct input_handle *handle,
|
|
struct input_value *end = vals;
|
|
struct input_value *end = vals;
|
|
struct input_value *v;
|
|
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)
|
|
if (!count)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
if (handler->events)
|
|
if (handler->events)
|
|
handler->events(handle, vals, count);
|
|
handler->events(handle, vals, count);
|
|
else if (handler->event)
|
|
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);
|
|
handler->event(handle, v->type, v->code, v->value);
|
|
|
|
|
|
return count;
|
|
return count;
|
|
@@ -143,8 +144,11 @@ static void input_pass_values(struct input_dev *dev,
|
|
count = input_to_handler(handle, vals, count);
|
|
count = input_to_handler(handle, vals, count);
|
|
} else {
|
|
} else {
|
|
list_for_each_entry_rcu(handle, &dev->h_list, d_node)
|
|
list_for_each_entry_rcu(handle, &dev->h_list, d_node)
|
|
- if (handle->open)
|
|
|
|
|
|
+ if (handle->open) {
|
|
count = input_to_handler(handle, vals, count);
|
|
count = input_to_handler(handle, vals, count);
|
|
|
|
+ if (!count)
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|