summaryrefslogtreecommitdiffstats
path: root/drivers/edac/skx_base.c
diff options
context:
space:
mode:
authorQiuxu Zhuo <qiuxu.zhuo@intel.com>2022-09-01 12:43:08 -0700
committerTony Luck <tony.luck@intel.com>2022-09-08 11:40:00 -0700
commitfe32f366931a950889e8d72be86fafc867dab777 (patch)
treec344ae0f4860bfe62057ae67298a866a4f4740df /drivers/edac/skx_base.c
parent93df19476535a4ed871bc5eae719b6d67cf3abc3 (diff)
downloadlinux-stable-fe32f366931a950889e8d72be86fafc867dab777.tar.gz
linux-stable-fe32f366931a950889e8d72be86fafc867dab777.tar.bz2
linux-stable-fe32f366931a950889e8d72be86fafc867dab777.zip
EDAC/skx_common: Use driver decoder first
The performance of driver decoder[1] is better than the performance of firmware decoder[2], especially on frequent correctable errors. So use the driver decoder first, fall back to firmware decoder if the driver decoder is unavailable. Also rename the function pointer skx_decode to driver_decode (better name to contrast with adxl_decode). [1] Decode errors by extracting error information from registers of memory controllers and/or MCA bank registers. [2] Decode errors by calling ACPI DSM methods. Co-developed-by: Youquan Song <youquan.song@intel.com> Signed-off-by: Youquan Song <youquan.song@intel.com> Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com> Link: https://lore.kernel.org/all/20220901194310.115427-1-tony.luck@intel.com/
Diffstat (limited to 'drivers/edac/skx_base.c')
-rw-r--r--drivers/edac/skx_base.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/edac/skx_base.c b/drivers/edac/skx_base.c
index 1abc020d49ab..7e2762f62eec 100644
--- a/drivers/edac/skx_base.c
+++ b/drivers/edac/skx_base.c
@@ -714,8 +714,13 @@ static int __init skx_init(void)
skx_set_decode(skx_decode, skx_show_retry_rd_err_log);
- if (nvdimm_count && skx_adxl_get() == -ENODEV)
- skx_printk(KERN_NOTICE, "Only decoding DDR4 address!\n");
+ if (nvdimm_count && skx_adxl_get() != -ENODEV) {
+ skx_set_decode(NULL, skx_show_retry_rd_err_log);
+ } else {
+ if (nvdimm_count)
+ skx_printk(KERN_NOTICE, "Only decoding DDR4 address!\n");
+ skx_set_decode(skx_decode, skx_show_retry_rd_err_log);
+ }
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
opstate_init();