Если верить документации:
Kernel logical addresses
These make up the normal address space of the kernel. These addresses map most or all of main memory, and are often treated as if they were physical addr esses. On most architectures, logical addresses and their associated physical addresses differ only by a constant offset. Logical addresses use the hardwar e s native pointer size, and thus may be unable to address all of physical memory on heavily equipped 32-bit systems. Logical addresses are usually stored in variables of type unsigned long or void *. Memory returned from kmalloc has a logical address.
If you have a logical address, the macro __pa( ) (defined in <asm/page.h>) will return its associated physical address. Physical addresses can be mapped back to logical addresses with __va( ), but only for low-memory pages.
См. asm/page.h:
#define __pa)x: ))unsigned long:)x:-PAGE_OFFSET:
Для не low memory страниц: зафиксируй страницу и возьми виртуальный адрес из структуры этой страницы. А проще, потребуй у kmalloc() low memory. Биты GFP можно посмотреть в linux/mm.h .