From patchwork Mon May 15 21:27:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Baicar X-Patchwork-Id: 9728103 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 C29C760231 for ; Mon, 15 May 2017 21:45:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D0B34289BC for ; Mon, 15 May 2017 21:45:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C3E86289C2; Mon, 15 May 2017 21:45:12 +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=unavailable 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 46D91289BC for ; Mon, 15 May 2017 21:45:12 +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=2L0GqG1ztbSEEk08iBCNgp9gevIKxaPsx4olsv7uZzQ=; b=WJHVaYbHEJUvVtvUylnoXBfVWz lmBvyfA3CpP6QcRQ2d1QnKo2xT/B83brpMe/YIBkvnivd5by2BKSghusdvVcew+dyoJQUmW0WEccc 2+x/fqKhzpRE7qJSOKCA4P2p92KqLdDUHYVbBEO9fIpyeBL6hmbHAbR42/ysufdh4Zt55mCBpbALC cpgGZN/ggDZ4E2wr34xwLblPaRGt3dY2GRLZx6x0wSK5nHtbGgz1n1p1E4WRGb0DcHYkCuzU76EW2 CCS3GAATrW07RkMstmKFxlTPy59SUJdfNY/DM/34Cvfir31zzau8ksk0l2hWy+OuRpGgKWYlzNTD1 KrIM6L4g==; 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 1dANnh-0007t2-VA; Mon, 15 May 2017 21:45:09 +0000 Received: from casper.infradead.org ([2001:770:15f::2]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dANnf-0006lW-IE for linux-arm-kernel@bombadil.infradead.org; Mon, 15 May 2017 21:45:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=ns4pULwP4TsUDFqNZoJaKxfL2ze94cHJWUzMDmOH9Uo=; b=mX90IgTkfZ9moDo390qA9qJQu iFPkNHoOovDm0yZ3/E9oxlqpdcHO/rAmm1bPUdJdodj6wOzfYAo8vSnJDbAKIjmpdm4pMipy73py0 5FDQJReCUc/JKUeVbLVvdC+DSe3Q5DJPVywH4QHGUy1SGU9G8zJ2E9Hi7HdyA9lUQULqcctjDJE/j FqCK876WmnII/8OwrskL/y3Rnc8nTWY5NgXazKE9iJsu7JC3PsXpsgoMI+DNEhuRTa5xgSjeDOeMw CeaDZw9L5ydte9fGksPuT8P78Vnx0rNojA7bE6u7TBKU5oUyP6ZQ+dzWFn8sYDzUDH9v2MSSTfNXv dIWPxp35Q==; Received: from smtp.codeaurora.org ([198.145.29.96]) by casper.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dANYM-0001g3-8j for linux-arm-kernel@lists.infradead.org; Mon, 15 May 2017 21:29:21 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 608EC60C6C; Mon, 15 May 2017 21:28:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1494883736; bh=REr1fFlBINw78iVZNLLc2RV6NeFrT/o1wuOMCQarXNU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oSTd5ut1BivvwwfOvlFqHqAQJiIeppXjrSeLQAz4WaXDlorjcVNpmGQ83xRgStNlW VRAwcYVWXvSEePL1Tiu8pt6ntIZx2amRlN1ChSnEj2th+KZ+oS42abzgK3EE9liTAW T/155pznw847QwlvcwHHtX9p6LYCMRvLOprFTVvM= 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 B868060DE9; Mon, 15 May 2017 21:28:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1494883727; bh=REr1fFlBINw78iVZNLLc2RV6NeFrT/o1wuOMCQarXNU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SJRSjki+YiKt/W2uxAI6KBfJwNrlvZCjGZbWEzsSsFQbfNwrO4pxraIKr5lb8zcXe 2HithbppFXLhua9fE6ASk2/Bp5EzGVjC+cCSoVGRp+VR2BupMblI+QNA4rZGYOhTYs pqb6TxHH53w5YAwP0VFSraDZyK3+UvFYib44W7ro= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org B868060DE9 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, 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, bp@alien8.de, rafael@kernel.org, tony.luck@intel.com, gengdongjiu@huawei.com, xiexiuqi@huawei.com Subject: [PATCH V16 09/11] ras: acpi / apei: generate trace event for unrecognized CPER section Date: Mon, 15 May 2017 15:27:58 -0600 Message-Id: <1494883680-25551-10-git-send-email-tbaicar@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1494883680-25551-1-git-send-email-tbaicar@codeaurora.org> References: <1494883680-25551-1-git-send-email-tbaicar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170515_222918_640479_68DD4F00 X-CRM114-Status: GOOD ( 21.79 ) 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 The UEFI spec includes non-standard section type support in the 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 any section type that the kernel knows how to parse, a trace event is not generated. Generate a trace event which contains the raw error data for non-standard section type error records. Signed-off-by: Tyler Baicar CC: Jonathan (Zhixiong) Zhang Tested-by: Shiju Jose --- drivers/acpi/apei/ghes.c | 27 +++++++++++++++++++++++---- drivers/ras/ras.c | 9 +++++++++ include/linux/ras.h | 12 ++++++++++++ include/ras/ras_event.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ include/uapi/linux/uuid.h | 6 ++++-- 5 files changed, 93 insertions(+), 6 deletions(-) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 1a9240b..1106722 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -45,11 +45,14 @@ #include #include #include +#include +#include #include #include #include #include +#include #include "apei-internal.h" @@ -460,12 +463,22 @@ 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, - CPER_SEC_PLATFORM_MEM)) { + 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 = acpi_hest_get_payload(gdata); ghes_edac_report_mem_error(ghes, sev, mem_err); @@ -474,8 +487,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, - CPER_SEC_PCIE)) { + else if (!uuid_le_cmp(sec_type, CPER_SEC_PCIE)) { struct cper_sec_pcie *pcie_err = acpi_hest_get_payload(gdata); if (sev == GHES_SEV_RECOVERABLE && @@ -506,6 +518,13 @@ static void ghes_do_proc(struct ghes *ghes, } #endif + else { + void *err = acpi_hest_get_payload(gdata); + + call_non_standard_trace_event(&sec_type, fru_id, + fru_text, sec_sev, err, + gdata->error_data_length); + } } } diff --git a/drivers/ras/ras.c b/drivers/ras/ras.c index b67dd36..57363be 100644 --- a/drivers/ras/ras.c +++ b/drivers/ras/ras.c @@ -7,11 +7,19 @@ #include #include +#include #define CREATE_TRACE_POINTS #define TRACE_INCLUDE_PATH ../../include/ras #include +void call_non_standard_trace_event(const uuid_le *sec_type, + const uuid_le *fru_id, const char *fru_text, const u8 sev, + const u8 *err, const u32 len) +{ + trace_non_standard_event(sec_type, fru_id, fru_text, sev, err, len); +} + static int __init ras_init(void) { int rc = 0; @@ -27,3 +35,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(non_standard_event); diff --git a/include/linux/ras.h b/include/linux/ras.h index 2aceeaf..7d397a1 100644 --- a/include/linux/ras.h +++ b/include/linux/ras.h @@ -1,6 +1,8 @@ #ifndef __RAS_H__ #define __RAS_H__ +#include + #ifdef CONFIG_DEBUG_FS int ras_userspace_consumers(void); void ras_debugfs_init(void); @@ -11,4 +13,14 @@ static inline int ras_add_daemon_trace(void) { return 0; } #endif +#ifdef CONFIG_RAS +void call_non_standard_trace_event(const uuid_le *sec_type, + const uuid_le *fru_id, const char *fru_text, const u8 sev, + const u8 *err, const u32 len); +#else +static void call_non_standard_trace_event(const uuid_le *sec_type, + const uuid_le *fru_id, const char *fru_text, const u8 sev, + const u8 *err, const u32 len) { return; } +#endif + #endif diff --git a/include/ras/ras_event.h b/include/ras/ras_event.h index 1791a12..4f79ba9 100644 --- a/include/ras/ras_event.h +++ b/include/ras/ras_event.h @@ -162,6 +162,51 @@ ); /* + * Non-Standard 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(non_standard_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, UUID_SIZE) + __array(char, fru_id, UUID_SIZE) + __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, UUID_SIZE); + memcpy(__entry->fru_id, fru_id, UUID_SIZE); + __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 diff --git a/include/uapi/linux/uuid.h b/include/uapi/linux/uuid.h index 3738e5f..c477464 100644 --- a/include/uapi/linux/uuid.h +++ b/include/uapi/linux/uuid.h @@ -20,12 +20,14 @@ #include #include +#define UUID_SIZE 16 + typedef struct { - __u8 b[16]; + __u8 b[UUID_SIZE]; } uuid_le; typedef struct { - __u8 b[16]; + __u8 b[UUID_SIZE]; } uuid_be; #define UUID_LE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \