• Toshi Kani's avatar
    x86/mm/pat: Add support of non-default PAT MSR setting · 02f037d6
    Toshi Kani authored
    In preparation for fixing a regression caused by:
    
      9cd25aac ("x86/mm/pat: Emulate PAT when it is disabled")'
    
    ... PAT needs to support a case that PAT MSR is initialized with a
    non-default value.
    
    When pat_init() is called and PAT is disabled, it initializes the
    PAT table with the BIOS default value. Xen, however, sets PAT MSR
    with a non-default value to enable WC. This causes inconsistency
    between the PAT table and PAT MSR when PAT is set to disable on Xen.
    
    Change pat_init() to handle the PAT disable cases properly.  Add
    init_cache_modes() to handle two cases when PAT is set to disable.
    
     1. CPU supports PAT: Set PAT table to be consistent with PAT MSR.
     2. CPU does not support PAT: Set PAT table to be consistent with
        PWT and PCD bits in a PTE.
    
    Note, __init_cache_modes(), renamed from pat_init_cache_modes(),
    will be changed to a static function in a later patch.
    Signed-off-by: default avatarToshi Kani <toshi.kani@hpe.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Luis R. Rodriguez <mcgrof@suse.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Toshi Kani <toshi.kani@hp.com>
    Cc: elliott@hpe.com
    Cc: konrad.wilk@oracle.com
    Cc: paul.gortmaker@windriver.com
    Cc: xen-devel@lists.xenproject.org
    Link: http://lkml.kernel.org/r/1458769323-24491-2-git-send-email-toshi.kani@hpe.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    02f037d6
pat.c 28.2 KB