linux/arch
Toshi Kani 6b6378355b x86, mm: support huge KVA mappings on x86
Implement huge KVA mapping interfaces on x86.

On x86, MTRRs can override PAT memory types with a 4KB granularity.  When
using a huge page, MTRRs can override the memory type of the huge page,
which may lead a performance penalty.  The processor can also behave in an
undefined manner if a huge page is mapped to a memory range that MTRRs
have mapped with multiple different memory types.  Therefore, the mapping
code falls back to use a smaller page size toward 4KB when a mapping range
is covered by non-WB type of MTRRs.  The WB type of MTRRs has no affect on
the PAT memory types.

pud_set_huge() and pmd_set_huge() call mtrr_type_lookup() to see if a
given range is covered by MTRRs.  MTRR_TYPE_WRBACK indicates that the
range is either covered by WB or not covered and the MTRR default value is
set to WB.  0xFF indicates that MTRRs are disabled.

HAVE_ARCH_HUGE_VMAP is selected when X86_64 or X86_32 with X86_PAE is set.
 X86_32 without X86_PAE is not supported since such config can unlikey be
benefited from this feature, and there was an issue found in testing.

[fengguang.wu@intel.com: ioremap_pud_capable can be static]
Signed-off-by: Toshi Kani <toshi.kani@hp.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Robert Elliott <Elliott@hp.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-04-14 16:49:04 -07:00
..
alpha alpha: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
arc ARC: signal handling robustify 2015-03-26 11:19:36 +05:30
arm arm: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
arm64 arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
avr32 avr32: fix integer overflow in ELF_ET_DYN_BASE 2015-04-13 18:48:55 +02:00
blackfin Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2015-02-21 12:59:04 -08:00
c6x arch/c6x/include/asm/pgtable.h: define dummy pgprot_writecombine for !MMU 2015-03-12 18:46:08 -07:00
cris CRIS changes for 3.20 2015-02-15 18:02:02 -08:00
frv Merge branches 'pci/enumeration' and 'pci/virtualization' into next 2015-03-23 17:17:34 -05:00
hexagon all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
ia64 ia64: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
m32r mm: add missing __PAGETABLE_{PUD,PMD}_FOLDED defines 2015-02-28 09:57:51 -08:00
m68k m68k: mark PMD folded and expose number of page table levels 2015-04-14 16:49:02 -07:00
metag metag: Fix ioremap_wc/ioremap_cached build errors 2015-03-23 12:32:37 +00:00
microblaze Merge branches 'pci/enumeration' and 'pci/virtualization' into next 2015-03-23 17:17:34 -05:00
mips mips: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
mn10300 Merge branches 'pci/enumeration' and 'pci/virtualization' into next 2015-03-23 17:17:34 -05:00
nios2 nios2: fix cache coherency issue when debug with gdb 2015-04-10 11:10:08 +08:00
openrisc asm-generic: uaccess.h cleanup 2015-02-18 10:02:24 -08:00
parisc parisc: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
powerpc powerpc: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
s390 s390: expose number of page table levels 2015-04-14 16:49:02 -07:00
score all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
sh sh: expose number of page table levels 2015-04-14 16:49:02 -07:00
sparc sparc: clarify __GFP_NOFAIL allocation 2015-04-14 16:49:04 -07:00
tile tile: expose number of page table levels 2015-04-14 16:49:02 -07:00
um um: expose number of page table levels 2015-04-14 16:49:02 -07:00
unicore32 PCI: Assign resources before drivers claim devices (pci_scan_bus()) 2015-03-12 15:04:01 -05:00
x86 x86, mm: support huge KVA mappings on x86 2015-04-14 16:49:04 -07:00
xtensa PCI: Assign resources before drivers claim devices (pci_scan_root_bus()) 2015-03-19 10:17:13 -05:00
.gitignore
Kconfig lib/ioremap.c: add huge I/O map capability interfaces 2015-04-14 16:49:04 -07:00