Before this commit, the epoll implementation works by simply delegating to the host OS through OCall. One major problem with this implementation is that it can only handle files that are backed by a file of the host OS (e.g., sockets), but not those are are mainly implemented by the LibOS (e.g., pipes). Therefore, a new epoll implementation that can handle all kinds of files is needed. This commit completely rewrites the epoll implementation by leveraging the new event subsystem. Now the new epoll can handle all file types: 1. Host files, e.g., sockets, eventfd; 2. LibOS files, e.g., pipes; 3. Hybrid files, e.g., epoll files. For a new file type to support epoll, it only neends to implement no more than four methods of the File trait: * poll (required for all file types); * notifier (required for all file files); * host_fd (only required for host files); * recv_host_events (only required for host files). |
||
|---|---|---|
| .. | ||
| include | ||
| src | ||
| Makefile | ||
| pal.lds | ||