Re: [PATCH RFC 0/6] epoll: Introduce new syscall "epoll_mod_wait"
From: <hidden>
Date: 2015-01-20 23:03:52
Also in:
linux-fsdevel, lkml
On Tue, Jan 20, 2015 at 02:40:32PM -0800, Andy Lutomirski wrote:
On Tue, Jan 20, 2015 at 1:57 AM, Fam Zheng [off-list ref] wrote:quoted
This adds a new system call, epoll_mod_wait. It's described as below: NAME epoll_mod_wait - modify and wait for I/O events on an epoll file descriptor SYNOPSIS int epoll_mod_wait(int epfd, int flags, int ncmds, struct epoll_mod_cmd *cmds, struct epoll_wait_spec *spec); DESCRIPTION The epoll_mod_wait() system call can be seen as an enhanced combination of several epoll_ctl(2) calls, which are followed by an epoll_pwait(2) call. It is superior in two cases: 1) When epoll_ctl(2) are followed by epoll_wait(2), using epoll_mod_wait will save context switches between user mode and kernel mode; 2) When you need higher precision than microsecond for wait timeout. The epoll_ctl(2) operations are embedded into this call by with ncmds and cmds. The latter is an array of command structs: struct epoll_mod_cmd { /* Reserved flags for future extension, must be 0 for now. */ int flags; /* The same as epoll_ctl() op parameter. */ int op; /* The same as epoll_ctl() fd parameter. */ int fd; /* The same as the "events" field in struct epoll_event. */ uint32_t events; /* The same as the "data" field in struct epoll_event. */ uint64_t data; /* Output field, will be set to the return code once this * command is executed by kernel */ int error; };I would add an extra u32 at the end so that the structure size will be a multiple of 8 bytes on all platforms.
*shrug*, but if you do so, enforce that it has a value of 0 or return -EINVAL, just like a flags field. Alternatively, move the last field earlier and make flags a uint64_t. - Josh Triplett