Commit 432de7fd authored by Tony Luck's avatar Tony Luck Committed by Borislav Petkov

EDAC, {i7core,sb,skx}_edac: Fix uncorrected error counting

The count of errors is picked up from bits 52:38 of the machine check
bank status register. But this is the count of *corrected* errors. If an
uncorrected error is being logged, the h/w sets this field to 0. Which
means that when edac_mc_handle_error() is called, the EDAC core will
carefully add zero to the appropriate uncorrected error counts.
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
[ Massage commit message. ]
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Cc: stable@vger.kernel.org
Cc: Aristeu Rozanski <aris@redhat.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/20180928213934.19890-1-tony.luck@intel.com
parent 8537bf10
...@@ -1711,6 +1711,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci, ...@@ -1711,6 +1711,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,
u32 errnum = find_first_bit(&error, 32); u32 errnum = find_first_bit(&error, 32);
if (uncorrected_error) { if (uncorrected_error) {
core_err_cnt = 1;
if (ripv) if (ripv)
tp_event = HW_EVENT_ERR_FATAL; tp_event = HW_EVENT_ERR_FATAL;
else else
......
...@@ -2982,6 +2982,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci, ...@@ -2982,6 +2982,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,
recoverable = GET_BITFIELD(m->status, 56, 56); recoverable = GET_BITFIELD(m->status, 56, 56);
if (uncorrected_error) { if (uncorrected_error) {
core_err_cnt = 1;
if (ripv) { if (ripv) {
type = "FATAL"; type = "FATAL";
tp_event = HW_EVENT_ERR_FATAL; tp_event = HW_EVENT_ERR_FATAL;
......
...@@ -959,6 +959,7 @@ static void skx_mce_output_error(struct mem_ctl_info *mci, ...@@ -959,6 +959,7 @@ static void skx_mce_output_error(struct mem_ctl_info *mci,
recoverable = GET_BITFIELD(m->status, 56, 56); recoverable = GET_BITFIELD(m->status, 56, 56);
if (uncorrected_error) { if (uncorrected_error) {
core_err_cnt = 1;
if (ripv) { if (ripv) {
type = "FATAL"; type = "FATAL";
tp_event = HW_EVENT_ERR_FATAL; tp_event = HW_EVENT_ERR_FATAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment