• Davide Libenzi's avatar
    signal/timer/event: KAIO eventfd support example · 9c3060be
    Davide Libenzi authored
    This is an example about how to add eventfd support to the current KAIO code,
    in order to enable KAIO to post readiness events to a pollable fd (hence
    compatible with POSIX select/poll).  The KAIO code simply signals the eventfd
    fd when events are ready, and this triggers a POLLIN in the fd.  This patch
    uses a reserved for future use member of the struct iocb to pass an eventfd
    file descriptor, that KAIO will use to post events every time a request
    completes.  At that point, an aio_getevents() will return the completed result
    to a struct io_event.  I made a quick test program to verify the patch, and it
    runs fine here:
    
    http://www.xmailserver.org/eventfd-aio-test.c
    
    The test program uses poll(2), but it'd, of course, work with select and epoll
    too.
    
    This can allow to schedule both block I/O and other poll-able devices
    requests, and wait for results using select/poll/epoll.  In a typical
    scenario, an application would submit KAIO request using aio_submit(), and
    will also use epoll_ctl() on the whole other class of devices (that with the
    addition of signals, timers and user events, now it's pretty much complete),
    and then would:
    
    	epoll_wait(...);
    	for_each_event {
    		if (curr_event_is_kaiofd) {
    			aio_getevents();
    			dispatch_aio_events();
    		} else {
    			dispatch_epoll_event();
    		}
    	}
    Signed-off-by: default avatarDavide Libenzi <davidel@xmailserver.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9c3060be
aio.c 45.6 KB