Re: Unifying epoll,aio,futexes etc. (What I really want from epoll)

Rusty Russell (rusty@rustcorp.com.au)
Fri, 1 Nov 2002 09:00:34 +1100


On 31 Oct 2002 16:45:58 +0000
Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:

> What is hard is multiple futex waits and livelock for that. I think it
> can be done properly but I've not sat down and designed it all out - I
> wonder what Rusty thinks.

Hmm... Never thought about it. You mean an API like:

struct futex_set *futex_set_init();
struct futex_set *futex_set_add(struct futex_set *, struct futex *);
/* Returns futex obtained. */
struct futex *futex_set_wait(struct futex_set *);

I think a naive implementation of futex_set_wait would look like:

set = futex_set
try:
for each futex in set {
if (grab in userspace) {
close fds;
return with futex;
}
close old fd for futex if any
call FUTEX_FD to get fd notification of futex;
}

select on fds
set = fds which are ready
goto try

You could, of course, loop through the fast path once before making any
syscalls. Another optimization is to have FUTEX_FD reuse an existing fd
rather than requiring the close.

Not sure I get the point about livelock though: deadlock is possible if
apps seek multiple locks at once without care, of course.

Rusty.

-- 
   there are those who do and those who hang on and you don't see too
   many doers quoting their contemporaries.  -- Larry McVoy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/