From owner-freebsd-scsi@FreeBSD.ORG Mon Jun 9 20:56:41 2008 Return-Path: Delivered-To: freebsd-scsi@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C411B10656A9 for ; Mon, 9 Jun 2008 20:56:41 +0000 (UTC) (envelope-from ken@nargothrond.kdm.org) Received: from nargothrond.kdm.org (nargothrond.kdm.org [70.56.43.81]) by mx1.freebsd.org (Postfix) with ESMTP id 4F8F48FC0C for ; Mon, 9 Jun 2008 20:56:41 +0000 (UTC) (envelope-from ken@nargothrond.kdm.org) Received: from nargothrond.kdm.org (localhost [127.0.0.1]) by nargothrond.kdm.org (8.14.2/8.13.6) with ESMTP id m59KHNnw095940; Mon, 9 Jun 2008 14:17:23 -0600 (MDT) (envelope-from ken@nargothrond.kdm.org) Received: (from ken@localhost) by nargothrond.kdm.org (8.14.2/8.13.6/Submit) id m59KHNU4095939; Mon, 9 Jun 2008 14:17:23 -0600 (MDT) (envelope-from ken) Date: Mon, 9 Jun 2008 14:17:23 -0600 From: "Kenneth D. Merry" To: "Pan, Weimin" Message-ID: <20080609201723.GA95850@nargothrond.kdm.org> References: <6B24EEDBA38D764293B27C04FE414CC64E40604C07@G1W0491.americas.hpqcorp.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <6B24EEDBA38D764293B27C04FE414CC64E40604C07@G1W0491.americas.hpqcorp.net> User-Agent: Mutt/1.4.2i X-Virus-Scanned: ClamAV 0.92.1/7415/Mon Jun 9 12:07:23 2008 on nargothrond.kdm.org X-Virus-Status: Clean Cc: "freebsd-scsi@freebsd.org" Subject: Re: How to directly pass a dma physical address and length from SCSI upper layer to LLD without mapping the dma memory to kernel pages X-BeenThere: freebsd-scsi@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SCSI subsystem List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Jun 2008 20:56:41 -0000 On Mon, Jun 09, 2008 at 18:18:16 +0000, Pan, Weimin wrote: > SCSI upper layer can pass a scatterlist to middle layer and LLD. Normally the page_link, length, and offset is set in the scatterlist. LLD will convert to dma_address from pages by itself. That means the dma physical address has to map to kernel memory space before it can be passed to LLD for data transfer. If I have a large dma memroy and it doesn't need to be touched by kernel or user mode Apps, it is a performance penalty to force to do that. > > Is there a way to directly pass a dma physical address from upper layer to LLD (like use dma_address in a scatterlist)? > I looked at a couple of LLD drivers and none of them handle this kind of situation. In theory, you can pass a physical address in a CAM CCB if you set the CAM_DATA_PHYS flag on the CCB. It looks like quite a few drivers in the tree support that flag, or at least look at it. So take a look at whichever driver you're using, and see if it looks at that flag in the CCB. Ken -- Kenneth Merry ken@kdm.org