EDAC, {i7core,sb,skx}_edac: Fix uncorrected error counting
authorTony Luck <tony.luck@intel.com>
Fri, 28 Sep 2018 21:39:34 +0000 (14:39 -0700)
committerBorislav Petkov <bp@suse.de>
Sat, 29 Sep 2018 08:58:16 +0000 (10:58 +0200)
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: Tony Luck <tony.luck@intel.com>
[ Massage commit message. ]
Signed-off-by: Borislav 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
drivers/edac/i7core_edac.c
drivers/edac/sb_edac.c
drivers/edac/skx_edac.c

index 943aab62dea17b32449ac92e31dded94c5fd26ca..9ef448fef12f38b427b340be1e2cb645885addaa 100644 (file)
@@ -1711,6 +1711,7 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,
        u32 errnum = find_first_bit(&error, 32);
 
        if (uncorrected_error) {
+               core_err_cnt = 1;
                if (ripv)
                        tp_event = HW_EVENT_ERR_FATAL;
                else
index cacd0ca12af6d35e034a3e3044e527c19a67b527..9353c3fc7c0577a04d07a89bf6461098d1493e13 100644 (file)
@@ -2982,6 +2982,7 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,
                recoverable = GET_BITFIELD(m->status, 56, 56);
 
        if (uncorrected_error) {
+               core_err_cnt = 1;
                if (ripv) {
                        type = "FATAL";
                        tp_event = HW_EVENT_ERR_FATAL;
index b2987efa2c6d4f2cf50c64acbb3d623c7adfc4b2..e840412abe4e9f77c7724d2890a5423da8eaca86 100644 (file)
@@ -959,6 +959,7 @@ static void skx_mce_output_error(struct mem_ctl_info *mci,
        recoverable = GET_BITFIELD(m->status, 56, 56);
 
        if (uncorrected_error) {
+               core_err_cnt = 1;
                if (ripv) {
                        type = "FATAL";
                        tp_event = HW_EVENT_ERR_FATAL;