Re: [PATCHv4 0/6] sys_indirect system call

Eric Dumazet
2007-11-20T09:13:58Z

Ulrich Drepper a écrit :
> wing patches provide an alternative implementation of the
> sys_indirect system call which has been discussed a few times.
> This no system call allows us to extend existing system call
> interfaces with adding more system calls.

I am wondering if some parts are missing from your ChangeLog

You apparently added in v3 a new 'flags' parameter to indirect syscall but no
trace of this change in Changelog, and why it was added. This seems to imply a
future multiplexor.

And no change in the test program reflecting this 'flags' new param, so it fails.

> fd = syscall (__NR_indirect, &r, &i, sizeof (i));

should be fd = syscall (__NR_indirect, &r, &i, sizeof (i), 0);

> int s2 = fcntl (fd, F_GETFD);
> int t2 = fcntl (fd, F_GETFL);
> printf ("new: FD_CLOEXEC %s set, NONBLOCK %s set\n",
> s2 == 0 ? "not" : "is", (t2 & O_NONBLOCK) ? "is" : "not");
> close (fd);
>
> i.file_flags.flags = O_CLOEXEC;
> sigset_t ss;
> sigemptyset(&ss);
> FILL_IN(r, __NR_signalfd, -1, (long) &ss, 8);
> fd = syscall (__NR_indirect, &r, &i, sizeof (i));

same here ?

> int s3 = fcntl (fd, F_GETFD);
> printf ("signalfd: FD_CLOEXEC %s set\n", s3 == 0 ? "not" : "is");
> close (fd);
>
> FILL_IN(r, __NR_eventfd, 8);
> fd = syscall (__NR_indirect, &r, &i, sizeof (i));

and here.

> int s4 = fcntl (fd, F_GETFD);
> printf ("eventfd: FD_CLOEXEC %s set\n", s4 == 0 ? "not" : "is");
> close (fd);
>
> return s1 != 0 || s2 == 0 || t1 != 0 || t2 == 0 || s3 == 0 || s4 == 0;
> }
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~