tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Opencomm: proplib-based syscall



On Sun Apr 26 2009 at 08:19:22 +0300, Elad Efrat wrote:
> >>It's like prop_dictionary_sendrecv_ioctl(), only that:
> >>   - it doesn't require a file-descriptor/command
> >>   - it takes a syscall slot
> >
> >It should be implemented as RPC by read/write on a file descriptor.  By
> >plugging it into a proplib ioctl kludge you just destroy the generality.
> 
> There's no "ioctl kludge" in it, the ioctl() call in the userland part
> has been replaced with __syscall(), and the kernel only uses the ioctl
> wrappers for their copyin()/copyout(). Extract these out of proplib, and
> you won't see the word "ioctl" anywhere. :)

And you still don't have a read/write interface.  To make *your* "pass
over the wire to other systems" use case possible, you'd need to invent
an additional protocol.  Having your implementation and use cases not
match does not give a very good first impression.

> >>  - We can offer past and future ABI compatibility (think of
> >>    internalizing syscall arguments for mount() or whatever, so you
> >>    don't even have to rebuild the program)
> >
> >Compatibility reduces to the same problem as with binary interfaces:
> >you still need to handle both cases, so you don't get any benefit here.
> >And if your old binary doesn't deliver the info that the new version of
> >the syscall wants, no amount of proplib can conjure up the missing data.
> 
> It really depends. The easiest case here is mount, as that's an example
> for a program that really comes down to a syscall. Control its arguments
> using dictionary internalizing from a file and you can always pass a
> file with some XML in it instead of arguments.

As I already pointed out, that does not magically solve all problems.
In fact, fundamentally it is completely the same thing as the current
model.  You can just as well pass uint8_t[] read from a file and have
the same problems and same responsibilities.

Say the argument is

struct {
        a;
        b;
}

And the relevant xml is <a></a><b></b>.  What needs to happen if you
need to add "c", change "a" or remove "b"?

Saying that opencomm will fix compatibility is like making a roux and
saying that we now have a generic sauce for all foods.
(n.b. this analogy has more than one level to it)

> >>  - Subsystems can register themselves with opencomm() instead of
> >>    adding a new syscall
> >
> >.. or they can just use syscall_establish().  Otherwise we would divide
> >syscall provides into two camps.
> 
> Using syscall_establish() they're risking taking up a slot that is used
> by someone else, no? they also require you to rebuild userland programs
> and provide a library interface for the syscall to be useful.
> 
> I'd like a vendor to be able to register a "syscall" without all the
> associated headache of trying to assign a syscall number (especially now
> that we still have syscalls.master), writing a library interface for it,
> etc.

1) you still need a scheme to avoid conflicts.  granted, it may be easier
   since you have more namespace.
2) there is no need to write a library interface even now.  syscall() is
   opencomm without xml.
3) i bet the vendors don't appreciate their performance-critical
   apps being forced to using proplib

Your answer didn't address my original concern related to "3" at all.

> >I'm not convinced that just providing
> >opencomm buys us anything if we don't do the rest of the work.
> 
> Obviously.

I'm still not convinced.  Actually, I'm less convinced now.  To me,
your current argumentation pretty much reads: "add a generic interface
which can be used for something".  Implement a useful use case and then
you have something concrete to shut me up with.


Home | Main Index | Thread Index | Old Index