On 28.04.22 16:50, Jan Beulich wrote: > The latest with commit bdd8b6c98239 ("drm/i915: replace X86_FEATURE_PAT > with pat_enabled()") pat_enabled() returning false (because of PAT > initialization being suppressed in the absence of MTRRs being announced > to be available) 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 > performant 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). > > Signed-off-by: Jan Beulich I think this approach isn't the best way to tackle the issue. It can be solved rather easily by not deriving the supported caching modes via pat_enabled(), but by adding specific functions to query the needed caching mode from the PAT translation tables, and to use those functions instead of pat_enabled(). I'm preparing a patch for that purpose. Juergen