Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit addccbb2 authored by Chen, Gong's avatar Chen, Gong Committed by Borislav Petkov
Browse files

ACPI, APEI, GHES: Do not report only correctable errors with SCI



Currently SCI is employed to handle corrected errors - memory corrected
errors, more specifically but in fact SCI still can be used to handle
any errors, e.g. uncorrected or even fatal ones if enabled by the BIOS.
Enable logging for those kinds of errors too.

Signed-off-by: default avatarChen, Gong <gong.chen@linux.intel.com>
Acked-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Tony Luck <tony.luck@intel.com>
Link: http://lkml.kernel.org/r/1385363701-12387-1-git-send-email-gong.chen@linux.intel.com


[ Boris: massage commit message, rename function arg. ]
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
parent 42139eb3
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -33,22 +33,28 @@
#include <linux/acpi.h>
#include <linux/cper.h>
#include <acpi/apei.h>
#include <acpi/ghes.h>
#include <asm/mce.h>

#include "mce-internal.h"

void apei_mce_report_mem_error(int corrected, struct cper_sec_mem_err *mem_err)
void apei_mce_report_mem_error(int severity, struct cper_sec_mem_err *mem_err)
{
	struct mce m;

	/* Only corrected MC is reported */
	if (!corrected || !(mem_err->validation_bits & CPER_MEM_VALID_PA))
	if (!(mem_err->validation_bits & CPER_MEM_VALID_PA))
		return;

	mce_setup(&m);
	m.bank = 1;
	/* Fake a memory read corrected error with unknown channel */
	/* Fake a memory read error with unknown channel */
	m.status = MCI_STATUS_VAL | MCI_STATUS_EN | MCI_STATUS_ADDRV | 0x9f;

	if (severity >= GHES_SEV_RECOVERABLE)
		m.status |= MCI_STATUS_UC;
	if (severity >= GHES_SEV_PANIC)
		m.status |= MCI_STATUS_PCC;

	m.addr = mem_err->physical_addr;
	mce_log(&m);
	mce_notify_irq();
+1 −2
Original line number Diff line number Diff line
@@ -453,8 +453,7 @@ static void ghes_do_proc(struct ghes *ghes,
			ghes_edac_report_mem_error(ghes, sev, mem_err);

#ifdef CONFIG_X86_MCE
			apei_mce_report_mem_error(sev == GHES_SEV_CORRECTED,
						  mem_err);
			apei_mce_report_mem_error(sev, mem_err);
#endif
			ghes_handle_memory_failure(gdata, sev);
		}