示例#1
0
文件: cper.c 项目: 24hours/linux
static void cper_print_mem(const char *pfx, const struct cper_sec_mem_err *mem)
{
	if (mem->validation_bits & CPER_MEM_VALID_ERROR_STATUS)
		printk("%s""error_status: 0x%016llx\n", pfx, mem->error_status);
	if (mem->validation_bits & CPER_MEM_VALID_PA)
		printk("%s""physical_address: 0x%016llx\n",
		       pfx, mem->physical_addr);
	if (mem->validation_bits & CPER_MEM_VALID_PA_MASK)
		printk("%s""physical_address_mask: 0x%016llx\n",
		       pfx, mem->physical_addr_mask);
	if (mem->validation_bits & CPER_MEM_VALID_NODE)
		pr_debug("node: %d\n", mem->node);
	if (mem->validation_bits & CPER_MEM_VALID_CARD)
		pr_debug("card: %d\n", mem->card);
	if (mem->validation_bits & CPER_MEM_VALID_MODULE)
		pr_debug("module: %d\n", mem->module);
	if (mem->validation_bits & CPER_MEM_VALID_RANK_NUMBER)
		pr_debug("rank: %d\n", mem->rank);
	if (mem->validation_bits & CPER_MEM_VALID_BANK)
		pr_debug("bank: %d\n", mem->bank);
	if (mem->validation_bits & CPER_MEM_VALID_DEVICE)
		pr_debug("device: %d\n", mem->device);
	if (mem->validation_bits & CPER_MEM_VALID_ROW)
		pr_debug("row: %d\n", mem->row);
	if (mem->validation_bits & CPER_MEM_VALID_COLUMN)
		pr_debug("column: %d\n", mem->column);
	if (mem->validation_bits & CPER_MEM_VALID_BIT_POSITION)
		pr_debug("bit_position: %d\n", mem->bit_pos);
	if (mem->validation_bits & CPER_MEM_VALID_REQUESTOR_ID)
		pr_debug("requestor_id: 0x%016llx\n", mem->requestor_id);
	if (mem->validation_bits & CPER_MEM_VALID_RESPONDER_ID)
		pr_debug("responder_id: 0x%016llx\n", mem->responder_id);
	if (mem->validation_bits & CPER_MEM_VALID_TARGET_ID)
		pr_debug("target_id: 0x%016llx\n", mem->target_id);
	if (mem->validation_bits & CPER_MEM_VALID_ERROR_TYPE) {
		u8 etype = mem->error_type;
		printk("%s""error_type: %d, %s\n", pfx, etype,
		       etype < ARRAY_SIZE(cper_mem_err_type_strs) ?
		       cper_mem_err_type_strs[etype] : "unknown");
	}
	if (mem->validation_bits & CPER_MEM_VALID_MODULE_HANDLE) {
		const char *bank = NULL, *device = NULL;
		dmi_memdev_name(mem->mem_dev_handle, &bank, &device);
		if (bank != NULL && device != NULL)
			printk("%s""DIMM location: %s %s", pfx, bank, device);
		else
			printk("%s""DIMM DMI handle: 0x%.4x",
			       pfx, mem->mem_dev_handle);
	}
}
示例#2
0
文件: cper.c 项目: AlexShiLucky/linux
static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)
{
	u32 len, n;
	const char *bank = NULL, *device = NULL;

	if (!msg || !(mem->validation_bits & CPER_MEM_VALID_MODULE_HANDLE))
		return 0;

	n = 0;
	len = CPER_REC_LEN - 1;
	dmi_memdev_name(mem->mem_dev_handle, &bank, &device);
	if (bank && device)
		n = snprintf(msg, len, "DIMM location: %s %s ", bank, device);
	else
		n = snprintf(msg, len,
			     "DIMM location: not present. DMI handle: 0x%.4x ",
			     mem->mem_dev_handle);

	msg[n] = '\0';
	return n;
}