* An EDAC driver for Cavium ThunderX RAS IP (Sergey Temerkhanov)

* Removal of DRAM error reporting through PCI SERR NMI (Borislav Petkov)
 
 * Misc small fixes (Jan Glauber, Thor Thayer)
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAlkGtO0ACgkQEsHwGGHe
 VUoXfA/+JLgcHpI04KcvJtTMpNWE3p04xLdzw7hvgvWPLg+JDHF1jXxA4HRy7usI
 BAsEZIcpyk/9tzYjKm4zc/8nhlrjx/ic9cU+hZa8zCy/47uArX9HlrsxAUpgVxcx
 YmWzZ2gyo9Jsi/44wZwnp4dNWibvyG5ECrgis7AFOihT1qyi74YajNfqJWWUbG/H
 W3DkCVs2JVzelue3rI9J8f9MSZk5sL3C9vfFWxk6ifiqr+rlUphoSNFdF+mRnBdr
 dvk555G4Xmmz97ZiBAOM12M1trn+4lCkyfuQuMw0cZYt7F/nS7ZdLqAKK8H1KIoE
 mGl29p85svZRhIM25Cd759LSharAetqpNyxicjAwONwLcKiXVf2UuR5NohVj3y1f
 Dbrh4zRx0OVJctaAKzLEHhW3Re/VA6lU8JUuvjBytKV5fr64jBpqSXFDL8J4y7p2
 RJnKNbPkoXB75LukNqxDgpL+YEnJjzlslqxLqgPVgHFtrsUjpNHAJ9rKDeJQoW3b
 wC2wVBZmwx+4ShyHjJePJC7C6a/gDktbDos2/XW11DHa4w8ZbZ2Q4ep9oYegBKcd
 szliytm0LWlUTUDVNoc9DW/ka0NAh43kjvCqcmUcfC+4lhMO28eajvj35PP7fcic
 hmCAQnJz6M8t1VgxO7xvWi4jAwhvbzXM5IV1O3tIDMYHJQhrLBw=
 =vGf1
 -----END PGP SIGNATURE-----

Merge tag 'edac_for_4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp

Pull EDAC updates from Borislav Petkov:

 - an EDAC driver for Cavium ThunderX RAS IP (Sergey Temerkhanov)

 - removal of DRAM error reporting through PCI SERR NMI (Borislav
   Petkov)

 - misc small fixes (Jan Glauber, Thor Thayer)

* tag 'edac_for_4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
  EDAC, ghes: Do not enable it by default
  EDAC: Rename report status accessors
  EDAC: Delete edac_stub.c
  EDAC: Update Kconfig help text
  EDAC: Remove EDAC_MM_EDAC
  EDAC: Issue tracepoint only when it is defined
  ACPI/extlog: Add EDAC dependency
  EDAC: Move edac_op_state to edac_mc.c
  EDAC: Remove edac_err_assert
  EDAC: Get rid of edac_handlers
  x86/nmi, EDAC: Get rid of DRAM error reporting thru PCI SERR NMI
  EDAC, highbank: Align Makefile directives
  EDAC, thunderx: Remove unused code
  EDAC, thunderx: Change LMC index calculation
  EDAC, altera: Fix peripheral warnings for Cyclone5
  EDAC, thunderx: Fix L2C MCI interrupt disable
  EDAC, thunderx: Add Cavium ThunderX EDAC driver
This commit is contained in:
Linus Torvalds 2017-05-01 11:36:00 -07:00
commit 89d1cf89c8
26 changed files with 2343 additions and 236 deletions

View file

@ -4715,6 +4715,7 @@ L: linux-edac@vger.kernel.org
L: linux-mips@linux-mips.org L: linux-mips@linux-mips.org
S: Supported S: Supported
F: drivers/edac/octeon_edac* F: drivers/edac/octeon_edac*
F: drivers/edac/thunderx_edac*
EDAC-E752X EDAC-E752X
M: Mark Gross <mark.gross@intel.com> M: Mark Gross <mark.gross@intel.com>

View file

@ -748,7 +748,6 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
CONFIG_LEDS_TRIGGER_TRANSIENT=y CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_LEDS_TRIGGER_CAMERA=y CONFIG_LEDS_TRIGGER_CAMERA=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_HIGHBANK_MC=y CONFIG_EDAC_HIGHBANK_MC=y
CONFIG_EDAC_HIGHBANK_L2=y CONFIG_EDAC_HIGHBANK_L2=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y

View file

@ -635,8 +635,7 @@ CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LEDS_TRIGGER_CAMERA=m CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_EDAC=y CONFIG_EDAC=m
CONFIG_EDAC_MM_EDAC=m
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DEBUG=y CONFIG_RTC_DEBUG=y
CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1307=m

View file

@ -16,9 +16,8 @@ CONFIG_DAVICOM_PHY=y
CONFIG_DMADEVICES=y CONFIG_DMADEVICES=y
CONFIG_E1000E=y CONFIG_E1000E=y
CONFIG_E1000=y CONFIG_E1000=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_MPC85XX=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MPC85XX=y
CONFIG_EEPROM_AT24=y CONFIG_EEPROM_AT24=y
CONFIG_EEPROM_LEGACY=y CONFIG_EEPROM_LEGACY=y
CONFIG_FB_FSL_DIU=y CONFIG_FB_FSL_DIU=y

View file

@ -155,7 +155,6 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_MPC85XX=y CONFIG_EDAC_MPC85XX=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
# CONFIG_RTC_INTF_PROC is not set # CONFIG_RTC_INTF_PROC is not set

View file

@ -116,7 +116,6 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_CMOS=y CONFIG_RTC_DRV_CMOS=y

View file

