> The current kernel driver code looks up the physical address of a page of > user-allocated memory by traversing the page table, and then writing the > physical address to the external MMU. If we were to move the driver to > userspace, this procedure would require exposing the physical address to > user space, which insecure and thus a no-go. > > What possibilities are there for programming the MMU from a userspace > driver?
If you want to be secure none. That's not to say you can't keep most of the code in user space but you'll need the DMA and MMU manager to be kernel side because you have to trust it. Even if you use something like VT-D, you've then got to program the IOMMU and that has to be done in kernel for the same obvious reasons. Look at VFIO.. maybe that helps. Alan