Hi,
--- Quote Start ---
Just to clarify -- these are kernel virtual addresses (e.g. from kmalloc()) if given an address from vmalloc() this would not work, right?
--- Quote End ---
Yes, it's right. For the difference of the 'kmalloc()' and 'vmalloc()', please refer the next site.
http://book.chinaunix.net/special/ebook/linux_kernel_development/0672327201/ch11lev1sec5.html Of course, the kernel can access the address area from vmalloc(), but must use MMU and page tables, so the 'pure' hardware like DMA can't access those without complicated address conversions, while kmalloc() uses simple straight mapping like 0xC0000000 to 0x00000000.
Kazu