• Dan Williams's avatar
    cxl/region: Manage CPU caches relative to DPA invalidation events · d18bc74a
    Dan Williams authored
    A "DPA invalidation event" is any scenario where the contents of a DPA
    (Device Physical Address) is modified in a way that is incoherent with
    CPU caches, or if the HPA (Host Physical Address) to DPA association
    changes due to a remapping event.
    
    PMEM security events like Unlock and Passphrase Secure Erase already
    manage caches through LIBNVDIMM, so that leaves HPA to DPA remap events
    that need cache management by the CXL core. Those only happen when the
    boot time CXL configuration has changed. That event occurs when
    userspace attaches an endpoint decoder to a region configuration, and
    that region is subsequently activated.
    
    The implications of not invalidating caches between remap events is that
    reads from the region at different points in time may return different
    results due to stale cached data from the previous HPA to DPA mapping.
    Without a guarantee that the region contents after cxl_region_probe()
    are written before being read (a layering-violation assumption that
    cxl_region_probe() can not make) the CXL subsystem needs to ensure that
    reads that precede writes see consistent results.
    
    A CONFIG_CXL_REGION_INVALIDATION_TEST option is added to support debug
    and unit testing of the CXL implementation in QEMU or other environments
    where cpu_cache_has_invalidate_memregion() returns false. This may prove
    too restrictive for QEMU where the HDM decoders are emulated, but in
    that case the CXL subsystem needs some new mechanism / indication that
    the HDM decoder is emulated and not a passthrough of real hardware.
    Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
    Link: https://lore.kernel.org/r/166993222098.1995348.16604163596374520890.stgit@dwillia2-xfh.jf.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    d18bc74a
Kconfig 4.86 KB