On 03.05.22 14:54, Juergen Gross wrote: > 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. That attempt was not a complete success. Especially there are issues with my approach when "nopat" has been specified as boot parameter, as that would be just ignored. So right now I can't think of a better approach than the one of Jan's patch. Juergen