TODO o (bug from yaz) On the kernel with your page-fault patch applied, valgrind (2.2.0) can reliably cause the kernel to crash in page_fault_wake_function. Try, say, "valgrind --tool=addrcheck /bin/ls" right after boot. o the io_submit_try() thing could be done cleaner CHANGELOG 10/3/2004: * interface change: replace io_modify system call with IO_CMD_SET_EPOLLFD command to io_submit() 10/2/2004: * fixes from Yasushi. When adding fds with EPOLLOUT, the kernel sometimes segfaults. * fixes from Yasushi. Fixes cleanups in case of error in io_deliver_epoll_event() 9/21/2004: * experimental code for lockless event reaping (using cmpxchg), epoll_over_aio_lockless.patch, based on Kenneth Chen's patch * libaio code to reap events from the mapped event ring, also using cmpxchg 9/20/2004: * moved to libaio 0.3.99 9/19/2004: * cleaned up pipetest.c * use obj==-1 to indicate a canceled event in the event ring * changed sys_io_getevents() to deal with canceled events * added epio_test.c, epoll-over-aio test cases * changed the pagefault notification patch to also use io_modify(). the test program does not work yet. 9/17/2004: * fixes from Yasushi * fixed the epoll event update race. does proper locking when updating the event * removed "flex" from code, replaced with "aio" or "io" 9/10/2004: * fixed the pagefault bug. we're missing a reference to the page when we finish loading the page. * found out that kgdb is incompatible with gcc 2.95.4 on vivace. we'll stick with 3.3.4 * (Yosushi Saito) missing unlock in epoll * (Yosushi Saito) flex_deliver_epoll_event sometimes calls aio_ring_event w/o matching put_aio_ring_event 9/9/2004: * tried to fix the pagefault handling problem. the problem is when the process terminates, sys_exit() eventually calls free_hot_code_page() to free memory pages, when page->mapping should already be NULL. Now it's not, so the function complains. the reason for this is still unknown. the main memory-freeing function is zap_pte_range() 9/8/2004: * ported epoll code over to 2.6.8.1. pipetest is working * debugged io_submit_try(). for some reason, io_submit_one() is now calling __aio_run_iocbs(), instead of aio_run_iocb(). but we rely on io_submit_one() passing the user-level event object to aio_run_iocb() to be filled. For now I changed io_submit_one() to call aio_run_iocb() again. But I don't know whether this breaks anything. * trysubmit.c test is working 9/7/2004: * start using quilt+cvs to manage kernel patches. this seems to be much more easier than using bitkeeper when it comes to tracking main-line kernel tree * port the latest patch (flex-031210.patch) to Linux 2.6.8.1 (patches/flex.patch). * rewrote page_fault_wake_function because the pagetable maitainence API has changed. (no pte_chain_alloc() any more...) * the epoll code has changed much, back out our epoll changes for now * not tested yet flex-031207.patch fixed page fault stale data bugs. page fault handling is fully working now status: pagefault - working event queue - working but possible races