• D
    x86/memory_failure: Introduce {set, clear}_mce_nospec() · 284ce401
    Dan Williams 提交于
    Currently memory_failure() returns zero if the error was handled. On
    that result mce_unmap_kpfn() is called to zap the page out of the kernel
    linear mapping to prevent speculative fetches of potentially poisoned
    memory. However, in the case of dax mapped devmap pages the page may be
    in active permanent use by the device driver, so it cannot be unmapped
    from the kernel.
    
    Instead of marking the page not present, marking the page UC should
    be sufficient for preventing poison from being pre-fetched into the
    cache. Convert mce_unmap_pfn() to set_mce_nospec() remapping the page as
    UC, to hide it from speculative accesses.
    
    Given that that persistent memory errors can be cleared by the driver,
    include a facility to restore the page to cacheable operation,
    clear_mce_nospec().
    
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: <linux-edac@vger.kernel.org>
    Cc: <x86@kernel.org>
    Acked-by: NTony Luck <tony.luck@intel.com>
    Signed-off-by: NDan Williams <dan.j.williams@intel.com>
    Acked-by: NIngo Molnar <mingo@redhat.com>
    Signed-off-by: NDave Jiang <dave.jiang@intel.com>
    284ce401
mce.c 56.2 KB