This is what Mel Gormen says: pgd_offset() takes an address and the mm_struct for the process and returns the PGD entry that covers the requested address. pmd_offset() takes a PGD entry and an address and returns the relevant PMD. pte_offset() takes a PMD and returns the relevant PTE. Physical address space is flat, no concept of PGDs, PMDs and PTEs. So, the address returned by pmd_offset is virtual address as one would access it inside kernel. Nitin -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/