@ -179,7 +179,6 @@ CONFIG_INFINIBAND_MTHCA=m
CONFIG_INFINIBAND_IPOIB=m CONFIG_INFINIBAND_IPOIB=m
CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_CELL=y CONFIG_EDAC_CELL=y
CONFIG_UIO=m CONFIG_UIO=m
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y

View file

@ -142,7 +142,6 @@ CONFIG_USB_UHCI_HCD=y
CONFIG_USB_SL811_HCD=y CONFIG_USB_SL811_HCD=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_PASEMI=y CONFIG_EDAC_PASEMI=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y

View file

@ -262,7 +262,6 @@ CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_SRP=m CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_ISER=m CONFIG_INFINIBAND_ISER=m
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_PASEMI=y CONFIG_EDAC_PASEMI=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y

View file

@ -173,7 +173,6 @@ CONFIG_INFINIBAND_MTHCA=m
CONFIG_INFINIBAND_IPOIB=m CONFIG_INFINIBAND_IPOIB=m
CONFIG_INFINIBAND_ISER=m CONFIG_INFINIBAND_ISER=m
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_FS_DAX=y CONFIG_FS_DAX=y

View file

@ -988,8 +988,7 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
CONFIG_ACCESSIBILITY=y CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y CONFIG_A11Y_BRAILLE_CONSOLE=y
CONFIG_EDAC=y CONFIG_EDAC=m
CONFIG_EDAC_MM_EDAC=m
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set # CONFIG_RTC_HCTOSYS is not set
CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1307=m

View file

@ -249,7 +249,6 @@ CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_TILE=y CONFIG_RTC_DRV_TILE=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y

View file

@ -358,7 +358,6 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# CONFIG_VGA_ARB is not set # CONFIG_VGA_ARB is not set
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_TILE=y CONFIG_RTC_DRV_TILE=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y

View file

@ -222,17 +222,6 @@ pci_serr_error(unsigned char reason, struct pt_regs *regs)
pr_emerg("NMI: PCI system error (SERR) for reason %02x on CPU %d.\n", pr_emerg("NMI: PCI system error (SERR) for reason %02x on CPU %d.\n",
reason, smp_processor_id()); reason, smp_processor_id());
/*
* On some machines, PCI SERR line is used to report memory
* errors. EDAC makes use of it.
*/
#if defined(CONFIG_EDAC)
if (edac_handler_set()) {
edac_atomic_assert_error();
return;
}
#endif
if (panic_on_unrecovered_nmi) if (panic_on_unrecovered_nmi)
nmi_panic(regs, "NMI: Not continuing"); nmi_panic(regs, "NMI: Not continuing");

View file

@ -469,9 +469,8 @@ config ACPI_WATCHDOG
config ACPI_EXTLOG config ACPI_EXTLOG
tristate "Extended Error Log support" tristate "Extended Error Log support"
depends on X86_MCE && X86_LOCAL_APIC depends on X86_MCE && X86_LOCAL_APIC && EDAC
select UEFI_CPER select UEFI_CPER
select RAS
default n default n
help help
Certain usages such as Predictive Failure Analysis (PFA) require Certain usages such as Predictive Failure Analysis (PFA) require

View file

