Hi Linus, 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(). ---------------------------------------------------------------- The following changes since commit 5dcd14ecd41ea2b3ae3295a9b30d98769d52165f: x86, boot: Sanitize boot_params if not zeroed on creation (2013-01-29 01:22:17 -0800) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-mm-for-linus for you to fetch changes up to 0da3e7f526fde7a6522a3038b7ce609fc50f6707: Merge branch 'x86/mm2' into x86/mm (2013-02-15 09:25:08 -0800) ---------------------------------------------------------------- Alexander Duyck (9): x86: Move some contents of page_64_types.h into pgtable_64.h and page_64.h x86: Improve __phys_addr performance by making use of carry flags and inlining x86: Make it so that __pa_symbol can only process kernel symbols on x86_64 x86: Drop 4 unnecessary calls to __pa_symbol x86: Use __pa_symbol instead of __pa on C visible symbols x86/ftrace: Use __pa_symbol instead of __pa on C visible symbols x86/acpi: Use __pa_symbol instead of __pa on C visible symbols x86/lguest: Use __pa_symbol instead of __pa on C visible symbols x86: Fix warning about cast from pointer to integer of different size Borislav Petkov (1): x86/numa: Use __pa_nodebug() instead Dave Hansen (6): x86, mm: Make DEBUG_VIRTUAL work earlier in boot x86, mm: Pagetable level size/shift/mask helpers x86, mm: Use new pagetable helpers in try_preserve_large_page() x86, mm: Create slow_virt_to_phys() x86, kvm: Fix kvm's use of __pa() on percpu areas x86-32, mm: Rip out x86_32 NUMA remapping code H. Peter Anvin (13): Merge branch 'x86/mm' of ssh://ra.kernel.org/.../tip/tip into x86/mm Merge tag 'v3.8-rc5' into x86/mm Merge remote-tracking branch 'origin/x86/boot' into x86/mm2 x86, 64bit: Use a #PF handler to materialize early mappings on demand x86-32, mm: Remove reference to resume_map_numa_kva() x86-32, mm: Remove reference to alloc_remap() Merge remote-tracking branch 'origin/x86/mm' into x86/mm2 x86, mm: Use a bitfield to mask nuisance get_user() warnings x86: Be consistent with data size in getuser.S x86, mm: Redesign get_user with a __builtin_choose_expr hack x86, doc: Clarify the use of asm("%edx") in uaccess.h x86, mm: Move reserving low memory later in initialization Merge branch 'x86/mm2' into x86/mm Ingo Molnar (1): x86/mm: Don't flush the TLB on #WP pmd fixups Jacob Shin (3): x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix x86, mm: Fixup code testing if a pfn is direct mapped x86, mm: Only direct map addresses that are marked as E820_RAM Shuah Khan (1): x86/kvm: Fix compile warning in kvm_register_steal_time() Stefano Stabellini (1): x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Ville Syrjälä (1): x86-32: Add support for 64bit get_user() Yinghai Lu (74): x86, mm: Add global page_size_mask and probe one time only x86, mm: Split out split_mem_range from init_memory_mapping x86, mm: Move down find_early_table_space() x86, mm: Move init_memory_mapping calling out of setup.c x86, mm: Revert back good_end setting for 64bit x86, mm: Change find_early_table_space() paramters x86, mm: Find early page table buffer together x86, mm: Separate out calculate_table_space_size() x86, mm: Set memblock initial limit to 1M x86, mm: use pfn_range_is_mapped() with CPA x86, mm: use pfn_range_is_mapped() with gart x86, mm: use pfn_range_is_mapped() with reserve_initrd x86, mm: relocate initrd under all mem for 64bit x86, mm: Align start address to correct big page size x86, mm: Use big page size for small memory range x86, mm: Don't clear page table if range is ram x86, mm: Break down init_all_memory_mapping x86, mm: setup page table in top-down x86, mm: Remove early_memremap workaround for page table accessing on 64bit x86, mm: Remove parameter in alloc_low_page for 64bit x86, mm: Merge alloc_low_page between 64bit and 32bit x86, mm: Move min_pfn_mapped back to mm/init.c x86, mm, Xen: Remove mapping_pagetable_reserve() x86, mm: Add alloc_low_pages(num) x86, mm: only call early_ioremap_page_table_range_init() once x86, mm: Move back pgt_buf_* to mm/init.c x86, mm: Move init_gbpages() out of setup.c x86, mm: change low/hignmem_pfn_init to static on 32bit x86, mm: Move function declaration into mm_internal.h x86, mm: Add check before clear pte above max_low_pfn on 32bit x86, mm: use round_up/down in split_mem_range() x86, mm: use PFN_DOWN in split_mem_range() x86, mm: use pfn instead of pos in split_mem_range x86, mm: use limit_pfn for end pfn x86, mm: Unifying after_bootmem for 32bit and 64bit x86, mm: Move after_bootmem to mm_internel.h x86, mm: Use clamp_t() in init_range_memory_mapping x86, mm: kill numa_free_all_bootmem() x86, mm: kill numa_64.h sparc, mm: Remove calling of free_all_bootmem_node() mm: Kill NO_BOOTMEM version free_all_bootmem_node() x86, mm: Let "memmap=" take more entries one time x86, mm: Fix page table early allocation offset checking x86: Factor out e820_add_kernel_range() x86, 64bit, mm: Make pgd next calculation consistent with pud/pmd x86, realmode: Set real_mode permissions early x86, 64bit, mm: Add generic kernel/ident mapping helper x86, 64bit: Copy struct boot_params early x86, 64bit, realmode: Use init_level4_pgt to set trampoline_pgd directly x86, realmode: Separate real_mode reserve and setup x86, 64bit: #PF handler set page to cover only 2M per #PF x86, 64bit: Don't set max_pfn_mapped wrong value early on native path x86: Merge early_reserve_initrd for 32bit and 64bit x86: Add get_ramdisk_image/size() x86, boot: Add get_cmd_line_ptr() x86, boot: Move checking of cmd_line_ptr out of common path x86, boot: Pass cmd_line_ptr with unsigned long instead x86, boot: Move verify_cpu.S and no_longmode down x86, boot: Move lldt/ltr out of 64bit code section x86, kexec: Remove 1024G limitation for kexec buffer on 64bit x86, kexec: Set ident mapping for kernel that is above max_pfn x86, kexec: Replace ident_mapping_init and init_level4_page x86, kexec, 64bit: Only set ident mapping for ram. x86, boot: Support loading bzImage, boot_params and ramdisk above 4G x86, boot: Update comments about entries for 64bit image x86, boot: Not need to check setup_header version for setup_data memblock: Add memblock_mem_size() x86, kdump: Remove crashkernel range find limit for 64bit x86: Add Crash kernel low reservation x86: Merge early kernel reserve for 32bit and 64bit x86, 64bit, mm: Mark data/bss/brk to nx x86, 64bit, mm: hibernate use generic mapping_init mm: Add alloc_bootmem_low_pages_nopanic() x86: Don't panic if can not alloc buffer for swiotlb Documentation/kernel-parameters.txt | 3 + Documentation/x86/boot.txt | 38 +++ arch/mips/cavium-octeon/dma-octeon.c | 3 +- arch/sparc/mm/init_64.c | 24 +- arch/x86/Kconfig | 4 - arch/x86/boot/boot.h | 18 +- arch/x86/boot/cmdline.c | 12 +- arch/x86/boot/compressed/cmdline.c | 12 +- arch/x86/boot/compressed/head_64.S | 48 ++-- arch/x86/boot/header.S | 10 +- arch/x86/include/asm/init.h | 28 +- arch/x86/include/asm/kexec.h | 6 +- arch/x86/include/asm/mmzone_32.h | 6 - arch/x86/include/asm/numa.h | 2 - arch/x86/include/asm/numa_64.h | 6 - arch/x86/include/asm/page.h | 7 +- arch/x86/include/asm/page_32.h | 1 + arch/x86/include/asm/page_64.h | 36 +++ arch/x86/include/asm/page_64_types.h | 22 -- arch/x86/include/asm/page_types.h | 2 + arch/x86/include/asm/pgtable.h | 16 ++ arch/x86/include/asm/pgtable_64.h | 5 + arch/x86/include/asm/pgtable_64_types.h | 4 + arch/x86/include/asm/pgtable_types.h | 4 +- arch/x86/include/asm/processor.h | 1 + arch/x86/include/asm/realmode.h | 3 +- arch/x86/include/asm/uaccess.h | 55 ++-- arch/x86/include/asm/x86_init.h | 12 - arch/x86/kernel/acpi/boot.c | 1 - arch/x86/kernel/acpi/sleep.c | 2 +- arch/x86/kernel/amd_gart_64.c | 5 +- arch/x86/kernel/apic/apic_numachip.c | 1 + arch/x86/kernel/cpu/amd.c | 9 +- arch/x86/kernel/cpu/intel.c | 3 +- arch/x86/kernel/e820.c | 16 +- arch/x86/kernel/ftrace.c | 4 +- arch/x86/kernel/head32.c | 20 -- arch/x86/kernel/head64.c | 131 ++++++--- arch/x86/kernel/head_64.S | 210 +++++++++------ arch/x86/kernel/i386_ksyms_32.c | 1 + arch/x86/kernel/kvm.c | 11 +- arch/x86/kernel/kvmclock.c | 4 +- arch/x86/kernel/machine_kexec_64.c | 171 ++++-------- arch/x86/kernel/setup.c | 260 +++++++++++------- arch/x86/kernel/traps.c | 9 + arch/x86/kernel/x8664_ksyms_64.c | 3 + arch/x86/kernel/x86_init.c | 4 - arch/x86/lguest/boot.c | 3 +- arch/x86/lib/getuser.S | 43 ++- arch/x86/mm/init.c | 459 +++++++++++++++++++++----------- arch/x86/mm/init_32.c | 106 +++++--- arch/x86/mm/init_64.c | 255 ++++++++++-------- arch/x86/mm/mm_internal.h | 19 ++ arch/x86/mm/numa.c | 32 +-- arch/x86/mm/numa_32.c | 161 ----------- arch/x86/mm/numa_64.c | 13 - arch/x86/mm/numa_internal.h | 6 - arch/x86/mm/pageattr.c | 66 +++-- arch/x86/mm/pat.c | 4 +- arch/x86/mm/pgtable.c | 7 +- arch/x86/mm/physaddr.c | 60 +++-- arch/x86/platform/efi/efi.c | 11 +- arch/x86/power/hibernate_32.c | 2 - arch/x86/power/hibernate_64.c | 66 ++--- arch/x86/realmode/init.c | 49 ++-- arch/x86/xen/mmu.c | 28 -- drivers/xen/swiotlb-xen.c | 4 +- include/linux/bootmem.h | 5 + include/linux/kexec.h | 3 + include/linux/memblock.h | 1 + include/linux/mm.h | 1 - include/linux/swiotlb.h | 2 +- kernel/kexec.c | 34 ++- lib/swiotlb.c | 47 ++-- mm/bootmem.c | 8 + mm/memblock.c | 17 ++ mm/nobootmem.c | 23 +- 77 files changed, 1541 insertions(+), 1247 deletions(-) [Skipping the full diff due to size]