Date: Wed, 15 Jan 2003 12:51:42 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: Peter Wemm <peter@wemm.org> Cc: Terry Lambert <tlambert2@mindspring.com>, "Alan L. Cox" <alc@imimic.com>, arch@FreeBSD.ORG Subject: Re: getsysfd() patch #1 (Re: Virtual memory question) Message-ID: <200301152051.h0FKpgxA009515@apollo.backplane.com> References: <20030115034234.A3A742A89E@canning.wemm.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I think we've established the usefulness of a VM Object descriptor. Now
what about the system call API? At the moment I have:
fd = getsysfd(int type, off_t size);
I'm thinking of making it a more generic filesystem-optional rendezvous.
But it would not work like a FIFO. Instead you would simply create a
normal file and specify it. The normal file would only be used as a
placemarker for the system descriptor to allow rendezvous (which is
probably how FIFO should have been done in the first place, since adding
type bits to the stat/inode is not extensible).
int getsysfd(int type, int xfd, int64_t data)
The file would only be used as a placemarker. i.e. for SYSFD_MEMORY
the storage is in the VM Object which is NOT associated with the file
in any way other then to serve as a rendezvous. The filesystem
rendezvous would be optional, you could specify -1 for xfd. If you
specify xfd you would be able to close() it immediate after the
getsysfd() call.
Example useage:
xfd = open("/tmp/fubar", O_CREAT, 0666);
memfd = getsysfd(SYSFD_MEMORY, xfd, 1024*1024);
Or:
memfd = getsysfd(SYSFD_MEMORY, -1, 1024*1024);
This covers the basic SYSFD types that I would like to implement...
SYSFD_MEMORY, SYSFD_MSGQ (a properly implemented multi-target message
queue, something we sorely need), and SYSFD_TIMER (sophisticated timer
support).
memfd = getsysfd(SYSFD_MEMORY, opt_fd, object_size)
timerfd = getsysfd(SYSFD_TIMER, opt_fd, timer_type_and_initial_count)
msgqfd = getsysfd(SYSFD_MSGQ, opt_fd, my_target_identifier)
I considered adding a path argument to getsysfd() but I think that would
be overkill. We might want to add a separate flags argument, though:
int getsysfd(int type, int xfd, int flags, int64_t data)
instead of:
int getsysfd(int type, int xfd, int64_t data)
So, remember, this particular debate should be about the system call API
to be sure it covers expected needs. Do we have enough arguments? Do
we need more? Do we need less?
-Matt
Matthew Dillon
<dillon@backplane.com>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200301152051.h0FKpgxA009515>
