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

[PATCH] x86_64: Don't apply __PHYSICAL_MASK to page frame numbers

It is for physical addresses, not for PFNs.

Pointed out by Tejun Heo.

Cc: htejun@gmail.com

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Andi Kleen and committed by
Linus Torvalds
6b75aeed f6c2e333

+3 -3
+1 -1
include/asm-x86_64/page.h
··· 11 11 #define PAGE_SIZE (1UL << PAGE_SHIFT) 12 12 #endif 13 13 #define PAGE_MASK (~(PAGE_SIZE-1)) 14 - #define PHYSICAL_PAGE_MASK (~(PAGE_SIZE-1) & (__PHYSICAL_MASK << PAGE_SHIFT)) 14 + #define PHYSICAL_PAGE_MASK (~(PAGE_SIZE-1) & __PHYSICAL_MASK) 15 15 16 16 #define THREAD_ORDER 1 17 17 #ifdef __ASSEMBLY__
+2 -2
include/asm-x86_64/pgtable.h
··· 246 246 #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) /* FIXME: is this 247 247 right? */ 248 248 #define pte_page(x) pfn_to_page(pte_pfn(x)) 249 - #define pte_pfn(x) ((pte_val(x) >> PAGE_SHIFT) & __PHYSICAL_MASK) 249 + #define pte_pfn(x) ((pte_val(x) & __PHYSICAL_MASK) >> PAGE_SHIFT) 250 250 251 251 static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) 252 252 { ··· 353 353 #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) 354 354 #define pmd_bad(x) ((pmd_val(x) & (~PTE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE ) 355 355 #define pfn_pmd(nr,prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val(prot))) 356 - #define pmd_pfn(x) ((pmd_val(x) >> PAGE_SHIFT) & __PHYSICAL_MASK) 356 + #define pmd_pfn(x) ((pmd_val(x) & __PHYSICAL_MASK) >> PAGE_SHIFT) 357 357 358 358 #define pte_to_pgoff(pte) ((pte_val(pte) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT) 359 359 #define pgoff_to_pte(off) ((pte_t) { ((off) << PAGE_SHIFT) | _PAGE_FILE })