1. 13 2月, 2009 1 次提交
  2. 12 2月, 2009 3 次提交
  3. 09 2月, 2009 2 次提交
    • I
      x86, pgtable.h: fix 2-level 32-bit build · c47c1b1f
      Ingo Molnar 提交于
      - pmd_flags() needs to be available on 2-levels too
      - provide pud_large() wrapper as well
      - include page.h - it provides basic types relied on by pgtable.h
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      c47c1b1f
    • I
      x86, pgtable.h: macro-ify *_page() methods · e5f7f202
      Ingo Molnar 提交于
      The p?d_page() methods still rely on highlevel types and methods:
      
      In file included from arch/x86/kernel/early_printk.c:18:
      /home/mingo/tip/arch/x86/include/asm/pgtable.h: In function ‘pmd_page’:
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: implicit declaration of function ‘__pfn_to_section’
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: initialization makes pointer from integer without a cast
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: implicit declaration of function ‘__section_mem_map_addr’
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: return makes pointer from integer without a cast
      
      So convert them to macros and document the type dependency.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      e5f7f202
  4. 07 2月, 2009 32 次提交
  5. 05 2月, 2009 1 次提交
    • J
      x86: don't apply __supported_pte_mask to non-present ptes · b534816b
      Jeremy Fitzhardinge 提交于
      On an x86 system which doesn't support global mappings,
      __supported_pte_mask has _PAGE_GLOBAL clear, to make sure it never
      appears in the PTE.  pfn_pte() and so on will enforce it with:
      
      static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
      {
      	return __pte((((phys_addr_t)page_nr << PAGE_SHIFT) |
      		      pgprot_val(pgprot)) & __supported_pte_mask);
      }
      
      However, we overload _PAGE_GLOBAL with _PAGE_PROTNONE on non-present
      ptes to distinguish them from swap entries.  However, applying
      __supported_pte_mask indiscriminately will clear the bit and corrupt the
      pte.
      
      I guess the best fix is to only apply __supported_pte_mask to present
      ptes.  This seems like the right solution to me, as it means we can
      completely ignore the issue of overlaps between the present pte bits and
      the non-present pte-as-swap entry use of the bits.
      
      __supported_pte_mask contains the set of flags we support on the
      current hardware.  We also use bits in the pte for things like
      logically present ptes with no permissions, and swap entries for
      swapped out pages.  We should only apply __supported_pte_mask to
      present ptes, because otherwise we may destroy other information being
      stored in the ptes.
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      Signed-off-by: NH. Peter Anvin <hpa@zytor.com>
      b534816b
  6. 23 1月, 2009 1 次提交