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

[PATCH] hugetlb: add pte_huge() macro

This patch adds a macro pte_huge(pte) for i386/x86_64 which is needed by a
patch later in the series. Instead of repeating (_PAGE_PRESENT |
_PAGE_PSE), I've added __LARGE_PTE to i386 to match x86_64.

Signed-off-by: Adam Litke <agl@us.ibm.com>
Cc: <linux-mm@kvack.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Adam Litke and committed by
Linus Torvalds
32e51a8c fd195c49

+5 -2
+3 -1
include/asm-i386/pgtable.h
··· 215 215 * The following only work if pte_present() is true. 216 216 * Undefined behaviour if not.. 217 217 */ 218 + #define __LARGE_PTE (_PAGE_PSE | _PAGE_PRESENT) 218 219 static inline int pte_user(pte_t pte) { return (pte).pte_low & _PAGE_USER; } 219 220 static inline int pte_read(pte_t pte) { return (pte).pte_low & _PAGE_USER; } 220 221 static inline int pte_dirty(pte_t pte) { return (pte).pte_low & _PAGE_DIRTY; } 221 222 static inline int pte_young(pte_t pte) { return (pte).pte_low & _PAGE_ACCESSED; } 222 223 static inline int pte_write(pte_t pte) { return (pte).pte_low & _PAGE_RW; } 224 + static inline int pte_huge(pte_t pte) { return ((pte).pte_low & __LARGE_PTE) == __LARGE_PTE; } 223 225 224 226 /* 225 227 * The following only works if pte_present() is not true. ··· 238 236 static inline pte_t pte_mkdirty(pte_t pte) { (pte).pte_low |= _PAGE_DIRTY; return pte; } 239 237 static inline pte_t pte_mkyoung(pte_t pte) { (pte).pte_low |= _PAGE_ACCESSED; return pte; } 240 238 static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte_low |= _PAGE_RW; return pte; } 241 - static inline pte_t pte_mkhuge(pte_t pte) { (pte).pte_low |= _PAGE_PRESENT | _PAGE_PSE; return pte; } 239 + static inline pte_t pte_mkhuge(pte_t pte) { (pte).pte_low |= __LARGE_PTE; return pte; } 242 240 243 241 #ifdef CONFIG_X86_PAE 244 242 # include <asm/pgtable-3level.h>
+2 -1
include/asm-x86_64/pgtable.h
··· 247 247 * The following only work if pte_present() is true. 248 248 * Undefined behaviour if not.. 249 249 */ 250 + #define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT) 250 251 static inline int pte_user(pte_t pte) { return pte_val(pte) & _PAGE_USER; } 251 252 extern inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } 252 253 extern inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_USER; } ··· 255 254 extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } 256 255 extern inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } 257 256 static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } 257 + static inline int pte_huge(pte_t pte) { return (pte_val(pte) & __LARGE_PTE) == __LARGE_PTE; } 258 258 259 - #define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT) 260 259 extern inline pte_t pte_rdprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_USER)); return pte; } 261 260 extern inline pte_t pte_exprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_USER)); return pte; } 262 261 extern inline pte_t pte_mkclean(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY)); return pte; }