Skip to content
  • Davide Libenzi's avatar
    9c3060be
    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
    signal/timer/event: KAIO eventfd support example
    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>
Loading