• Toshi Kani's avatar
    x86, mm: support huge KVA mappings on x86 · 6b637835
    Toshi Kani authored
    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: default avatarToshi 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: default avatarFengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6b637835
ioremap.c 3.35 KB