Subject: Re: DMA mapping file mappings
To: Damien Bergamini <damien.bergamini@free.fr>
From: Jachym Holecek <freza@psi.cz>
List: tech-kern
Date: 09/14/2004 20:43:25
Hello,

> I want to map the content of a file into DMA memory. The file 
> is mapped into user memory via mmap(2) by a userland tool which 
> then send the resulting pointer to a kernel driver via a special 
> ioctl. The driver then map the region into DMA using the 
> bus_dmamap_load(9) function passing a pointer to the process that 
> does the ioctl.
> Is it safe to do this? Do I need to call mlock(2) on the file 
> mapping or to call mmap(2) with the MAP_WIRED flag before passing 
> the pointer to the driver?

This way you have to trust userland passes wired memory. I'd instead
lock the memory myself on driver side using uvm_vslock(9). You'll need to
uvm_vsunlock(9) it after you're done with the buffer, of course - easy,
if your ioctl() call blocks.

> Should I copyin(9) everything into kernel memory first?

No, you don't need to.

	Regards,
		-- Jachym Holecek