@ -229,7 +229,7 @@ static int __init extlog_init(void)
if (!(cap & MCG_ELOG_P) || !extlog_get_l1addr()) if (!(cap & MCG_ELOG_P) || !extlog_get_l1addr())
return -ENODEV; return -ENODEV;
if (get_edac_report_status() == EDAC_REPORTING_FORCE) { if (edac_get_report_status() == EDAC_REPORTING_FORCE) {
pr_warn("Not loading eMCA, error reporting force-enabled through EDAC.\n"); pr_warn("Not loading eMCA, error reporting force-enabled through EDAC.\n");
return -EPERM; return -EPERM;
} }
@ -285,8 +285,8 @@ static int __init extlog_init(void)
* eMCA event report method has higher priority than EDAC method, * eMCA event report method has higher priority than EDAC method,
* unless EDAC event report method is mandatory. * unless EDAC event report method is mandatory.
*/ */
old_edac_report_status = get_edac_report_status(); old_edac_report_status = edac_get_report_status();
set_edac_report_status(EDAC_REPORTING_DISABLED); edac_set_report_status(EDAC_REPORTING_DISABLED);
mce_register_decode_chain(&extlog_mce_dec); mce_register_decode_chain(&extlog_mce_dec);
/* enable OS to be involved to take over management from BIOS */ /* enable OS to be involved to take over management from BIOS */
((struct extlog_l1_head *)extlog_l1_addr)->flags |= FLAG_OS_OPTIN; ((struct extlog_l1_head *)extlog_l1_addr)->flags |= FLAG_OS_OPTIN;
@ -308,7 +308,7 @@ static int __init extlog_init(void)
static void __exit extlog_exit(void) static void __exit extlog_exit(void)
{ {
set_edac_report_status(old_edac_report_status); edac_set_report_status(old_edac_report_status);
mce_unregister_decode_chain(&extlog_mce_dec); mce_unregister_decode_chain(&extlog_mce_dec);
((struct extlog_l1_head *)extlog_l1_addr)->flags &= ~FLAG_OS_OPTIN; ((struct extlog_l1_head *)extlog_l1_addr)->flags &= ~FLAG_OS_OPTIN;
if (extlog_l1_addr) if (extlog_l1_addr)

View file

@ -10,26 +10,16 @@ config EDAC_SUPPORT
bool bool
menuconfig EDAC menuconfig EDAC
bool "EDAC (Error Detection And Correction) reporting" tristate "EDAC (Error Detection And Correction) reporting"
depends on HAS_IOMEM && EDAC_SUPPORT depends on HAS_IOMEM && EDAC_SUPPORT && RAS
help help
EDAC is designed to report errors in the core system. EDAC is a subsystem along with hardware-specific drivers designed to
These are low-level errors that are reported in the CPU or report hardware errors. These are low-level errors that are reported
supporting chipset or other subsystems: in the CPU or supporting chipset or other subsystems:
memory errors, cache errors, PCI errors, thermal throttling, etc.. memory errors, cache errors, PCI errors, thermal throttling, etc..
If unsure, select 'Y'. If unsure, select 'Y'.
If this code is reporting problems on your system, please The mailing list for the EDAC project is linux-edac@vger.kernel.org.
see the EDAC project web pages for more information at:
<http://bluesmoke.sourceforge.net/>
and:
<http://buttersideup.com/edacwiki>
There is also a mailing list for the EDAC project, which can
be found via the sourceforge page.
if EDAC if EDAC
@ -62,21 +52,9 @@ config EDAC_DECODE_MCE
which occur really early upon boot, before the module infrastructure which occur really early upon boot, before the module infrastructure
has been initialized. has been initialized.
config EDAC_MM_EDAC
tristate "Main Memory EDAC (Error Detection And Correction) reporting"
select RAS
help
Some systems are able to detect and correct errors in main
memory. EDAC can report statistics on memory error
detection and correction (EDAC - or commonly referred to ECC
errors). EDAC will also try to decode where these errors
occurred so that a particular failing memory module can be
replaced. If unsure, select 'Y'.
config EDAC_GHES config EDAC_GHES
bool "Output ACPI APEI/GHES BIOS detected errors via EDAC" bool "Output ACPI APEI/GHES BIOS detected errors via EDAC"
depends on ACPI_APEI_GHES && (EDAC_MM_EDAC=y) depends on ACPI_APEI_GHES && (EDAC=y)
default y
help help
Not all machines support hardware-driven error report. Some of those Not all machines support hardware-driven error report. Some of those
provide a BIOS-driven error report mechanism via ACPI, using the provide a BIOS-driven error report mechanism via ACPI, using the
@ -98,7 +76,7 @@ config EDAC_GHES
config EDAC_AMD64 config EDAC_AMD64
tristate "AMD64 (Opteron, Athlon64)" tristate "AMD64 (Opteron, Athlon64)"
depends on EDAC_MM_EDAC && AMD_NB && EDAC_DECODE_MCE depends on AMD_NB && EDAC_DECODE_MCE
help help
Support for error detection and correction of DRAM ECC errors on Support for error detection and correction of DRAM ECC errors on
the AMD64 families (>= K8) of memory controllers. the AMD64 families (>= K8) of memory controllers.
@ -124,28 +102,28 @@ config EDAC_AMD64_ERROR_INJECTION
config EDAC_AMD76X config EDAC_AMD76X
tristate "AMD 76x (760, 762, 768)" tristate "AMD 76x (760, 762, 768)"
depends on EDAC_MM_EDAC && PCI && X86_32 depends on PCI && X86_32
help help
Support for error detection and correction on the AMD 76x Support for error detection and correction on the AMD 76x
series of chipsets used with the Athlon processor. series of chipsets used with the Athlon processor.
config EDAC_E7XXX config EDAC_E7XXX
tristate "Intel e7xxx (e7205, e7500, e7501, e7505)" tristate "Intel e7xxx (e7205, e7500, e7501, e7505)"
depends on EDAC_MM_EDAC && PCI && X86_32 depends on PCI && X86_32
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
E7205, E7500, E7501 and E7505 server chipsets. E7205, E7500, E7501 and E7505 server chipsets.
config EDAC_E752X config EDAC_E752X
tristate "Intel e752x (e7520, e7525, e7320) and 3100" tristate "Intel e752x (e7520, e7525, e7320) and 3100"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
E7520, E7525, E7320 server chipsets. E7520, E7525, E7320 server chipsets.
config EDAC_I82443BXGX config EDAC_I82443BXGX
tristate "Intel 82443BX/GX (440BX/GX)" tristate "Intel 82443BX/GX (440BX/GX)"
depends on EDAC_MM_EDAC && PCI && X86_32 depends on PCI && X86_32
depends on BROKEN depends on BROKEN
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
@ -153,56 +131,56 @@ config EDAC_I82443BXGX
config EDAC_I82875P config EDAC_I82875P
tristate "Intel 82875p (D82875P, E7210)" tristate "Intel 82875p (D82875P, E7210)"
depends on EDAC_MM_EDAC && PCI && X86_32 depends on PCI && X86_32
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
DP82785P and E7210 server chipsets. DP82785P and E7210 server chipsets.
config EDAC_I82975X config EDAC_I82975X
tristate "Intel 82975x (D82975x)" tristate "Intel 82975x (D82975x)"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
DP82975x server chipsets. DP82975x server chipsets.
config EDAC_I3000 config EDAC_I3000
tristate "Intel 3000/3010" tristate "Intel 3000/3010"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
3000 and 3010 server chipsets. 3000 and 3010 server chipsets.
config EDAC_I3200 config EDAC_I3200
tristate "Intel 3200" tristate "Intel 3200"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
3200 and 3210 server chipsets. 3200 and 3210 server chipsets.
config EDAC_IE31200 config EDAC_IE31200
tristate "Intel e312xx" tristate "Intel e312xx"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
E3-1200 based DRAM controllers. E3-1200 based DRAM controllers.
config EDAC_X38 config EDAC_X38
tristate "Intel X38" tristate "Intel X38"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
X38 server chipsets. X38 server chipsets.
config EDAC_I5400 config EDAC_I5400
tristate "Intel 5400 (Seaburg) chipsets" tristate "Intel 5400 (Seaburg) chipsets"
depends on EDAC_MM_EDAC && PCI && X86 depends on PCI && X86
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
i5400 MCH chipset (Seaburg). i5400 MCH chipset (Seaburg).
config EDAC_I7CORE config EDAC_I7CORE
tristate "Intel i7 Core (Nehalem) processors" tristate "Intel i7 Core (Nehalem) processors"
depends on EDAC_MM_EDAC && PCI && X86 && X86_MCE_INTEL depends on PCI && X86 && X86_MCE_INTEL
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
i7 Core (Nehalem) Integrated Memory Controller that exists on i7 Core (Nehalem) Integrated Memory Controller that exists on
@ -211,58 +189,56 @@ config EDAC_I7CORE
config EDAC_I82860 config EDAC_I82860
tristate "Intel 82860" tristate "Intel 82860"
depends on EDAC_MM_EDAC && PCI && X86_32 depends on PCI && X86_32
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
82860 chipset. 82860 chipset.
config EDAC_R82600 config EDAC_R82600
tristate "Radisys 82600 embedded chipset" tristate "Radisys 82600 embedded chipset"
depends on EDAC_MM_EDAC && PCI && X86_32 depends on PCI && X86_32
help help
Support for error detection and correction on the Radisys Support for error detection and correction on the Radisys
82600 embedded chipset. 82600 embedded chipset.
config EDAC_I5000 config EDAC_I5000
tristate "Intel Greencreek/Blackford chipset" tristate "Intel Greencreek/Blackford chipset"
depends on EDAC_MM_EDAC && X86 && PCI depends on X86 && PCI
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
Greekcreek/Blackford chipsets. Greekcreek/Blackford chipsets.
config EDAC_I5100 config EDAC_I5100
tristate "Intel San Clemente MCH" tristate "Intel San Clemente MCH"
depends on EDAC_MM_EDAC && X86 && PCI depends on X86 && PCI
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
San Clemente MCH. San Clemente MCH.
config EDAC_I7300 config EDAC_I7300
tristate "Intel Clarksboro MCH" tristate "Intel Clarksboro MCH"
depends on EDAC_MM_EDAC && X86 && PCI depends on X86 && PCI
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
Clarksboro MCH (Intel 7300 chipset). Clarksboro MCH (Intel 7300 chipset).
config EDAC_SBRIDGE config EDAC_SBRIDGE
tristate "Intel Sandy-Bridge/Ivy-Bridge/Haswell Integrated MC" tristate "Intel Sandy-Bridge/Ivy-Bridge/Haswell Integrated MC"
depends on EDAC_MM_EDAC && PCI && X86_64 && X86_MCE_INTEL depends on PCI && X86_64 && X86_MCE_INTEL && PCI_MMCONFIG
depends on PCI_MMCONFIG
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
Sandy Bridge, Ivy Bridge and Haswell Integrated Memory Controllers. Sandy Bridge, Ivy Bridge and Haswell Integrated Memory Controllers.
config EDAC_SKX config EDAC_SKX
tristate "Intel Skylake server Integrated MC" tristate "Intel Skylake server Integrated MC"
depends on EDAC_MM_EDAC && PCI && X86_64 && X86_MCE_INTEL depends on PCI && X86_64 && X86_MCE_INTEL && PCI_MMCONFIG
depends on PCI_MMCONFIG
help help
Support for error detection and correction the Intel Support for error detection and correction the Intel
Skylake server Integrated Memory Controllers. Skylake server Integrated Memory Controllers.
config EDAC_PND2 config EDAC_PND2
tristate "Intel Pondicherry2" tristate "Intel Pondicherry2"
depends on EDAC_MM_EDAC && PCI && X86_64 && X86_MCE_INTEL depends on PCI && X86_64 && X86_MCE_INTEL
help help
Support for error detection and correction on the Intel Support for error detection and correction on the Intel
Pondicherry2 Integrated Memory Controller. This SoC IP is Pondicherry2 Integrated Memory Controller. This SoC IP is
@ -271,36 +247,35 @@ config EDAC_PND2
config EDAC_MPC85XX config EDAC_MPC85XX
tristate "Freescale MPC83xx / MPC85xx" tristate "Freescale MPC83xx / MPC85xx"
depends on EDAC_MM_EDAC && FSL_SOC depends on FSL_SOC
help help
Support for error detection and correction on the Freescale Support for error detection and correction on the Freescale
MPC8349, MPC8560, MPC8540, MPC8548, T4240 MPC8349, MPC8560, MPC8540, MPC8548, T4240
config EDAC_LAYERSCAPE config EDAC_LAYERSCAPE
tristate "Freescale Layerscape DDR" tristate "Freescale Layerscape DDR"
depends on EDAC_MM_EDAC && ARCH_LAYERSCAPE depends on ARCH_LAYERSCAPE
help help
Support for error detection and correction on Freescale memory Support for error detection and correction on Freescale memory
controllers on Layerscape SoCs. controllers on Layerscape SoCs.
config EDAC_MV64X60 config EDAC_MV64X60
tristate "Marvell MV64x60" tristate "Marvell MV64x60"
depends on EDAC_MM_EDAC && MV64X60 depends on MV64X60
help help
Support for error detection and correction on the Marvell Support for error detection and correction on the Marvell
MV64360 and MV64460 chipsets. MV64360 and MV64460 chipsets.
config EDAC_PASEMI config EDAC_PASEMI
tristate "PA Semi PWRficient" tristate "PA Semi PWRficient"
depends on EDAC_MM_EDAC && PCI depends on PPC_PASEMI && PCI
depends on PPC_PASEMI
help help
Support for error detection and correction on PA Semi Support for error detection and correction on PA Semi
PWRficient. PWRficient.
config EDAC_CELL config EDAC_CELL
tristate "Cell Broadband Engine memory controller" tristate "Cell Broadband Engine memory controller"
depends on EDAC_MM_EDAC && PPC_CELL_COMMON depends on PPC_CELL_COMMON
help help
Support for error detection and correction on the Support for error detection and correction on the
Cell Broadband Engine internal memory controller Cell Broadband Engine internal memory controller
@ -308,7 +283,7 @@ config EDAC_CELL
config EDAC_PPC4XX config EDAC_PPC4XX
tristate "PPC4xx IBM DDR2 Memory Controller" tristate "PPC4xx IBM DDR2 Memory Controller"
depends on EDAC_MM_EDAC && 4xx depends on 4xx
help help
This enables support for EDAC on the ECC memory used This enables support for EDAC on the ECC memory used
with the IBM DDR2 memory controller found in various with the IBM DDR2 memory controller found in various
@ -317,7 +292,7 @@ config EDAC_PPC4XX
config EDAC_AMD8131 config EDAC_AMD8131
tristate "AMD8131 HyperTransport PCI-X Tunnel" tristate "AMD8131 HyperTransport PCI-X Tunnel"
depends on EDAC_MM_EDAC && PCI && PPC_MAPLE depends on PCI && PPC_MAPLE
help help
Support for error detection and correction on the Support for error detection and correction on the
AMD8131 HyperTransport PCI-X Tunnel chip. AMD8131 HyperTransport PCI-X Tunnel chip.
@ -326,7 +301,7 @@ config EDAC_AMD8131
config EDAC_AMD8111 config EDAC_AMD8111
tristate "AMD8111 HyperTransport I/O Hub" tristate "AMD8111 HyperTransport I/O Hub"
depends on EDAC_MM_EDAC && PCI && PPC_MAPLE depends on PCI && PPC_MAPLE
help help
Support for error detection and correction on the Support for error detection and correction on the
AMD8111 HyperTransport I/O Hub chip. AMD8111 HyperTransport I/O Hub chip.
@ -335,7 +310,7 @@ config EDAC_AMD8111
config EDAC_CPC925 config EDAC_CPC925
tristate "IBM CPC925 Memory Controller (PPC970FX)" tristate "IBM CPC925 Memory Controller (PPC970FX)"
depends on EDAC_MM_EDAC && PPC64 depends on PPC64
help help
Support for error detection and correction on the Support for error detection and correction on the
IBM CPC925 Bridge and Memory Controller, which is IBM CPC925 Bridge and Memory Controller, which is
@ -344,7 +319,7 @@ config EDAC_CPC925
config EDAC_TILE config EDAC_TILE
tristate "Tilera Memory Controller" tristate "Tilera Memory Controller"
depends on EDAC_MM_EDAC && TILE depends on TILE
default y default y
help help
Support for error detection and correction on the Support for error detection and correction on the
@ -352,49 +327,59 @@ config EDAC_TILE
config EDAC_HIGHBANK_MC config EDAC_HIGHBANK_MC
tristate "Highbank Memory Controller" tristate "Highbank Memory Controller"
depends on EDAC_MM_EDAC && ARCH_HIGHBANK depends on ARCH_HIGHBANK
help help
Support for error detection and correction on the Support for error detection and correction on the
Calxeda Highbank memory controller. Calxeda Highbank memory controller.
config EDAC_HIGHBANK_L2 config EDAC_HIGHBANK_L2
tristate "Highbank L2 Cache" tristate "Highbank L2 Cache"
depends on EDAC_MM_EDAC && ARCH_HIGHBANK depends on ARCH_HIGHBANK
help help
Support for error detection and correction on the Support for error detection and correction on the
Calxeda Highbank memory controller. Calxeda Highbank memory controller.
config EDAC_OCTEON_PC config EDAC_OCTEON_PC
tristate "Cavium Octeon Primary Caches" tristate "Cavium Octeon Primary Caches"
depends on EDAC_MM_EDAC && CPU_CAVIUM_OCTEON depends on CPU_CAVIUM_OCTEON
help help
Support for error detection and correction on the primary caches of Support for error detection and correction on the primary caches of
the cnMIPS cores of Cavium Octeon family SOCs. the cnMIPS cores of Cavium Octeon family SOCs.
config EDAC_OCTEON_L2C config EDAC_OCTEON_L2C
tristate "Cavium Octeon Secondary Caches (L2C)" tristate "Cavium Octeon Secondary Caches (L2C)"
depends on EDAC_MM_EDAC && CAVIUM_OCTEON_SOC depends on CAVIUM_OCTEON_SOC
help help
Support for error detection and correction on the Support for error detection and correction on the
Cavium Octeon family of SOCs. Cavium Octeon family of SOCs.
config EDAC_OCTEON_LMC config EDAC_OCTEON_LMC
tristate "Cavium Octeon DRAM Memory Controller (LMC)" tristate "Cavium Octeon DRAM Memory Controller (LMC)"
depends on EDAC_MM_EDAC && CAVIUM_OCTEON_SOC depends on CAVIUM_OCTEON_SOC
help help
Support for error detection and correction on the Support for error detection and correction on the
Cavium Octeon family of SOCs. Cavium Octeon family of SOCs.
config EDAC_OCTEON_PCI config EDAC_OCTEON_PCI
tristate "Cavium Octeon PCI Controller" tristate "Cavium Octeon PCI Controller"
depends on EDAC_MM_EDAC && PCI && CAVIUM_OCTEON_SOC depends on PCI && CAVIUM_OCTEON_SOC
help help
Support for error detection and correction on the Support for error detection and correction on the
Cavium Octeon family of SOCs. Cavium Octeon family of SOCs.
config EDAC_THUNDERX
tristate "Cavium ThunderX EDAC"
depends on ARM64
depends on PCI
help
Support for error detection and correction on the
Cavium ThunderX memory controllers (LMC), Cache
Coherent Processor Interconnect (CCPI) and L2 cache
blocks (TAD, CBC, MCI).
config EDAC_ALTERA config EDAC_ALTERA
bool "Altera SOCFPGA ECC" bool "Altera SOCFPGA ECC"
depends on EDAC_MM_EDAC=y && ARCH_SOCFPGA depends on EDAC=y && ARCH_SOCFPGA
help help
Support for error detection and correction on the Support for error detection and correction on the
Altera SOCs. This must be selected for SDRAM ECC. Altera SOCs. This must be selected for SDRAM ECC.
@ -460,14 +445,14 @@ config EDAC_ALTERA_SDMMC
config EDAC_SYNOPSYS config EDAC_SYNOPSYS
tristate "Synopsys DDR Memory Controller" tristate "Synopsys DDR Memory Controller"
depends on EDAC_MM_EDAC && ARCH_ZYNQ depends on ARCH_ZYNQ
help help
Support for error detection and correction on the Synopsys DDR Support for error detection and correction on the Synopsys DDR
memory controller. memory controller.
config EDAC_XGENE config EDAC_XGENE
tristate "APM X-Gene SoC" tristate "APM X-Gene SoC"
depends on EDAC_MM_EDAC && (ARM64 || COMPILE_TEST) depends on (ARM64 || COMPILE_TEST)
help help
Support for error detection and correction on the Support for error detection and correction on the
APM X-Gene family of SOCs. APM X-Gene family of SOCs.

View file

@ -6,8 +6,7 @@
# GNU General Public License. # GNU General Public License.
# #
obj-$(CONFIG_EDAC) := edac_stub.o obj-$(CONFIG_EDAC) := edac_core.o
obj-$(CONFIG_EDAC_MM_EDAC) += edac_core.o
edac_core-y := edac_mc.o edac_device.o edac_mc_sysfs.o edac_core-y := edac_mc.o edac_device.o edac_mc_sysfs.o
edac_core-y += edac_module.o edac_device_sysfs.o wq.o edac_core-y += edac_module.o edac_device_sysfs.o wq.o
@ -67,13 +66,14 @@ obj-$(CONFIG_EDAC_AMD8131) += amd8131_edac.o
obj-$(CONFIG_EDAC_TILE) += tile_edac.o obj-$(CONFIG_EDAC_TILE) += tile_edac.o
obj-$(CONFIG_EDAC_HIGHBANK_MC) += highbank_mc_edac.o obj-$(CONFIG_EDAC_HIGHBANK_MC) += highbank_mc_edac.o
obj-$(CONFIG_EDAC_HIGHBANK_L2) += highbank_l2_edac.o obj-$(CONFIG_EDAC_HIGHBANK_L2) += highbank_l2_edac.o
obj-$(CONFIG_EDAC_OCTEON_PC) += octeon_edac-pc.o obj-$(CONFIG_EDAC_OCTEON_PC) += octeon_edac-pc.o
obj-$(CONFIG_EDAC_OCTEON_L2C) += octeon_edac-l2c.o obj-$(CONFIG_EDAC_OCTEON_L2C) += octeon_edac-l2c.o
obj-$(CONFIG_EDAC_OCTEON_LMC) += octeon_edac-lmc.o obj-$(CONFIG_EDAC_OCTEON_LMC) += octeon_edac-lmc.o
obj-$(CONFIG_EDAC_OCTEON_PCI) += octeon_edac-pci.o obj-$(CONFIG_EDAC_OCTEON_PCI) += octeon_edac-pci.o
obj-$(CONFIG_EDAC_THUNDERX) += thunderx_edac.o
obj-$(CONFIG_EDAC_ALTERA) += altera_edac.o obj-$(CONFIG_EDAC_ALTERA) += altera_edac.o
obj-$(CONFIG_EDAC_SYNOPSYS) += synopsys_edac.o obj-$(CONFIG_EDAC_SYNOPSYS) += synopsys_edac.o

View file

@ -1023,13 +1023,23 @@ altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask,
return ret; return ret;
} }
static int socfpga_is_a10(void)
{
return of_machine_is_compatible("altr,socfpga-arria10");
}
static int validate_parent_available(struct device_node *np); static int validate_parent_available(struct device_node *np);
static const struct of_device_id altr_edac_a10_device_of_match[]; static const struct of_device_id altr_edac_a10_device_of_match[];
static int __init __maybe_unused altr_init_a10_ecc_device_type(char *compat) static int __init __maybe_unused altr_init_a10_ecc_device_type(char *compat)
{ {
int irq; int irq;
struct device_node *child, *np = of_find_compatible_node(NULL, NULL, struct device_node *child, *np;
"altr,socfpga-a10-ecc-manager");
if (!socfpga_is_a10())
return -ENODEV;
np = of_find_compatible_node(NULL, NULL,
"altr,socfpga-a10-ecc-manager");
if (!np) { if (!np) {
edac_printk(KERN_ERR, EDAC_DEVICE, "ECC Manager not found\n"); edac_printk(KERN_ERR, EDAC_DEVICE, "ECC Manager not found\n");
return -ENODEV; return -ENODEV;
@ -1545,8 +1555,12 @@ static const struct edac_device_prv_data a10_sdmmceccb_data = {
static int __init socfpga_init_sdmmc_ecc(void) static int __init socfpga_init_sdmmc_ecc(void)
{ {
int rc = -ENODEV; int rc = -ENODEV;
struct device_node *child = of_find_compatible_node(NULL, NULL, struct device_node *child;
"altr,socfpga-sdmmc-ecc");
if (!socfpga_is_a10())
return -ENODEV;
child = of_find_compatible_node(NULL, NULL, "altr,socfpga-sdmmc-ecc");
if (!child) { if (!child) {
edac_printk(KERN_WARNING, EDAC_DEVICE, "SDMMC node not found\n"); edac_printk(KERN_WARNING, EDAC_DEVICE, "SDMMC node not found\n");
return -ENODEV; return -ENODEV;

View file

@ -40,6 +40,11 @@
#define edac_atomic_scrub(va, size) do { } while (0) #define edac_atomic_scrub(va, size) do { } while (0)
#endif #endif
int edac_op_state = EDAC_OPSTATE_INVAL;
EXPORT_SYMBOL_GPL(edac_op_state);
static int edac_report = EDAC_REPORTING_ENABLED;
/* lock to memory controller's control array */ /* lock to memory controller's control array */
static DEFINE_MUTEX(mem_ctls_mutex); static DEFINE_MUTEX(mem_ctls_mutex);
static LIST_HEAD(mc_devices); static LIST_HEAD(mc_devices);
@ -52,6 +57,65 @@ static void const *edac_mc_owner;
static struct bus_type mc_bus[EDAC_MAX_MCS]; static struct bus_type mc_bus[EDAC_MAX_MCS];
int edac_get_report_status(void)
{
return edac_report;
}
EXPORT_SYMBOL_GPL(edac_get_report_status);
void edac_set_report_status(int new)
{
if (new == EDAC_REPORTING_ENABLED ||
new == EDAC_REPORTING_DISABLED ||
new == EDAC_REPORTING_FORCE)
edac_report = new;
}
EXPORT_SYMBOL_GPL(edac_set_report_status);
static int edac_report_set(const char *str, const struct kernel_param *kp)
{
if (!str)
return -EINVAL;
if (!strncmp(str, "on", 2))
edac_report = EDAC_REPORTING_ENABLED;
else if (!strncmp(str, "off", 3))
edac_report = EDAC_REPORTING_DISABLED;
else if (!strncmp(str, "force", 5))
edac_report = EDAC_REPORTING_FORCE;
return 0;
}
static int edac_report_get(char *buffer, const struct kernel_param *kp)
{
int ret = 0;
switch (edac_report) {
case EDAC_REPORTING_ENABLED:
ret = sprintf(buffer, "on");
break;
case EDAC_REPORTING_DISABLED:
ret = sprintf(buffer, "off");
break;
case EDAC_REPORTING_FORCE:
ret = sprintf(buffer, "force");
break;
default:
ret = -EINVAL;
break;
}
return ret;
}
static const struct kernel_param_ops edac_report_ops = {
.set = edac_report_set,
.get = edac_report_get,
};
module_param_cb(edac_report, &edac_report_ops, &edac_report, 0644);
unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf, unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf,
unsigned len) unsigned len)
{ {
@ -504,22 +568,6 @@ struct mem_ctl_info *find_mci_by_dev(struct device *dev)
} }
EXPORT_SYMBOL_GPL(find_mci_by_dev); EXPORT_SYMBOL_GPL(find_mci_by_dev);
/*
* handler for EDAC to check if NMI type handler has asserted interrupt
*/
static int edac_mc_assert_error_check_and_clear(void)
{
int old_state;
if (edac_op_state == EDAC_OPSTATE_POLL)
return 1;
old_state = edac_err_assert;
edac_err_assert = 0;
return old_state;
}
/* /*
* edac_mc_workq_function * edac_mc_workq_function
* performs the operation scheduled by a workq request * performs the operation scheduled by a workq request
@ -536,7 +584,7 @@ static void edac_mc_workq_function(struct work_struct *work_req)
return; return;
} }
if (edac_mc_assert_error_check_and_clear()) if (edac_op_state == EDAC_OPSTATE_POLL)
mci->edac_check(mci); mci->edac_check(mci);
mutex_unlock(&mem_ctls_mutex); mutex_unlock(&mem_ctls_mutex);
@ -601,7 +649,6 @@ static int add_mc_to_global_list(struct mem_ctl_info *mci)
} }
list_add_tail_rcu(&mci->link, insert_before); list_add_tail_rcu(&mci->link, insert_before);
atomic_inc(&edac_handlers);
return 0; return 0;
fail0: fail0:
@ -619,7 +666,6 @@ static int add_mc_to_global_list(struct mem_ctl_info *mci)
static int del_mc_from_global_list(struct mem_ctl_info *mci) static int del_mc_from_global_list(struct mem_ctl_info *mci)
{ {
int handlers = atomic_dec_return(&edac_handlers);
list_del_rcu(&mci->link); list_del_rcu(&mci->link);
/* these are for safe removal of devices from global list while /* these are for safe removal of devices from global list while
@ -628,7 +674,7 @@ static int del_mc_from_global_list(struct mem_ctl_info *mci)
synchronize_rcu(); synchronize_rcu();
INIT_LIST_HEAD(&mci->link); INIT_LIST_HEAD(&mci->link);
return handlers; return list_empty(&mc_devices);
} }
struct mem_ctl_info *edac_mc_find(int idx) struct mem_ctl_info *edac_mc_find(int idx)
@ -763,7 +809,7 @@ struct mem_ctl_info *edac_mc_del_mc(struct device *dev)
/* mark MCI offline: */ /* mark MCI offline: */
mci->op_state = OP_OFFLINE; mci->op_state = OP_OFFLINE;
if (!del_mc_from_global_list(mci)) if (del_mc_from_global_list(mci))
edac_mc_owner = NULL; edac_mc_owner = NULL;
mutex_unlock(&mem_ctls_mutex); mutex_unlock(&mem_ctls_mutex);
@ -1195,10 +1241,13 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
/* Report the error via the trace interface */ /* Report the error via the trace interface */
grain_bits = fls_long(e->grain) + 1; grain_bits = fls_long(e->grain) + 1;
trace_mc_event(type, e->msg, e->label, e->error_count,
mci->mc_idx, e->top_layer, e->mid_layer, e->low_layer, if (IS_ENABLED(CONFIG_RAS))
(e->page_frame_number << PAGE_SHIFT) | e->offset_in_page, trace_mc_event(type, e->msg, e->label, e->error_count,
grain_bits, e->syndrome, e->other_detail); mci->mc_idx, e->top_layer, e->mid_layer,
e->low_layer,
(e->page_frame_number << PAGE_SHIFT) | e->offset_in_page,
grain_bits, e->syndrome, e->other_detail);
edac_raw_mc_handle_error(type, mci, e); edac_raw_mc_handle_error(type, mci, e);
} }

View file

@ -1,68 +0,0 @@
/*
* common EDAC components that must be in kernel
*
* Author: Dave Jiang <djiang@mvista.com>
*
* 2007 (c) MontaVista Software, Inc.
* 2010 (c) Advanced Micro Devices Inc.
* Borislav Petkov <bp@alien8.de>
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied.
*
*/
#include <linux/module.h>
#include <linux/edac.h>
#include <linux/atomic.h>
#include <linux/device.h>
int edac_op_state = EDAC_OPSTATE_INVAL;
EXPORT_SYMBOL_GPL(edac_op_state);
atomic_t edac_handlers = ATOMIC_INIT(0);
EXPORT_SYMBOL_GPL(edac_handlers);
int edac_err_assert = 0;
EXPORT_SYMBOL_GPL(edac_err_assert);
int edac_report_status = EDAC_REPORTING_ENABLED;
EXPORT_SYMBOL_GPL(edac_report_status);
static int __init edac_report_setup(char *str)
{
if (!str)
return -EINVAL;
if (!strncmp(str, "on", 2))
set_edac_report_status(EDAC_REPORTING_ENABLED);
else if (!strncmp(str, "off", 3))
set_edac_report_status(EDAC_REPORTING_DISABLED);
else if (!strncmp(str, "force", 5))
set_edac_report_status(EDAC_REPORTING_FORCE);
return 0;
}
__setup("edac_report=", edac_report_setup);
/*
* called to determine if there is an EDAC driver interested in
* knowing an event (such as NMI) occurred
*/
int edac_handler_set(void)
{
if (edac_op_state == EDAC_OPSTATE_POLL)
return 0;
return atomic_read(&edac_handlers);
}
EXPORT_SYMBOL_GPL(edac_handler_set);
/*
* handler for NMI type of interrupts to assert error
*/
void edac_atomic_assert_error(void)
{
edac_err_assert++;
}
EXPORT_SYMBOL_GPL(edac_atomic_assert_error);

View file

@ -1349,7 +1349,7 @@ static int pnd2_mce_check_error(struct notifier_block *nb, unsigned long val, vo
struct dram_addr daddr; struct dram_addr daddr;
char *type; char *type;
if (get_edac_report_status() == EDAC_REPORTING_DISABLED) if (edac_get_report_status() == EDAC_REPORTING_DISABLED)
return NOTIFY_DONE; return NOTIFY_DONE;
mci = pnd2_mci; mci = pnd2_mci;

View file

@ -3075,7 +3075,7 @@ static int sbridge_mce_check_error(struct notifier_block *nb, unsigned long val,
struct sbridge_pvt *pvt; struct sbridge_pvt *pvt;
char *type; char *type;
if (get_edac_report_status() == EDAC_REPORTING_DISABLED) if (edac_get_report_status() == EDAC_REPORTING_DISABLED)
return NOTIFY_DONE; return NOTIFY_DONE;
mci = get_mci_for_node_id(mce->socketid); mci = get_mci_for_node_id(mce->socketid);
@ -3441,7 +3441,7 @@ static int __init sbridge_init(void)
if (rc >= 0) { if (rc >= 0) {
mce_register_decode_chain(&sbridge_mce_dec); mce_register_decode_chain(&sbridge_mce_dec);
if (get_edac_report_status() == EDAC_REPORTING_DISABLED) if (edac_get_report_status() == EDAC_REPORTING_DISABLED)
sbridge_printk(KERN_WARNING, "Loading driver, error reporting disabled.\n"); sbridge_printk(KERN_WARNING, "Loading driver, error reporting disabled.\n");
return 0; return 0;
} }

View file

@ -971,7 +971,7 @@ static int skx_mce_check_error(struct notifier_block *nb, unsigned long val,
struct mem_ctl_info *mci; struct mem_ctl_info *mci;
char *type; char *type;
if (get_edac_report_status() == EDAC_REPORTING_DISABLED) if (edac_get_report_status() == EDAC_REPORTING_DISABLED)
return NOTIFY_DONE; return NOTIFY_DONE;
/* ignore unless this is memory related with an address */ /* ignore unless this is memory related with an address */

2174
drivers/edac/thunderx_edac.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -28,12 +28,10 @@ struct device;
#define EDAC_OPSTATE_INT 2 #define EDAC_OPSTATE_INT 2
extern int edac_op_state; extern int edac_op_state;
extern int edac_err_assert;
extern atomic_t edac_handlers;
extern int edac_handler_set(void); struct bus_type *edac_get_sysfs_subsys(void);
extern void edac_atomic_assert_error(void); int edac_get_report_status(void);
extern struct bus_type *edac_get_sysfs_subsys(void); void edac_set_report_status(int new);
enum { enum {
EDAC_REPORTING_ENABLED, EDAC_REPORTING_ENABLED,
@ -41,28 +39,6 @@ enum {
EDAC_REPORTING_FORCE EDAC_REPORTING_FORCE
}; };
extern int edac_report_status;
#ifdef CONFIG_EDAC
static inline int get_edac_report_status(void)
{
return edac_report_status;
}
static inline void set_edac_report_status(int new)
{
edac_report_status = new;
}
#else
static inline int get_edac_report_status(void)
{
return EDAC_REPORTING_DISABLED;
}
static inline void set_edac_report_status(int new)
{
}
#endif
static inline void opstate_init(void) static inline void opstate_init(void)
{ {
switch (edac_op_state) { switch (edac_op_state) {