• Tony Luck's avatar
    x86/sgx: Add infrastructure to identify SGX EPC pages · 40e0e784
    Tony Luck authored
    X86 machine check architecture reports a physical address when there
    is a memory error. Handling that error requires a method to determine
    whether the physical address reported is in any of the areas reserved
    for EPC pages by BIOS.
    
    SGX EPC pages do not have Linux "struct page" associated with them.
    
    Keep track of the mapping from ranges of EPC pages to the sections
    that contain them using an xarray. N.B. adds CONFIG_XARRAY_MULTI to
    the SGX dependecies. So "select" that in arch/x86/Kconfig for X86/SGX.
    
    Create a function arch_is_platform_page() that simply reports whether an
    address is an EPC page for use elsewhere in the kernel. The ACPI error
    injection code needs this function and is typically built as a module,
    so export it.
    
    Note that arch_is_platform_page() will be slower than other similar
    "what type is this page" functions that can simply check bits in the
    "struct page".  If there is some future performance critical user of
    this function it may need to be implemented in a more efficient way.
    
    Note also that the current implementation of xarray allocates a few
    hundred kilobytes for this usage on a system with 4GB of SGX EPC memory
    configured. This isn't ideal, but worth it for the code simplicity.
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Tested-by: default avatarReinette Chatre <reinette.chatre@intel.com>
    Link: https://lkml.kernel.org/r/20211026220050.697075-3-tony.luck@intel.com
    40e0e784
Kconfig 93.1 KB