[PATCH libinput v2] evdev: Log evdev event queue overflows
David Herrmann
dh.herrmann at gmail.com
Mon Nov 3 02:49:12 PST 2014
Hi
On Wed, Oct 29, 2014 at 3:56 PM, Derek Foreman <derekf at osg.samsung.com> wrote:
> Log a message when the kernel event queue overflows and events are dropped.
> After 10 messages logging stops to avoid flooding the logs if the condition
> is persistent.
> ---
> src/evdev.c | 11 +++++++++++
> src/evdev.h | 4 ++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/src/evdev.c b/src/evdev.c
> index 1b4ce10..9026f5c 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -924,6 +924,17 @@ evdev_device_dispatch(void *data)
> rc = libevdev_next_event(device->evdev,
> LIBEVDEV_READ_FLAG_NORMAL, &ev);
> if (rc == LIBEVDEV_READ_STATUS_SYNC) {
> + if (device->syn_drops_received < 10) {
> + device->syn_drops_received++;
> + log_info(libinput, "SYN_DROPPED event from "
> + "\"%s\" - some input events have "
> + "been lost.\n", device->devname);
> + if (device->syn_drops_received == 10)
> + log_info(libinput, "No longer logging "
> + "SYN_DROPPED events for "
> + "\"%s\"\n", device->devname);
> + }
> +
I really appreciate those log-messages, but can we use rate-limiting
here, rather than a per-device counter? I mean, my compositor usually
runs for multiple days, or even weeks. I really don't want it to stop
reporting SYN_DROPPED events just because it got 100 of those during
startup (or something similar).
Something like this:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/lib/ratelimit.c
I can prep a patch if you want.
Thanks
David
> /* send one more sync event so we handle all
> currently pending events before we sync up
> to the current state */
> diff --git a/src/evdev.h b/src/evdev.h
> index c0d6577..9e84623 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -135,6 +135,10 @@ struct evdev_device {
> /* Checks if buttons are down and commits the setting */
> void (*change_to_left_handed)(struct evdev_device *device);
> } buttons;
> +
> + /* The number of times libevdev processes a SYN_DROPPED, so we can
> + * stop logging them to avoid flooding the logs. */
> + int syn_drops_received;
> };
>
> #define EVDEV_UNHANDLED_DEVICE ((struct evdev_device *) 1)
> --
> 2.1.1
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list