Can register addresses conversion go through iommu too? probably not..

ckim at ckim at
Thu Sep 30 02:54:17 EDT 2021

Hello all,

I know when a device does dma to memory, we use functions like
dma_alloc_coherent to allocate a memory region for the dma and we get the
kernel virtual address and device virtual address at the same time. The
iommu hardware converts the device virtual address to physical address
reducing the processing time.  


I have a question (to make sure my understanding is correct).

To use registers in the device driver, we use ioremap function to get the
kernel virtual address for the device registers. If the OS is running in
virtualized environment (a hypervisor under it), this kernel virtual address
should go under conversion twice  

1. virtual to physical by OS  (this physical is not actually physical, an
intermediate physical?)

2. intermediate physical to real physical

I thought these two conversions are done by kernel or hypervisor software
because iommu is for address translation for the addresses that the device
"uses(or generates)", not for the kernel to access the device itself. 

Is my understanding correct?

Any help will be appreciated.

Thank you!

Chan Kim


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Kernelnewbies mailing list