aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
authorChen, Gong <gong.chen@linux.intel.com>2013-10-18 17:30:13 -0400
committerTony Luck <tony.luck@intel.com>2013-10-23 13:10:20 -0400
commit147de14772ed897727dba7353916b02d1e0f17f4 (patch)
tree7643b3c62c1b6ad149f36d573409b6f2d6761dc7 /drivers/edac
parentdd6dad4288cb93e79bd7abfa6c6a338c47454d1a (diff)
ACPI, APEI, CPER: Add UEFI 2.4 support for memory error
In latest UEFI spec(by now it is 2.4) memory error definition for CPER (UEFI 2.4 Appendix N Common Platform Error Record) adds some new fields. These fields help people to locate memory error to an actual DIMM location. Original-author: Tony Luck <tony.luck@intel.com> Signed-off-by: Chen, Gong <gong.chen@linux.intel.com> Reviewed-by: Borislav Petkov <bp@suse.de> Reviewed-by: Mauro Carvalho Chehab <m.chehab@samsung.com> Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/ghes_edac.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/edac/ghes_edac.c b/drivers/edac/ghes_edac.c
index bb534670ec02..0ad797b9db65 100644
--- a/drivers/edac/ghes_edac.c
+++ b/drivers/edac/ghes_edac.c
@@ -297,15 +297,14 @@ void ghes_edac_report_mem_error(struct ghes *ghes, int sev,
297 } 297 }
298 298
299 /* Error address */ 299 /* Error address */
300 if (mem_err->validation_bits & CPER_MEM_VALID_PHYSICAL_ADDRESS) { 300 if (mem_err->validation_bits & CPER_MEM_VALID_PA) {
301 e->page_frame_number = mem_err->physical_addr >> PAGE_SHIFT; 301 e->page_frame_number = mem_err->physical_addr >> PAGE_SHIFT;
302 e->offset_in_page = mem_err->physical_addr & ~PAGE_MASK; 302 e->offset_in_page = mem_err->physical_addr & ~PAGE_MASK;
303 } 303 }
304 304
305 /* Error grain */ 305 /* Error grain */
306 if (mem_err->validation_bits & CPER_MEM_VALID_PHYSICAL_ADDRESS_MASK) { 306 if (mem_err->validation_bits & CPER_MEM_VALID_PA_MASK)
307 e->grain = ~(mem_err->physical_addr_mask & ~PAGE_MASK); 307 e->grain = ~(mem_err->physical_addr_mask & ~PAGE_MASK);
308 }
309 308
310 /* Memory error location, mapped on e->location */ 309 /* Memory error location, mapped on e->location */
311 p = e->location; 310 p = e->location;