• Jan Beulich's avatar
    x86/PAT: Have pat_enabled() properly reflect state when running on Xen · 72cbc8f0
    Jan Beulich authored
    After commit ID in the Fixes: tag, pat_enabled() returns false (because
    of PAT initialization being suppressed in the absence of MTRRs being
    announced to be available).
    
    This has become a problem: the i915 driver now fails to initialize when
    running PV on Xen (i915_gem_object_pin_map() is where I located the
    induced failure), and its error handling is flaky enough to (at least
    sometimes) result in a hung system.
    
    Yet even beyond that problem the keying of the use of WC mappings to
    pat_enabled() (see arch_can_pci_mmap_wc()) means that in particular
    graphics frame buffer accesses would have been quite a bit less optimal
    than possible.
    
    Arrange for the function to return true in such environments, without
    undermining the rest of PAT MSR management logic considering PAT to be
    disabled: specifically, no writes to the PAT MSR should occur.
    
    For the new boolean to live in .init.data, init_cache_modes() also needs
    moving to .init.text (where it could/should have lived already before).
    
      [ bp: This is the "small fix" variant for stable. It'll get replaced
        with a proper PAT and MTRR detection split upstream but that is too
        involved for a stable backport.
        - additional touchups to commit msg. Use cpu_feature_enabled(). ]
    
    Fixes: bdd8b6c9 ("drm/i915: replace X86_FEATURE_PAT with pat_enabled()")
    Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: <stable@vger.kernel.org>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Lucas De Marchi <lucas.demarchi@intel.com>
    Link: https://lore.kernel.org/r/9385fa60-fa5d-f559-a137-6608408f88b0@suse.com
    72cbc8f0
memtype.c 31.7 KB