Communications kernel -> userland

Marc Ramirez marc.ramirez at bluecirclesoft.com
Mon Jul 21 06:21:57 PDT 2003


On Fri, 18 Jul 2003, Terry Lambert wrote:

> Marc Ramirez wrote:
> > I asked this in -questions, but got no response; sorry for the repost.
> >
> > I have a device driver that needs to make requests for data from a
> > userland daemon.  What's the preferred method for doing this in 4.8R and
> > 5.1R?  I'm assuming the answer is Unix-domain sockets...
>
> It depends on the application.  In most cases these are set up
> as request/response protocols.
>
> In that case, the best method is to ise an ioctl() or fcntl()
> (which you use depends on what in the kernel is talking to
> userland), and then "returning" to user space with the request.
> The userland then makes another call back down with the response,
> and the next wait-for-request.  This saves you fully 50% of the
> protection domain crossing system calls from an ordinary callback,
> and it saves you 300% of the protection domain crossings of what
> you would need for a pipe/FIFO/unix-domain-socket.

I understand.  Thanks!

> E.g.:
>
> 	user				kernel
> 	----				------
> REQ1					make_req()
> 					sleep_waiting_for_available()
> 	ioctl(fd, MY_GETREQ, &req)
> 	sleep_waiting_for_req()
> 					copyout()
> 					sleep_waiting_for_rsp()
> 	ioctl(fd, MY_RSPREQ, &req)
> 	sleep_waiting_for_req()
> 					copyin()
> 					...
> REQ2					make_req()
> 					copyout()
> 					sleep_waiting_for_rsp()
> 	ioctl(fd, MY_RSPREQ, &req)
> 	sleep_waiting_for_req()
> 					copyin()
> 					...
> ...
>
> -- Terry
>


--
Marc Ramirez
Blue Circle Software Corporation
513-688-1070 (main)
513-382-1270 (direct)
www.bluecirclesoft.com


More information about the freebsd-hackers mailing list