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.

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
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to