• Nicolas Pitre's avatar
    vcs: add poll/fasync support · 47725ac7
    Nicolas Pitre authored
    The /dev/vcs* devices are used, amongst other things, by accessibility
    applications such as BRLTTY to display the screen content onto refreshable
    braille displays.  Currently this is performed by constantly reading from
    /dev/vcsa0 whether or not the screen content has changed.  Given the
    default braille refresh rate of 25 times per second, this easily qualifies
    as the biggest source of wake-up events preventing laptops from entering
    deeper power saving states.
    
    To avoid this periodic polling, let's add support for select()/poll() and
    SIGIO with the /dev/vcs* devices.  The implemented semantic is to report
    data availability whenever the corresponding vt has seen some update after
    the last read() operation.  The application still has to lseek() back
    as usual in order to read() the new data.
    
    Not to create unwanted overhead, the needed data structure is allocated
    and the vt notification callback is registered only when the poll or
    fasync method is invoked for the first time per file instance.
    Signed-off-by: default avatarNicolas Pitre <nicolas.pitre@canonical.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Acked-by: default avatarAlan Cox <alan@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    47725ac7
vc_screen.c 14.1 KB