diff options
author | Qiuxu Zhuo <qiuxu.zhuo@intel.com> | 2022-09-01 22:43:08 +0300 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2022-09-08 21:40:00 +0300 |
commit | fe32f366931a950889e8d72be86fafc867dab777 (patch) | |
tree | c344ae0f4860bfe62057ae67298a866a4f4740df /drivers/edac/skx_base.c | |
parent | 93df19476535a4ed871bc5eae719b6d67cf3abc3 (diff) | |
download | linux-fe32f366931a950889e8d72be86fafc867dab777.tar.xz |
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.c | 9 |
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(); |