I am reading about Linux memory management. I know that 

> 
> The Linux kernel is responsible for creating and maintaining page tables but employs the CPU’s memory management unit (MMU) to translate the virtual memory accesses of a process into corresponding physical memory accesses.
> 
> 
> 

But, I also know kernel can use some its functions to manage memory such as `virt_to_phys()`, `virt_to_page()`, `__pa()`, ...

Example:

```c
static inline unsigned long virt_to_phys(volatile void *address)
{
    return __pa(address);
}

```

used to translate a virtual address to the physical address.

I am very confused about them. Please help to show me the relations between MMU's translation and kernel's translation and distinguish them?