[Top] [All Lists]

[GIT PULL] x86/mm changes for v3.9-rc1

To: Linus Torvalds <>
Subject: [GIT PULL] x86/mm changes for v3.9-rc1
From: "H. Peter Anvin" <>
Date: Thu, 21 Feb 2013 16:34:06 -0800
Cc: "David S. Miller" <>, "H. Peter Anvin" <>, "Rafael J. Wysocki" <>, <>, Alexander Duyck <>, Andrea Arcangeli <>, Andrew Morton <>, Andrzej Pietrasiewicz <>, Arnd Bergmann <>, Borislav Petkov <>, Borislav Petkov <>, Christoph Lameter <>, Daniel J Blueman <>, Dave Hansen <>, Eric Biederman <>, "Eric W. Biederman" <>, Fenghua Yu <>, Frederic Weisbecker <>, Gleb Natapov <>, Gokul Caushik <>, "H. J. Lu" <>, "H. Peter Anvin" <>, "H. Peter Anvin" <>, Hugh Dickins <>, Ingo Molnar <>, Ingo Molnar <>, Jacob Shin <>, Jamie Lokier <>, Jarkko Sakkinen <>, Jeremy Fitzhardinge <>, Joe Millenbach <>, Joerg Roedel <>, Johannes Weiner <>, Josh Triplett <>, Konrad Rzeszutek Wilk <>, Kyungmin Park <>, Lee Schermerhorn <>, Len Brown <>, Linus Torvalds <>, Linux Kernel Mailing List <>, Marcelo Tosatti <>, Marek Szyprowski <>, Matt Fleming <>, Mel Gorman <>, Paul Turner <>, Pavel Machek <>, Pekka Enberg <>, Peter Zijlstra <>, "Rafael J. Wysocki" <>, Ralf Baechle <>, Rik van Riel <>, Rob Landley <>, Russell King <>, Rusty Russell <>, Shuah Khan <>, Shuah Khan <>, Stefano Stabellini <>, Steven Rostedt <>, Thomas Gleixner <>, Ville Syrjälä <>, Yasuaki Ishimatsu <>, Yinghai Lu <>, Zachary Amsden <>,,,,,,,,,
List-archive: <>
List-help: <>
List-id: linux-mips <>
List-owner: <>
List-post: <>
List-software: Ecartis version 1.0.0
List-subscribe: <>
List-unsubscribe: <>
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

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


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:// 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 
      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:// 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 
      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]

<Prev in Thread] Current Thread [Next in Thread>