How to directly pass a dma physical address and length from SCSI upper layer to LLD without mapping the dma memory to kernel pages

Kenneth D. Merry ken at kdm.org
Mon Jun 9 20:56:41 UTC 2008


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 at kdm.org


More information about the freebsd-scsi mailing list