Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
Linus Torvalds [Fri, 22 Feb 2013 02:06:55 +0000 (18:06 -0800)]
Pull x86 mm changes from Peter Anvin:
 "This is a huge set of several partly interrelated (and concurrently
  developed) changes, which is why the branch history is messier than
  one would like.

  The *really* big items are two humonguous patchsets mostly developed
  by Yinghai Lu at my request, which completely revamps the way we
  create initial page tables.  In particular, rather than estimating how
  much memory we will need for page tables and then build them into that
  memory -- a calculation that has shown to be incredibly fragile -- we
  now build them (on 64 bits) with the aid of a "pseudo-linear mode" --
  a #PF handler which creates temporary page tables on demand.

  This has several advantages:

  1. It makes it much easier to support things that need access to data
     very early (a followon patchset uses this to load microcode way
     early in the kernel startup).

  2. It allows the kernel and all the kernel data objects to be invoked
     from above the 4 GB limit.  This allows kdump to work on very large
     systems.

  3. It greatly reduces the difference between Xen and native (Xen's
     equivalent of the #PF handler are the temporary page tables created
     by the domain builder), eliminating a bunch of fragile hooks.

  The patch series also gets us a bit closer to W^X.

  Additional work in this pull is the 64-bit get_user() work which you
  were also involved with, and a bunch of cleanups/speedups to
  __phys_addr()/__pa()."

* 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (105 commits)
  x86, mm: Move reserving low memory later in initialization
  x86, doc: Clarify the use of asm("%edx") in uaccess.h
  x86, mm: Redesign get_user with a __builtin_choose_expr hack
  x86: Be consistent with data size in getuser.S
  x86, mm: Use a bitfield to mask nuisance get_user() warnings
  x86/kvm: Fix compile warning in kvm_register_steal_time()
  x86-32: Add support for 64bit get_user()
  x86-32, mm: Remove reference to alloc_remap()
  x86-32, mm: Remove reference to resume_map_numa_kva()
  x86-32, mm: Rip out x86_32 NUMA remapping code
  x86/numa: Use __pa_nodebug() instead
  x86: Don't panic if can not alloc buffer for swiotlb
  mm: Add alloc_bootmem_low_pages_nopanic()
  x86, 64bit, mm: hibernate use generic mapping_init
  x86, 64bit, mm: Mark data/bss/brk to nx
  x86: Merge early kernel reserve for 32bit and 64bit
  x86: Add Crash kernel low reservation
  x86, kdump: Remove crashkernel range find limit for 64bit
  memblock: Add memblock_mem_size()
  x86, boot: Not need to check setup_header version for setup_data
  ...

15 files changed:
1  2 
Documentation/kernel-parameters.txt
Documentation/x86/boot.txt
arch/sparc/mm/init_64.c
arch/x86/Kconfig
arch/x86/boot/compressed/head_64.S
arch/x86/include/asm/pgtable.h
arch/x86/include/asm/pgtable_64.h
arch/x86/include/asm/processor.h
arch/x86/include/asm/x86_init.h
arch/x86/kernel/cpu/amd.c
arch/x86/kernel/kvm.c
arch/x86/kernel/setup.c
arch/x86/kernel/x86_init.c
arch/x86/mm/init_64.c
arch/x86/platform/efi/efi.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -786,19 -784,20 +789,33 @@@ static inline void clone_pgd_range(pgd_
         memcpy(dst, src, count * sizeof(pgd_t));
  }
  
+ #define PTE_SHIFT ilog2(PTRS_PER_PTE)
+ static inline int page_level_shift(enum pg_level level)
+ {
+       return (PAGE_SHIFT - PTE_SHIFT) + level * PTE_SHIFT;
+ }
+ static inline unsigned long page_level_size(enum pg_level level)
+ {
+       return 1UL << page_level_shift(level);
+ }
+ static inline unsigned long page_level_mask(enum pg_level level)
+ {
+       return ~(page_level_size(level) - 1);
+ }
 +/*
 + * The x86 doesn't have any external MMU info: the kernel page
 + * tables contain all the necessary information.
 + */
 +static inline void update_mmu_cache(struct vm_area_struct *vma,
 +              unsigned long addr, pte_t *ptep)
 +{
 +}
 +static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
 +              unsigned long addr, pmd_t *pmd)
 +{
 +}
 +
  #include <asm-generic/pgtable.h>
  #endif        /* __ASSEMBLY__ */
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge