Without delving into deep detail regarding the internal workings of vmalloc() (or the user space malloc()), we'll nevertheless cover some crucial points that a competent kernel/driver developer like you must understand.
First and foremost, vmalloc-ed virtual memory has to, at some point (when used), become physical memory. This physical memory is allocated via the one and only way that it can be in the kernel – via the page (or buddy system) allocator. How this happens is a bit indirect and is briefly explained as follows.
When using vmalloc(), a key point should be understood: vmalloc() only causes virtual memory pages to be allocated (they are merely marked as reserved by the OS). No physical memory is actually allocated at this time. The actual physical page frames corresponding to the virtual ones only get allocated – that too on a page-by-page basis – when these virtual pages are touched...