alistair23-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
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
c6x
cris
frv
hexagon
ia64 ia64: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
m32r
m68k m68k: mark PMD folded and expose number of page table levels 2015-04-14 16:49:02 -07:00
metag
microblaze
mips mips: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
mn10300
nios2 nios2: fix cache coherency issue when debug with gdb 2015-04-10 11:10:08 +08:00
openrisc
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
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
x86 x86, mm: support huge KVA mappings on x86 2015-04-14 16:49:04 -07:00
xtensa
.gitignore
Kconfig lib/ioremap.c: add huge I/O map capability interfaces 2015-04-14 16:49:04 -07:00