diff options
| -rw-r--r-- | drivers/acpi/apei/cper.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/acpi/apei/cper.c b/drivers/acpi/apei/cper.c index 946ef520186f..b1a8a55915d9 100644 --- a/drivers/acpi/apei/cper.c +++ b/drivers/acpi/apei/cper.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/module.h> | 28 | #include <linux/module.h> |
| 29 | #include <linux/time.h> | 29 | #include <linux/time.h> |
| 30 | #include <linux/cper.h> | 30 | #include <linux/cper.h> |
| 31 | #include <linux/dmi.h> | ||
| 31 | #include <linux/acpi.h> | 32 | #include <linux/acpi.h> |
| 32 | #include <linux/pci.h> | 33 | #include <linux/pci.h> |
| 33 | #include <linux/aer.h> | 34 | #include <linux/aer.h> |
| @@ -210,6 +211,8 @@ static void cper_print_mem(const char *pfx, const struct cper_sec_mem_err *mem) | |||
| 210 | printk("%s""card: %d\n", pfx, mem->card); | 211 | printk("%s""card: %d\n", pfx, mem->card); |
| 211 | if (mem->validation_bits & CPER_MEM_VALID_MODULE) | 212 | if (mem->validation_bits & CPER_MEM_VALID_MODULE) |
| 212 | printk("%s""module: %d\n", pfx, mem->module); | 213 | printk("%s""module: %d\n", pfx, mem->module); |
| 214 | if (mem->validation_bits & CPER_MEM_VALID_RANK_NUMBER) | ||
| 215 | printk("%s""rank: %d\n", pfx, mem->rank); | ||
| 213 | if (mem->validation_bits & CPER_MEM_VALID_BANK) | 216 | if (mem->validation_bits & CPER_MEM_VALID_BANK) |
| 214 | printk("%s""bank: %d\n", pfx, mem->bank); | 217 | printk("%s""bank: %d\n", pfx, mem->bank); |
| 215 | if (mem->validation_bits & CPER_MEM_VALID_DEVICE) | 218 | if (mem->validation_bits & CPER_MEM_VALID_DEVICE) |
| @@ -232,6 +235,15 @@ static void cper_print_mem(const char *pfx, const struct cper_sec_mem_err *mem) | |||
| 232 | etype < ARRAY_SIZE(cper_mem_err_type_strs) ? | 235 | etype < ARRAY_SIZE(cper_mem_err_type_strs) ? |
| 233 | cper_mem_err_type_strs[etype] : "unknown"); | 236 | cper_mem_err_type_strs[etype] : "unknown"); |
| 234 | } | 237 | } |
| 238 | if (mem->validation_bits & CPER_MEM_VALID_MODULE_HANDLE) { | ||
| 239 | const char *bank = NULL, *device = NULL; | ||
| 240 | dmi_memdev_name(mem->mem_dev_handle, &bank, &device); | ||
| 241 | if (bank != NULL && device != NULL) | ||
| 242 | printk("%s""DIMM location: %s %s", pfx, bank, device); | ||
| 243 | else | ||
| 244 | printk("%s""DIMM DMI handle: 0x%.4x", | ||
| 245 | pfx, mem->mem_dev_handle); | ||
| 246 | } | ||
| 235 | } | 247 | } |
| 236 | 248 | ||
| 237 | static const char *cper_pcie_port_type_strs[] = { | 249 | static const char *cper_pcie_port_type_strs[] = { |
