home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / x86 / include / asm / pgtable-2level.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.0 KB  |  80 lines

  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.