Message ID | 20240703213756.3375978-4-dmitry.torokhov@gmail.com |
---|---|
State | Accepted |
Commit | 14498e993fb77adce75f0106162902b2f8b1d480 |
Headers | show |
Series | Simplify event handling logic in input core | expand |
Hi Dmitry, On Wed, Jul 03, 2024 at 02:37:50PM -0700, Dmitry Torokhov wrote: > In preparation to consolidating filtering and event processing in the > input core change events() method to return number of events processed > by it. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Jeff LaBundy <jeff@labundy.com> > --- > drivers/input/evdev.c | 6 ++++-- > include/linux/input.h | 7 ++++--- > 2 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c > index 05abcd45b5d4..a8ce3d140722 100644 > --- a/drivers/input/evdev.c > +++ b/drivers/input/evdev.c > @@ -288,8 +288,8 @@ static void evdev_pass_values(struct evdev_client *client, > /* > * Pass incoming events to all connected clients. > */ > -static void evdev_events(struct input_handle *handle, > - const struct input_value *vals, unsigned int count) > +static unsigned int evdev_events(struct input_handle *handle, > + struct input_value *vals, unsigned int count) > { > struct evdev *evdev = handle->private; > struct evdev_client *client; > @@ -306,6 +306,8 @@ static void evdev_events(struct input_handle *handle, > evdev_pass_values(client, vals, count, ev_time); > > rcu_read_unlock(); > + > + return count; > } > > static int evdev_fasync(int fd, struct file *file, int on) > diff --git a/include/linux/input.h b/include/linux/input.h > index c22ac465254b..89a0be6ee0e2 100644 > --- a/include/linux/input.h > +++ b/include/linux/input.h > @@ -275,7 +275,8 @@ struct input_handle; > * it may not sleep > * @events: event sequence handler. This method is being called by > * input core with interrupts disabled and dev->event_lock > - * spinlock held and so it may not sleep > + * spinlock held and so it may not sleep. The method must return > + * number of events passed to it. > * @filter: similar to @event; separates normal event handlers from > * "filters". > * @match: called after comparing device's id with handler's id_table > @@ -312,8 +313,8 @@ struct input_handler { > void *private; > > void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); > - void (*events)(struct input_handle *handle, > - const struct input_value *vals, unsigned int count); > + unsigned int (*events)(struct input_handle *handle, > + struct input_value *vals, unsigned int count); > bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); > bool (*match)(struct input_handler *handler, struct input_dev *dev); > int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); > -- > 2.45.2.803.g4e1b14247a-goog > Kind regards, Jeff LaBundy
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 05abcd45b5d4..a8ce3d140722 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -288,8 +288,8 @@ static void evdev_pass_values(struct evdev_client *client, /* * Pass incoming events to all connected clients. */ -static void evdev_events(struct input_handle *handle, - const struct input_value *vals, unsigned int count) +static unsigned int evdev_events(struct input_handle *handle, + struct input_value *vals, unsigned int count) { struct evdev *evdev = handle->private; struct evdev_client *client; @@ -306,6 +306,8 @@ static void evdev_events(struct input_handle *handle, evdev_pass_values(client, vals, count, ev_time); rcu_read_unlock(); + + return count; } static int evdev_fasync(int fd, struct file *file, int on) diff --git a/include/linux/input.h b/include/linux/input.h index c22ac465254b..89a0be6ee0e2 100644 --- a/include/linux/input.h +++ b/include/linux/input.h @@ -275,7 +275,8 @@ struct input_handle; * it may not sleep * @events: event sequence handler. This method is being called by * input core with interrupts disabled and dev->event_lock - * spinlock held and so it may not sleep + * spinlock held and so it may not sleep. The method must return + * number of events passed to it. * @filter: similar to @event; separates normal event handlers from * "filters". * @match: called after comparing device's id with handler's id_table @@ -312,8 +313,8 @@ struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); - void (*events)(struct input_handle *handle, - const struct input_value *vals, unsigned int count); + unsigned int (*events)(struct input_handle *handle, + struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
In preparation to consolidating filtering and event processing in the input core change events() method to return number of events processed by it. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> --- drivers/input/evdev.c | 6 ++++-- include/linux/input.h | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-)