···10101111#include <uapi/asm/page.h>12121313-1413#ifndef __ASSEMBLY__15141615#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)···75767677typedef pte_t * pgtable_t;77787878-#define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT)7979+#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)79808080-#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)8181+#define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_LINK_BASE)8282+8383+#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)81848285/*8386 * __pa, __va, virt_to_page (ALERT: deprecated, don't use them)8487 *8588 * These macros have historically been misnamed8689 * virt here means link-address/program-address as embedded in object code.8787- * So if kernel img is linked at 0x8000_0000 onwards, 0x8010_0000 will be8888- * 128th page, and virt_to_page( ) will return the struct page corresp to it.8989- * mem_map[ ] is an array of struct page for each page frame in the system9090- *9191- * Independent of where linux is linked at, link-addr = physical address9292- * So the old macro __pa = vaddr + PAGE_OFFSET - CONFIG_LINUX_LINK_BASE9393- * would have been wrong in case kernel is not at 0x8zs9090+ * And for ARC, link-addr = physical address9491 */9592#define __pa(vaddr) ((unsigned long)vaddr)9693#define __va(paddr) ((void *)((unsigned long)(paddr)))97949895#define virt_to_page(kaddr) \9999- (mem_map + ((__pa(kaddr) - CONFIG_LINUX_LINK_BASE) >> PAGE_SHIFT))9696+ (mem_map + virt_to_pfn((kaddr) - CONFIG_LINUX_LINK_BASE))10097101101-#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)9898+#define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr))10299103100/* Default Permissions for stack/heaps pages (Non Executable) */104101#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE)