Re: [PATCH RFC 0/6] epoll: Introduce new syscall "epoll_mod_wait"

From: josh
Date: Tue Jan 20 2015 - 18:04:10 EST


On Tue, Jan 20, 2015 at 02:40:32PM -0800, Andy Lutomirski wrote:
> On Tue, Jan 20, 2015 at 1:57 AM, Fam Zheng <famz@xxxxxxxxxx> wrote:
> > 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/