From owner-freebsd-hackers@FreeBSD.ORG Mon Jul 21 06:21:57 2003 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 36EAC37B401 for ; Mon, 21 Jul 2003 06:21:57 -0700 (PDT) Received: from www.bluecirclesoft.com (cvg-65-26-145-190.cinci.rr.com [65.26.145.190]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5F81343F75 for ; Mon, 21 Jul 2003 06:21:56 -0700 (PDT) (envelope-from marc.ramirez@bluecirclesoft.com) Received: from www.bluecirclesoft.com (localhost [127.0.0.1]) h6LDLtSW047233; Mon, 21 Jul 2003 09:21:55 -0400 (EDT) (envelope-from mrami@bluecirclesoft.com) Received: from localhost (mrami@localhost)h6LDLtk9047230; Mon, 21 Jul 2003 09:21:55 -0400 (EDT) X-Authentication-Warning: www.bluecirclesoft.com: mrami owned process doing -bs Date: Mon, 21 Jul 2003 09:21:55 -0400 (EDT) From: Marc Ramirez To: Terry Lambert In-Reply-To: <3F18D07F.BEE28FF9@mindspring.com> Message-ID: <20030721092121.V47203@www.bluecirclesoft.com> References: <20030718150047.O61759@www.bluecirclesoft.com> <3F18D07F.BEE28FF9@mindspring.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-hackers@freebsd.org Subject: Re: Communications kernel -> userland X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jul 2003 13:21:57 -0000 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