• Jeff Brown's avatar
    Input: evdev - only signal polls on full packets · cdda911c
    Jeff Brown authored
    This patch modifies evdev so that it only becomes readable when
    the buffer contains an EV_SYN/SYN_REPORT event.
    
    On SMP systems, it is possible for an evdev client blocked on poll()
    to wake up and read events from the evdev ring buffer at the same
    rate as they are enqueued.  This can result in high CPU usage,
    particularly for MT devices, because the client ends up reading
    events one at a time instead of reading complete packets.
    
    We eliminate this problem by making the device readable only when
    the buffer contains at least one complete packet.  This causes
    clients to block until the entire packet is available.
    Signed-off-by: default avatarJeff Brown <jeffbrown@android.com>
    Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
    cdda911c
evdev.c 22.5 KB