• Kai Huang's avatar
    x86/cpu: Detect TDX partial write machine check erratum · 1e536e10
    Kai Huang authored
    TDX memory has integrity and confidentiality protections.  Violations of
    this integrity protection are supposed to only affect TDX operations and
    are never supposed to affect the host kernel itself.  In other words,
    the host kernel should never, itself, see machine checks induced by the
    TDX integrity hardware.
    
    Alas, the first few generations of TDX hardware have an erratum.  A
    partial write to a TDX private memory cacheline will silently "poison"
    the line.  Subsequent reads will consume the poison and generate a
    machine check.  According to the TDX hardware spec, neither of these
    things should have happened.
    
    Virtually all kernel memory accesses operations happen in full
    cachelines.  In practice, writing a "byte" of memory usually reads a 64
    byte cacheline of memory, modifies it, then writes the whole line back.
    Those operations do not trigger this problem.
    
    This problem is triggered by "partial" writes where a write transaction
    of less than cacheline lands at the memory controller.  The CPU does
    these via non-temporal write instructions (like MOVNTI), or through
    UC/WC memory mappings.  The issue can also be triggered away from the
    CPU by devices doing partial writes via DMA.
    
    With this erratum, there are additional things need to be done.  To
    prepare for those changes, add a CPU bug bit to indicate this erratum.
    Note this bug reflects the hardware thus it is detected regardless of
    whether the kernel is built with TDX support or not.
    Signed-off-by: default avatarKai Huang <kai.huang@intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Link: https://lore.kernel.org/all/20231208170740.53979-17-dave.hansen%40intel.com
    1e536e10
cpufeatures.h 32.7 KB