From patchwork Mon Mar 6 20:45:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Baicar X-Patchwork-Id: 9607629 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 105C66046A for ; Mon, 6 Mar 2017 20:49:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 18543283C9 for ; Mon, 6 Mar 2017 20:49:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0C6AC28428; Mon, 6 Mar 2017 20:49:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 979B4283C9 for ; Mon, 6 Mar 2017 20:49:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=pkiHR24MgHi5Dq2s0Nay5oKEF9JyXYpdkBG/qPC/RRw=; b=GnLyZSojgYPiyN9VLhmmaEUrIx msb2NUiJ5diyN9VsRP6eitIkEAh+XJyaA9tm8zlTV/ydV/qdeAg5weN9CvcLf12vcMZxWvrc7rluE LRKbl/GyHDnTIQjpyrdKqe3PF5TfV9Q/Y1R6RPeF0Q6emuVNgZDAublfxPg4cPXP3u10HiZBZPE3y 5ICHc75Q52CQyxhHMpgbcg5kSMVlUR6TLohQYc2y4k2yNyod54v0wey/k+jpotumJRNUs1Iy4Qr84 DiQH5Urk7OJuHypN2hohtNTE39Mhs7zv+bbDPt+UdnZbtVY4VEycd0y/n9KqTq1WRq9GaPgThDS0h LpyOD/Cw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1ckzZi-000110-5Y; Mon, 06 Mar 2017 20:49:46 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1ckzWv-00070y-8I for linux-arm-kernel@lists.infradead.org; Mon, 06 Mar 2017 20:46:58 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 913BB60E76; Mon, 6 Mar 2017 20:45:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1488833192; bh=/L8LnB7ev2yoKmarUj8MAGOfcU9jLlN91G4ywsFeo0U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aN7H5o90rDaknSQJ8ngOaxHEuIxm+JD0r67sKmHKiy5sAydAMHLPYGX6N7ZL8c8T5 HFUvoALbpwuE5+KgwNGTMCvLsR7XMOVvEV9u6A2szUgYc/qhHEqZ7sW9gCYPb2Eb9n 8wQzRdApbRTIIozeYiuhRFdf1dtPNNDzZtf5FUc4= Received: from tbaicar-lnx.qualcomm.com (unknown [129.46.14.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: tbaicar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 1347F60D71; Mon, 6 Mar 2017 20:45:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1488833148; bh=/L8LnB7ev2yoKmarUj8MAGOfcU9jLlN91G4ywsFeo0U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MPEW5mlDohAuI9Hi12GtR6wOHTBCs4OgDu6M8urO9V73+7GWiGl7rhCu9u2oiVNeq owXPEyBPeESh7n0AxmtW0MGZgibUIPa+g2vSOp9aUqHlnzVXQL7/d/hzXmpI6D8KRv FUHWIVvoUY6NZitf4FkQkICkJynGac1ID3fhJx6s= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 1347F60D71 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=tbaicar@codeaurora.org From: Tyler Baicar To: christoffer.dall@linaro.org, marc.zyngier@arm.com, pbonzini@redhat.com, rkrcmar@redhat.com, linux@armlinux.org.uk, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, lenb@kernel.org, matt@codeblueprint.co.uk, robert.moore@intel.com, lv.zheng@intel.com, nkaje@codeaurora.org, zjzhang@codeaurora.org, mark.rutland@arm.com, james.morse@arm.com, akpm@linux-foundation.org, eun.taik.lee@samsung.com, sandeepa.s.prabhu@gmail.com, labbott@redhat.com, shijie.huang@arm.com, rruigrok@codeaurora.org, paul.gortmaker@windriver.com, tn@semihalf.com, fu.wei@linaro.org, rostedt@goodmis.org, bristot@redhat.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-efi@vger.kernel.org, devel@acpica.org, Suzuki.Poulose@arm.com, punit.agrawal@arm.com, astone@redhat.com, harba@codeaurora.org, hanjun.guo@linaro.org, john.garry@huawei.com, shiju.jose@huawei.com, joe@perches.com Subject: [PATCH V12 08/10] ras: acpi / apei: generate trace event for unrecognized CPER section Date: Mon, 6 Mar 2017 13:45:01 -0700 Message-Id: <1488833103-21082-9-git-send-email-tbaicar@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1488833103-21082-1-git-send-email-tbaicar@codeaurora.org> References: <1488833103-21082-1-git-send-email-tbaicar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170306_124653_415464_449C461B X-CRM114-Status: GOOD ( 15.33 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tyler Baicar MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP UEFI spec allows for non-standard section in Common Platform Error Record. This is defined in section N.2.3 of UEFI version 2.5. Currently if the CPER section's type (UUID) does not match with any section type that the kernel knows how to parse, trace event is not generated for such section. And thus user is not able to know happening of such hardware error, including error record of non-standard section. This commit generates a trace event which contains raw error data for unrecognized CPER section. Signed-off-by: Tyler Baicar CC: Jonathan (Zhixiong) Zhang --- drivers/acpi/apei/ghes.c | 24 ++++++++++++++++++++++-- drivers/ras/ras.c | 1 + include/ras/ras_event.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index d6a3b9f..842c0cc 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -44,11 +44,13 @@ #include #include #include +#include #include #include #include #include +#include #include "apei-internal.h" @@ -453,11 +455,21 @@ static void ghes_do_proc(struct ghes *ghes, { int sev, sec_sev; struct acpi_hest_generic_data *gdata; + uuid_le sec_type; + uuid_le *fru_id = &NULL_UUID_LE; + char *fru_text = ""; sev = ghes_severity(estatus->error_severity); apei_estatus_for_each_section(estatus, gdata) { sec_sev = ghes_severity(gdata->error_severity); - if (!uuid_le_cmp(*(uuid_le *)gdata->section_type, + sec_type = *(uuid_le *)gdata->section_type; + + if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID) + fru_id = (uuid_le *)gdata->fru_id; + if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT) + fru_text = gdata->fru_text; + + if (!uuid_le_cmp(sec_type, CPER_SEC_PLATFORM_MEM)) { struct cper_sec_mem_err *mem_err; @@ -468,7 +480,7 @@ static void ghes_do_proc(struct ghes *ghes, ghes_handle_memory_failure(gdata, sev); } #ifdef CONFIG_ACPI_APEI_PCIEAER - else if (!uuid_le_cmp(*(uuid_le *)gdata->section_type, + else if (!uuid_le_cmp(sec_type, CPER_SEC_PCIE)) { struct cper_sec_pcie *pcie_err; @@ -501,6 +513,14 @@ static void ghes_do_proc(struct ghes *ghes, } #endif +#ifdef CONFIG_RAS + else if (trace_unknown_sec_event_enabled()) { + void *unknown_err = acpi_hest_generic_data_payload(gdata); + trace_unknown_sec_event(&sec_type, + fru_id, fru_text, sec_sev, + unknown_err, gdata->error_data_length); + } +#endif } } diff --git a/drivers/ras/ras.c b/drivers/ras/ras.c index b67dd36..fb2500b 100644 --- a/drivers/ras/ras.c +++ b/drivers/ras/ras.c @@ -27,3 +27,4 @@ static int __init ras_init(void) EXPORT_TRACEPOINT_SYMBOL_GPL(extlog_mem_event); #endif EXPORT_TRACEPOINT_SYMBOL_GPL(mc_event); +EXPORT_TRACEPOINT_SYMBOL_GPL(unknown_sec_event); diff --git a/include/ras/ras_event.h b/include/ras/ras_event.h index 1791a12..5861b6f 100644 --- a/include/ras/ras_event.h +++ b/include/ras/ras_event.h @@ -162,6 +162,51 @@ ); /* + * Unknown Section Report + * + * This event is generated when hardware detected a hardware + * error event, which may be of non-standard section as defined + * in UEFI spec appendix "Common Platform Error Record", or may + * be of sections for which TRACE_EVENT is not defined. + * + */ +TRACE_EVENT(unknown_sec_event, + + TP_PROTO(const uuid_le *sec_type, + const uuid_le *fru_id, + const char *fru_text, + const u8 sev, + const u8 *err, + const u32 len), + + TP_ARGS(sec_type, fru_id, fru_text, sev, err, len), + + TP_STRUCT__entry( + __array(char, sec_type, 16) + __array(char, fru_id, 16) + __string(fru_text, fru_text) + __field(u8, sev) + __field(u32, len) + __dynamic_array(u8, buf, len) + ), + + TP_fast_assign( + memcpy(__entry->sec_type, sec_type, sizeof(uuid_le)); + memcpy(__entry->fru_id, fru_id, sizeof(uuid_le)); + __assign_str(fru_text, fru_text); + __entry->sev = sev; + __entry->len = len; + memcpy(__get_dynamic_array(buf), err, len); + ), + + TP_printk("severity: %d; sec type:%pU; FRU: %pU %s; data len:%d; raw data:%s", + __entry->sev, __entry->sec_type, + __entry->fru_id, __get_str(fru_text), + __entry->len, + __print_hex(__get_dynamic_array(buf), __entry->len)) +); + +/* * PCIe AER Trace event * * These events are generated when hardware detects a corrected or