1 #ifndef _ASM_X86_PGTABLE_2LEVEL_H 2 #define _ASM_X86_PGTABLE_2LEVEL_H 3 4 #define pte_ERROR(e) \ 5 printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low) 6 #define pgd_ERROR(e) \ 7 printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) 8 9 /* 10 * Certain architectures need to do special things when PTEs 11 * within a page table are directly modified. Thus, the following 12 * hook is made available. 13 */ 14 static inline void native_set_pte(pte_t *ptep , pte_t pte) 15 { 16 *ptep = pte; 17 } 18 19 static inline void native_set_pmd(pmd_t *pmdp, pmd_t pmd) 20 { 21 *pmdp = pmd; 22 } 23 24 static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte) 25 { 26 native_set_pte(ptep, pte); 27 } 28 29 static inline void native_set_pte_present(struct mm_struct *mm, 30 unsigned long addr, 31 pte_t *ptep, pte_t pte) 32 { 33 native_set_pte(ptep, pte); 34 } 35 36 static inline void native_pmd_clear(pmd_t *pmdp) 37 { 38 native_set_pmd(pmdp, __pmd(0)); 39 } 40 41 static inline void native_pte_clear(struct mm_struct *mm, 42 unsigned long addr, pte_t *xp) 43 { 44 *xp = native_make_pte(0); 45 } 46 47 #ifdef CONFIG_SMP 48 static inline pte_t native_ptep_get_and_clear(pte_t *xp) 49 { 50 return __pte(xchg(&xp->pte_low, 0)); 51 } 52 #else 53 #define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp) 54 #endif 55 56 #define pte_none(x) (!(x).pte_low) 57 58 /* 59 * Bits 0, 6 and 7 are taken, split up the 29 bits of offset 60 * into this range: 61 */ 62 #define PTE_FILE_MAX_BITS 29 63 64 #define pte_to_pgoff(pte) \ 65 ((((pte).pte_low >> 1) & 0x1f) + (((pte).pte_low >> 8) << 5)) 66 67 #define pgoff_to_pte(off) \ 68 ((pte_t) { .pte_low = (((off) & 0x1f) << 1) + \ 69 (((off) >> 5) << 8) + _PAGE_FILE }) 70 71 /* Encode and de-code a swap entry */ 72 #define __swp_type(x) (((x).val >> 1) & 0x1f) 73 #define __swp_offset(x) ((x).val >> 8) 74 #define __swp_entry(type, offset) \ 75 ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) 76 #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) 77 #define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val }) 78 79 #endif /* _ASM_X86_PGTABLE_2LEVEL_H */ 80