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

From: Rusty Russell (rusty@rustcorp.com.au)
Date: Thu Oct 31 2002 - 17:00:34 EST


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/



This archive was generated by hypermail 2b29 : Thu Oct 31 2002 - 22:00:57 EST