• Kirill A. Shutemov's avatar
    x86/pat: Simplify the PAT programming protocol · ffc92cf3
    Kirill A. Shutemov authored
    The programming protocol for the PAT MSR follows the MTRR programming
    protocol. However, this protocol is cumbersome and requires disabling
    caching (CR0.CD=1), which is not possible on some platforms.
    
    Specifically, a TDX guest is not allowed to set CR0.CD. It triggers
    a #VE exception.
    
    It turns out that the requirement to follow the MTRR programming
    protocol for PAT programming is unnecessarily strict. The new Intel
    Software Developer Manual (http://www.intel.com/sdm) (December 2023)
    relaxes this requirement, please refer to the section titled
    "Programming the PAT" for more information.
    
    In short, this section provides an alternative PAT update sequence which
    doesn't need to disable caches around the PAT update but only to flush
    those caches and TLBs.
    
    The AMD documentation does not link PAT programming to MTRR and is there
    fore, fine too.
    
    The kernel only needs to flush the TLB after updating the PAT MSR. The
    set_memory code already takes care of flushing the TLB and cache when
    changing the memory type of a page.
    
      [ bp: Expand commit message. ]
    Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Link: https://lore.kernel.org/r/20240124130650.496056-1-kirill.shutemov@linux.intel.com
    ffc92cf3
cacheinfo.c 32.7 KB