diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0008-x86-mce-Check-for-alternate-indication-of-machine-ch.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.9.21/0008-x86-mce-Check-for-alternate-indication-of-machine-ch.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0008-x86-mce-Check-for-alternate-indication-of-machine-ch.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0008-x86-mce-Check-for-alternate-indication-of-machine-ch.patch new file mode 100644 index 00000000..d8206d02 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.9.21/0008-x86-mce-Check-for-alternate-indication-of-machine-ch.patch @@ -0,0 +1,60 @@ +From ed22188fb6b2b43b2af7b1f6714d3befb6fe7965 Mon Sep 17 00:00:00 2001 +From: Tony Luck <tony.luck@intel.com> +Date: Fri, 25 May 2018 14:42:09 -0700 +Subject: [PATCH 08/10] x86/mce: Check for alternate indication of machine + check recovery on Skylake + +commit 4c5717da1d021cf368eabb3cb1adcaead56c0d1e upstream. + +Currently we just check the "CAPID0" register to see whether the CPU +can recover from machine checks. + +But there are also some special SKUs which do not have all advanced +RAS features, but do enable machine check recovery for use with NVDIMMs. + +Add a check for any of bits {8:5} in the "CAPID5" register (each +reports some NVDIMM mode available, if any of them are set, then +the system supports memory machine check recovery). + +Signed-off-by: Tony Luck <tony.luck@intel.com> +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Cc: Qiuxu Zhuo <qiuxu.zhuo@intel.com> +Cc: Ashok Raj <ashok.raj@intel.com> +Cc: stable@vger.kernel.org # 4.9 +Cc: Dan Williams <dan.j.williams@intel.com> +Cc: Borislav Petkov <bp@suse.de> +Link: https://lkml.kernel.org/r/03cbed6e99ddafb51c2eadf9a3b7c8d7a0cc204e.1527283897.git.tony.luck@intel.com +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +--- + arch/x86/kernel/quirks.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c +index 0bee04d..b57100a 100644 +--- a/arch/x86/kernel/quirks.c ++++ b/arch/x86/kernel/quirks.c +@@ -643,12 +643,19 @@ static void quirk_intel_brickland_xeon_ras_cap(struct pci_dev *pdev) + /* Skylake */ + static void quirk_intel_purley_xeon_ras_cap(struct pci_dev *pdev) + { +- u32 capid0; ++ u32 capid0, capid5; + + pci_read_config_dword(pdev, 0x84, &capid0); ++ pci_read_config_dword(pdev, 0x98, &capid5); + +- if ((capid0 & 0xc0) == 0xc0) ++ /* ++ * CAPID0{7:6} indicate whether this is an advanced RAS SKU ++ * CAPID5{8:5} indicate that various NVDIMM usage modes are ++ * enabled, so memory machine check recovery is also enabled. ++ */ ++ if ((capid0 & 0xc0) == 0xc0 || (capid5 & 0x1e0)) + static_branch_inc(&mcsafe_key); ++ + } + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x0ec3, quirk_intel_brickland_xeon_ras_cap); + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, quirk_intel_brickland_xeon_ras_cap); +-- +2.7.4 + |