Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARC: mm: Use virt_to_pfn() for addr >> PAGE_SHIFT pattern

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

+11 -17
+7 -12
arch/arc/include/asm/page.h
··· 10 10 11 11 #include <uapi/asm/page.h> 12 12 13 - 14 13 #ifndef __ASSEMBLY__ 15 14 16 15 #define get_user_page(vaddr) __get_free_page(GFP_KERNEL) ··· 75 76 76 77 typedef pte_t * pgtable_t; 77 78 78 - #define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT) 79 + #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) 79 80 80 - #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) 81 + #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_LINK_BASE) 82 + 83 + #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) 81 84 82 85 /* 83 86 * __pa, __va, virt_to_page (ALERT: deprecated, don't use them) 84 87 * 85 88 * These macros have historically been misnamed 86 89 * virt here means link-address/program-address as embedded in object code. 87 - * So if kernel img is linked at 0x8000_0000 onwards, 0x8010_0000 will be 88 - * 128th page, and virt_to_page( ) will return the struct page corresp to it. 89 - * mem_map[ ] is an array of struct page for each page frame in the system 90 - * 91 - * Independent of where linux is linked at, link-addr = physical address 92 - * So the old macro __pa = vaddr + PAGE_OFFSET - CONFIG_LINUX_LINK_BASE 93 - * would have been wrong in case kernel is not at 0x8zs 90 + * And for ARC, link-addr = physical address 94 91 */ 95 92 #define __pa(vaddr) ((unsigned long)vaddr) 96 93 #define __va(paddr) ((void *)((unsigned long)(paddr))) 97 94 98 95 #define virt_to_page(kaddr) \ 99 - (mem_map + ((__pa(kaddr) - CONFIG_LINUX_LINK_BASE) >> PAGE_SHIFT)) 96 + (mem_map + virt_to_pfn((kaddr) - CONFIG_LINUX_LINK_BASE)) 100 97 101 - #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) 98 + #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) 102 99 103 100 /* Default Permissions for stack/heaps pages (Non Executable) */ 104 101 #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE)
+4 -5
arch/arc/include/asm/pgtable.h
··· 278 278 #define pmd_present(x) (pmd_val(x)) 279 279 #define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0) 280 280 281 - #define pte_page(x) (mem_map + \ 282 - (unsigned long)(((pte_val(x) - CONFIG_LINUX_LINK_BASE) >> \ 283 - PAGE_SHIFT))) 281 + #define pte_page(pte) \ 282 + (mem_map + virt_to_pfn(pte_val(pte) - CONFIG_LINUX_LINK_BASE)) 284 283 285 284 #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) 286 - #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) 285 + #define pte_pfn(pte) virt_to_pfn(pte_val(pte)) 287 286 #define pfn_pte(pfn, prot) (__pte(((pte_t)(pfn) << PAGE_SHIFT) | \ 288 287 pgprot_val(prot))) 289 - #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) 288 + #define __pte_index(addr) (virt_to_pfn(addr) & (PTRS_PER_PTE - 1)) 290 289 291 290 /* 292 291 * pte_offset gets a @ptr to PMD entry (PGD in our 2-tier paging system)