In Linux kernel driver, can I initiate DMA with continuous physical memory region when IOMMU
is in the middle?
Here's my understanding of IOMMU
features:
- Memory protection for security reasons
- Provides
IOVA
for peripherals forDMA
to relax 'continuous physical address` restriction. However, if virtual memory is involved, kernel (or something else) should maintain page table and it would be an overhead.
Given above, I wonder if there's an IOMMU
hardware that does not support IOVA
for the performance reasons.
Also, is there an IOMMU
hardware that can be programmed to turn on/off IOVA
supports? If it is, does linux kernel provide portable library for it (or vendor specific)?
I'm interested more on the ARM environment, but I'd appreciate any answer about any architecture(s).