Received: by 10.223.185.116 with SMTP id b49csp2001240wrg; Sat, 24 Feb 2018 08:41:27 -0800 (PST) X-Google-Smtp-Source: AH8x227KTAk8kTD+uJ717+0yhIUUwpXScnWLBiFM+myWF5C4d6TkUe2Nnv0afx1pvBGol01qsA6G X-Received: by 10.99.155.1 with SMTP id r1mr4420028pgd.422.1519490486894; Sat, 24 Feb 2018 08:41:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519490486; cv=none; d=google.com; s=arc-20160816; b=fSPLuXL4RAwdcci4zBlnoN6demF+pvjlDcWH+xE/r9EPCHUOCXjUk7WSLAhZyllwHB GcDDlChIJvkhMGJjisSM1RFGLrDmmqIKQOiHlmwjLm5bk81TyoeqG7J2QBC2waoZUV9k +7BIKjMC6xn21KEm6N80uHo7jRNwCNat3Fp5kl8C6OmqaGfcrOc9gEdZ+4o9iQGWYfC+ ZSOnczNYPCrEMYcXPXD5o3OeLzNaIxxJHA9juNh6j0o7pQOe8qLl2wXfW8WPMhHNIJTu eyVZA0uB4Y5Zs+FQa42KGntzfz0b+mHL4P++tlYW4BGpqdSMUPqFAWpE3LCds9mcZ+C+ BhPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=QP6dBtPgyZM3r9yAzHRhwz5DVtm/y2pSkuVow2wzrcI=; b=NyzXkRQJ+twTcjFYMtXbAqKHd1F7q9RmrBl9yiNRMYx1WEASecsrkc430EaFveWwmD 4fpZbg40G9c/ipI0zfgC2pIn5Cxh5+jRJgs7LB1/P3cpIdWmbZ8rCz1z1n3edAmOZXMt iA6zqHPU2IZ/MlgZcVZRfYLcYlN/nbaB6FuUy2qWickPL19v0/TvWmMB/Ax4JRJ7UkG2 uZQ4ctf+wVTveXhGhXz1Oz17gTXrQx6f0n7gHA1jUkIRV/Xx/Ejj+bMTzjGkx0Yb6/SD Mfz4eXw4E/Y5W7N0IFa96NzYB0hUNwuWwuwl4g4cASpB2KmtUgy9s6mk2DNtPGqgE/MP W9IQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kJTzKHs+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f19-v6si3725719plr.641.2018.02.24.08.40.37; Sat, 24 Feb 2018 08:41:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kJTzKHs+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751480AbeBXQiw (ORCPT + 99 others); Sat, 24 Feb 2018 11:38:52 -0500 Received: from mail-io0-f194.google.com ([209.85.223.194]:39124 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751364AbeBXQit (ORCPT ); Sat, 24 Feb 2018 11:38:49 -0500 Received: by mail-io0-f194.google.com with SMTP id b34so12962793ioj.6 for ; Sat, 24 Feb 2018 08:38:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=QP6dBtPgyZM3r9yAzHRhwz5DVtm/y2pSkuVow2wzrcI=; b=kJTzKHs+6/UkCBFgG9tAP665W8lWGX6yT4WgWgsmrLb/W3Zs2vyGDe4XcLMcJaRACm X91O1TT4LH0oMgV0BP0QtgcWsGD/XFYPjzBs88M161n1/Nm/ABjbNgmgQ4iL2AsJv/zh rWbAuDFG+r/9TJrZyz72qcGnSa30ReCxJRSJI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=QP6dBtPgyZM3r9yAzHRhwz5DVtm/y2pSkuVow2wzrcI=; b=ape7zD6Y2L6aVrh9Itn8UCgOAwghBnmiYpbeBc1aN/CPc0MiFkP9Aaz+PuvCmagg8c tODpLAdww9+c+IkofFG7TTjbkNURlycUs92YpdhfnLbr6GKq9E6WR7gF8WWlING52d0M OzWfm5+RZHXokfrUVv1E0zGQvkxNdWaWrcnH9lLzIg1oHhLZClgXTEwWg+l8m6u3mjnv XtDF6Pr/T7xDVsT45tNsrsCJU3lH4KLkn4vaV9KnYNhsfeKZJJ/6lBpxh5UCynKTWtxz h/ZRJvSK9IIjA6bp02XqDIgKEX9uvTbYUs7ZJuTQEAM0bmsHuE/dXXwXYisP2SZC2ijz wXsA== X-Gm-Message-State: APf1xPDRU37XLOI02oGHINXZ3U/3uzAbRxJonPx3FTa+Y5VXp6Mw7X6W zLQ2CfbYnEcH/hadZGac3T5t8++BIEUcUf9k50SrwA== X-Received: by 10.107.52.73 with SMTP id b70mr6243788ioa.60.1519490328846; Sat, 24 Feb 2018 08:38:48 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.138.209 with HTTP; Sat, 24 Feb 2018 08:38:47 -0800 (PST) In-Reply-To: <20180223200333.6410-3-Yazen.Ghannam@amd.com> References: <20180223200333.6410-1-Yazen.Ghannam@amd.com> <20180223200333.6410-3-Yazen.Ghannam@amd.com> From: Ard Biesheuvel Date: Sat, 24 Feb 2018 16:38:47 +0000 Message-ID: Subject: Re: [PATCH 2/8] efi: Decode IA32/X64 Processor Error Section To: Yazen Ghannam Cc: linux-efi@vger.kernel.org, Linux Kernel Mailing List , Borislav Petkov , "the arch/x86 maintainers" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 23 February 2018 at 20:03, Yazen Ghannam wrote: > From: Yazen Ghannam > > Recognize the IA32/X64 Processor Error Section. > > Do the section decoding in a new "cper-x86.c" file and add this to the > Makefile depending on a new "UEFI_CPER_X86" config option. > > Print the Local APIC ID and CPUID info from the Processor Error Record. > > The "Processor Error Info" and "Processor Context" fields will be > decoded in following patches. > > Based on UEFI 2.7 Table 255. Processor Error Record. > > Cc: # 4.16.x > Signed-off-by: Yazen Ghannam > --- > drivers/firmware/efi/Kconfig | 5 +++++ > drivers/firmware/efi/Makefile | 2 ++ > drivers/firmware/efi/cper-x86.c | 26 ++++++++++++++++++++++++++ > drivers/firmware/efi/cper.c | 10 ++++++++++ > include/linux/cper.h | 2 ++ > 5 files changed, 45 insertions(+) > create mode 100644 drivers/firmware/efi/cper-x86.c > > diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig > index 3098410abad8..8b684147835d 100644 > --- a/drivers/firmware/efi/Kconfig > +++ b/drivers/firmware/efi/Kconfig > @@ -174,6 +174,11 @@ config UEFI_CPER_ARM > depends on UEFI_CPER && ( ARM || ARM64 ) > default y > > +config UEFI_CPER_X86 > + bool > + depends on UEFI_CPER && ( X86_32 || X86_64 ) Just 'UEFI_CPER && X86' should be sufficient, no? > + default y > + > config EFI_DEV_PATH_PARSER > bool > depends on ACPI > diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile > index cb805374f4bc..7cf8d75ebe51 100644 > --- a/drivers/firmware/efi/Makefile > +++ b/drivers/firmware/efi/Makefile > @@ -31,3 +31,5 @@ obj-$(CONFIG_ARM) += $(arm-obj-y) > obj-$(CONFIG_ARM64) += $(arm-obj-y) > obj-$(CONFIG_EFI_CAPSULE_LOADER) += capsule-loader.o > obj-$(CONFIG_UEFI_CPER_ARM) += cper-arm.o > + Spurious newline > +obj-$(CONFIG_UEFI_CPER_X86) += cper-x86.o > diff --git a/drivers/firmware/efi/cper-x86.c b/drivers/firmware/efi/cper-x86.c > new file mode 100644 > index 000000000000..b50ee3cdf637 > --- /dev/null > +++ b/drivers/firmware/efi/cper-x86.c > @@ -0,0 +1,26 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// Copyright (C) 2018, Advanced Micro Devices, Inc. > +// Copyright (C) 2018, Yazen Ghannam > + Do you really own the copyright for code that you write on behalf of your employer? > +#include > + > +/* > + * We don't need a "CPER_IA" prefix since these are all locally defined. > + * This will save us a lot of line space. > + */ > +#define VALID_LAPIC_ID BIT_ULL(0) > +#define VALID_CPUID_INFO BIT_ULL(1) > + > +void cper_print_proc_ia(const char *pfx, const struct cper_sec_proc_ia *proc) > +{ > + printk("%sValidation Bits: 0x%016llx\n", pfx, proc->validation_bits); > + > + if (proc->validation_bits & VALID_LAPIC_ID) > + printk("%sLocal APIC_ID: 0x%llx\n", pfx, proc->lapic_id); > + > + if (proc->validation_bits & VALID_CPUID_INFO) { > + printk("%sCPUID Info:\n", pfx); > + print_hex_dump(pfx, "", DUMP_PREFIX_OFFSET, 16, 4, proc->cpuid, > + sizeof(proc->cpuid), 0); > + } > +} > diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c > index c165933ebf38..5a59b582c9aa 100644 > --- a/drivers/firmware/efi/cper.c > +++ b/drivers/firmware/efi/cper.c > @@ -469,6 +469,16 @@ cper_estatus_print_section(const char *pfx, struct acpi_hest_generic_data *gdata > cper_print_proc_arm(newpfx, arm_err); > else > goto err_section_too_small; > +#endif > +#if defined(CONFIG_UEFI_CPER_X86) > + } else if (guid_equal(sec_type, &CPER_SEC_PROC_IA)) { > + struct cper_sec_proc_ia *ia_err = acpi_hest_get_payload(gdata); > + > + printk("%ssection_type: IA32/X64 processor error\n", newpfx); > + if (gdata->error_data_length >= sizeof(*ia_err)) > + cper_print_proc_ia(newpfx, ia_err); > + else > + goto err_section_too_small; > #endif > } else { > const void *err = acpi_hest_get_payload(gdata); > diff --git a/include/linux/cper.h b/include/linux/cper.h > index 4b5f8459b403..9c703a0abe6e 100644 > --- a/include/linux/cper.h > +++ b/include/linux/cper.h > @@ -551,5 +551,7 @@ const char *cper_mem_err_unpack(struct trace_seq *, > struct cper_mem_err_compact *); > void cper_print_proc_arm(const char *pfx, > const struct cper_sec_proc_arm *proc); > +void cper_print_proc_ia(const char *pfx, > + const struct cper_sec_proc_ia *proc); > > #endif > -- > 2.14.1 >