From patchwork Fri May 12 09:41:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13238958 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 531EEC7EE24 for ; Fri, 12 May 2023 09:43:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239803AbjELJnZ (ORCPT ); Fri, 12 May 2023 05:43:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240639AbjELJmr (ORCPT ); Fri, 12 May 2023 05:42:47 -0400 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9C95D12481 for ; Fri, 12 May 2023 02:42:03 -0700 (PDT) Received: from lhrpeml500006.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4QHkJT0QMRz67l04; Fri, 12 May 2023 17:40:09 +0800 (CST) Received: from SecurePC30232.china.huawei.com (10.122.247.234) by lhrpeml500006.china.huawei.com (7.191.161.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 12 May 2023 10:41:50 +0100 From: To: , CC: , , , , Subject: [PATCH 1/4] rasdaemon: fix return value type issue of read/write function from unistd.h Date: Fri, 12 May 2023 17:41:26 +0800 Message-ID: <20230512094129.1468-2-shiju.jose@huawei.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20230512094129.1468-1-shiju.jose@huawei.com> References: <20230512094129.1468-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.122.247.234] X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To lhrpeml500006.china.huawei.com (7.191.161.198) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-edac@vger.kernel.org From: Xiaofei Tan The return value type of read/write function from unistd.h is ssize_t. It's signed normally, and return -1 on error. Fix incorrect use in the function read_ras_event_all_cpus(). BTW, make setting buffer_percent as a separate function. Fixes: 94750bcf9309 ("rasdaemon: Fix poll() on per_cpu trace_pipe_raw blocks indefinitely") Signed-off-by: Xiaofei Tan Signed-off-by: Shiju Jose --- ras-events.c | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/ras-events.c b/ras-events.c index 2662467..d041828 100644 --- a/ras-events.c +++ b/ras-events.c @@ -368,10 +368,37 @@ static int get_num_cpus(struct ras_events *ras) #endif } +static int set_buffer_percent(struct ras_events *ras, int percent) +{ + char buf[16]; + ssize_t size; + int res = 0; + int fd; + + fd = open_trace(ras, "buffer_percent", O_WRONLY); + if (fd >= 0) { + /* For the backward compatibility to the old kernels, do not return + * if fail to set the buffer_percent. + */ + snprintf(buf, sizeof(buf), "%d", percent); + size = write(fd, buf, strlen(buf)); + if (size <= 0) { + log(TERM, LOG_WARNING, "can't write to buffer_percent\n"); + res = -1; + } + close(fd); + } else { + log(TERM, LOG_WARNING, "Can't open buffer_percent\n"); + res = -1; + } + + return res; +} + static int read_ras_event_all_cpus(struct pthread_data *pdata, unsigned n_cpus) { - unsigned size; + ssize_t size; unsigned long long time_stamp; void *data; int ready, i, count_nready; @@ -383,8 +410,6 @@ static int read_ras_event_all_cpus(struct pthread_data *pdata, int warnonce[n_cpus]; char pipe_raw[PATH_MAX]; int legacy_kernel = 0; - int fd; - char buf[16]; #if 0 int need_sleep = 0; #endif @@ -411,18 +436,8 @@ static int read_ras_event_all_cpus(struct pthread_data *pdata, * Set buffer_percent to 0 so that poll() will return immediately * when the trace data is available in the ras per_cpu trace pipe_raw */ - fd = open_trace(pdata[0].ras, "buffer_percent", O_WRONLY); - if (fd >= 0) { - /* For the backward compatibility to the old kernels, do not return - * if fail to set the buffer_percent. - */ - snprintf(buf, sizeof(buf), "0"); - size = write(fd, buf, strlen(buf)); - if (size <= 0) - log(TERM, LOG_WARNING, "can't write to buffer_percent\n"); - close(fd); - } else - log(TERM, LOG_WARNING, "Can't open buffer_percent\n"); + if (set_buffer_percent(pdata[0].ras, 0)) + log(TERM, LOG_WARNING, "Set buffer_percent failed\n"); for (i = 0; i < (n_cpus + 1); i++) fds[i].fd = -1; From patchwork Fri May 12 09:41:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13238961 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4EE48C7EE2A for ; Fri, 12 May 2023 09:43:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240307AbjELJn2 (ORCPT ); Fri, 12 May 2023 05:43:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240642AbjELJmr (ORCPT ); Fri, 12 May 2023 05:42:47 -0400 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEB44124BA for ; Fri, 12 May 2023 02:42:03 -0700 (PDT) Received: from lhrpeml500006.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4QHkJT1CsNz67jfb; Fri, 12 May 2023 17:40:09 +0800 (CST) Received: from SecurePC30232.china.huawei.com (10.122.247.234) by lhrpeml500006.china.huawei.com (7.191.161.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 12 May 2023 10:41:50 +0100 From: To: , CC: , , , , Subject: [PATCH 2/4] rasdaemon: fix issue of signed and unsigned integer comparison Date: Fri, 12 May 2023 17:41:27 +0800 Message-ID: <20230512094129.1468-3-shiju.jose@huawei.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20230512094129.1468-1-shiju.jose@huawei.com> References: <20230512094129.1468-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.122.247.234] X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To lhrpeml500006.china.huawei.com (7.191.161.198) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-edac@vger.kernel.org From: Xiaofei Tan The return value of ARRAY_SIZE() is unsigned integer. It isn't right to compare it with a signed integer. This patch fix them. Signed-off-by: Xiaofei Tan Signed-off-by: Shiju Jose --- non-standard-hisi_hip08.c | 2 +- non-standard-hisilicon.c | 4 ++-- ras-diskerror-handler.c | 2 +- ras-memory-failure-handler.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/non-standard-hisi_hip08.c b/non-standard-hisi_hip08.c index 4ef47ea..61f12eb 100644 --- a/non-standard-hisi_hip08.c +++ b/non-standard-hisi_hip08.c @@ -1029,7 +1029,7 @@ static struct ras_ns_ev_decoder hip08_ns_ev_decoder[] = { static void __attribute__((constructor)) hip08_init(void) { - int i; + unsigned int i; for (i = 0; i < ARRAY_SIZE(hip08_ns_ev_decoder); i++) register_ns_ev_decoder(&hip08_ns_ev_decoder[i]); diff --git a/non-standard-hisilicon.c b/non-standard-hisilicon.c index 2b00ed6..9873919 100644 --- a/non-standard-hisilicon.c +++ b/non-standard-hisilicon.c @@ -366,7 +366,7 @@ static int decode_hisi_common_section(struct ras_events *ras, trace_seq_printf(s, "%s\n", hevent.error_msg); if (err->val_bits & BIT(HISI_COMMON_VALID_REG_ARRAY_SIZE) && err->reg_array_size > 0) { - int i; + unsigned int i; trace_seq_printf(s, "Register Dump:\n"); for (i = 0; i < err->reg_array_size / sizeof(uint32_t); i++) { @@ -398,7 +398,7 @@ static struct ras_ns_ev_decoder hisi_section_ns_ev_decoder[] = { static void __attribute__((constructor)) hisi_ns_init(void) { - int i; + unsigned int i; for (i = 0; i < ARRAY_SIZE(hisi_section_ns_ev_decoder); i++) register_ns_ev_decoder(&hisi_section_ns_ev_decoder[i]); diff --git a/ras-diskerror-handler.c b/ras-diskerror-handler.c index 38d0a36..638cb4d 100644 --- a/ras-diskerror-handler.c +++ b/ras-diskerror-handler.c @@ -52,7 +52,7 @@ static const struct { static const char *get_blk_error(int err) { - int i; + unsigned int i; for (i = 0; i < ARRAY_SIZE(blk_errors); i++) if (blk_errors[i].error == err) diff --git a/ras-memory-failure-handler.c b/ras-memory-failure-handler.c index 72c65de..85a8633 100644 --- a/ras-memory-failure-handler.c +++ b/ras-memory-failure-handler.c @@ -99,7 +99,7 @@ static const struct { static const char *get_page_type(int page_type) { - int i; + unsigned int i; for (i = 0; i < ARRAY_SIZE(mf_page_type); i++) if (mf_page_type[i].type == page_type) @@ -110,7 +110,7 @@ static const char *get_page_type(int page_type) static const char *get_action_result(int result) { - int i; + unsigned int i; for (i = 0; i < ARRAY_SIZE(mf_action_result); i++) if (mf_action_result[i].result == result) From patchwork Fri May 12 09:41:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13238960 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D37A5C7EE25 for ; Fri, 12 May 2023 09:43:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240285AbjELJn1 (ORCPT ); Fri, 12 May 2023 05:43:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39736 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240643AbjELJmr (ORCPT ); Fri, 12 May 2023 05:42:47 -0400 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53257124BE for ; Fri, 12 May 2023 02:42:04 -0700 (PDT) Received: from lhrpeml500006.china.huawei.com (unknown [172.18.147.201]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4QHkJT6JM6z67nQw; Fri, 12 May 2023 17:40:09 +0800 (CST) Received: from SecurePC30232.china.huawei.com (10.122.247.234) by lhrpeml500006.china.huawei.com (7.191.161.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 12 May 2023 10:41:50 +0100 From: To: , CC: , , , , Subject: [PATCH 3/4] rasdaemon: remove redundant header file and do some cleaup Date: Fri, 12 May 2023 17:41:28 +0800 Message-ID: <20230512094129.1468-4-shiju.jose@huawei.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20230512094129.1468-1-shiju.jose@huawei.com> References: <20230512094129.1468-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.122.247.234] X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To lhrpeml500006.china.huawei.com (7.191.161.198) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-edac@vger.kernel.org From: Xiaofei Tan 1.Remove redundant header file and adjust the header files sequence. 2.Use right character format for printf. Signed-off-by: Xiaofei Tan Signed-off-by: Shiju Jose --- non-standard-hisilicon.c | 4 ++-- ras-memory-failure-handler.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/non-standard-hisilicon.c b/non-standard-hisilicon.c index 9873919..721821e 100644 --- a/non-standard-hisilicon.c +++ b/non-standard-hisilicon.c @@ -370,9 +370,9 @@ static int decode_hisi_common_section(struct ras_events *ras, trace_seq_printf(s, "Register Dump:\n"); for (i = 0; i < err->reg_array_size / sizeof(uint32_t); i++) { - trace_seq_printf(s, "reg%02d=0x%08x\n", i, + trace_seq_printf(s, "reg%02u=0x%08x\n", i, err->reg_array[i]); - HISI_SNPRINTF(hevent.reg_msg, "reg%02d=0x%08x", + HISI_SNPRINTF(hevent.reg_msg, "reg%02u=0x%08x", i, err->reg_array[i]); } } diff --git a/ras-memory-failure-handler.c b/ras-memory-failure-handler.c index 85a8633..c74541f 100644 --- a/ras-memory-failure-handler.c +++ b/ras-memory-failure-handler.c @@ -15,11 +15,10 @@ #include #include #include -#include -#include "ras-memory-failure-handler.h" #include "ras-record.h" #include "ras-logger.h" #include "ras-report.h" +#include "ras-memory-failure-handler.h" /* Memory failure - various types of pages */ enum mf_action_page_type { From patchwork Fri May 12 09:41:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13238962 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8AB3EC77B7F for ; Fri, 12 May 2023 09:43:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240324AbjELJn3 (ORCPT ); Fri, 12 May 2023 05:43:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240652AbjELJmu (ORCPT ); Fri, 12 May 2023 05:42:50 -0400 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54FF9124BF for ; Fri, 12 May 2023 02:42:04 -0700 (PDT) Received: from lhrpeml500006.china.huawei.com (unknown [172.18.147.201]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4QHkJT72RDz67qpK; Fri, 12 May 2023 17:40:09 +0800 (CST) Received: from SecurePC30232.china.huawei.com (10.122.247.234) by lhrpeml500006.china.huawei.com (7.191.161.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 12 May 2023 10:41:51 +0100 From: To: , CC: , , , , Subject: [PATCH 4/4] rasdaemon: ras-mc-ctl: Add handling of run-time errors reported when querying HiSilicon KunPeng9xx OEM errors Date: Fri, 12 May 2023 17:41:29 +0800 Message-ID: <20230512094129.1468-5-shiju.jose@huawei.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20230512094129.1468-1-shiju.jose@huawei.com> References: <20230512094129.1468-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.122.247.234] X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To lhrpeml500006.china.huawei.com (7.191.161.198) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-edac@vger.kernel.org From: Shiju Jose Add try-catch for handling the run-time errors reported when querying the HiSilicon KunPeng9xx OEM errors. Reason: For example, when an error table is not present in the SQLite DB, then the DBI report error "no such table" and the ras-mc-ctl would exit without query and log the other error types. In the rasdaemon, for the vendor specific errors, the error table in the SQLite database would be created, if not already done, when the corresponding error is reported for the first time. Reported-by: Lei Feng Signed-off-by: Shiju Jose --- util/ras-mc-ctl.in | 421 ++++++++++++++++++++++++++------------------- 1 file changed, 245 insertions(+), 176 deletions(-) diff --git a/util/ras-mc-ctl.in b/util/ras-mc-ctl.in index dc326d3..a24eb49 100755 --- a/util/ras-mc-ctl.in +++ b/util/ras-mc-ctl.in @@ -34,6 +34,7 @@ use File::Basename; use File::Find; use Getopt::Long; use POSIX; +use Try::Tiny; my $dbname = "@RASSTATEDIR@/@RAS_DB_FNAME@"; my $prefix = "@prefix@"; @@ -1562,81 +1563,115 @@ sub vendor_errors_summary } my $dbh = DBI->connect("dbi:SQLite:dbname=$dbname", "", "", {}); + # Disable the DBI automatic error log + $dbh->{PrintError} = 0; # HiSilicon KunPeng9xx errors if ($platform_id eq HISILICON_KUNPENG_9XX) { - $found_platform = 1; - $query = "select err_severity, module_id, count(*) from hip08_oem_type1_event_v2$conf{opt}{since} group by err_severity, module_id"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($err_severity, $module_id, $count)); - $out = ""; - $err_sev = ""; - while($query_handle->fetch()) { - if ($err_severity ne $err_sev) { - $out .= "$err_severity errors:\n"; - $err_sev = $err_severity; + $found_platform = 1; + try { + $query = "select err_severity, module_id, count(*) from hip08_oem_type1_event_v2$conf{opt}{since} group by err_severity, module_id"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($err_severity, $module_id, $count)); + $out = ""; + $err_sev = ""; + while($query_handle->fetch()) { + if ($err_severity ne $err_sev) { + $out .= "$err_severity errors:\n"; + $err_sev = $err_severity; + } + $out .= "\t$module_id: $count\n"; } - $out .= "\t$module_id: $count\n"; - } - if ($out ne "") { - print "HiSilicon KunPeng9xx OEM type1 error events summary:\n$out\n"; - } - $query_handle->finish; - - $query = "select err_severity, module_id, count(*) from hip08_oem_type2_event_v2$conf{opt}{since} group by err_severity, module_id"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($err_severity, $module_id, $count)); - $out = ""; - $err_sev = ""; - while($query_handle->fetch()) { - if ($err_severity ne $err_sev) { - $out .= "$err_severity errors:\n"; - $err_sev = $err_severity; + if ($out ne "") { + print "HiSilicon KunPeng9xx OEM type1 error events summary:\n$out\n"; } - $out .= "\t$module_id: $count\n"; - } - if ($out ne "") { - print "HiSilicon KunPeng9xx OEM type2 error events summary:\n$out\n"; - } - $query_handle->finish; - - $query = "select err_severity, sub_module_id, count(*) from hip08_pcie_local_event_v2$conf{opt}{since} group by err_severity, sub_module_id"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($err_severity, $sub_module_id, $count)); - $out = ""; - $err_sev = ""; - while($query_handle->fetch()) { - if ($err_severity ne $err_sev) { - $out .= "$err_severity errors:\n"; - $err_sev = $err_severity; + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx OEM type1 errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx OEM type1 errors\n\n"; } - $out .= "\t$sub_module_id: $count\n"; - } - if ($out ne "") { - print "HiSilicon KunPeng9xx PCIe controller error events summary:\n$out\n"; - } - $query_handle->finish; - - $query = "select err_severity, module_id, count(*) from hisi_common_section_v2$conf{opt}{since} group by err_severity, module_id"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($err_severity, $module_id, $count)); - $out = ""; - $err_sev = ""; - while($query_handle->fetch()) { - if ($err_severity ne $err_sev) { - $out .= "$err_severity errors:\n"; - $err_sev = $err_severity; + }; + + try { + $query = "select err_severity, module_id, count(*) from hip08_oem_type2_event_v2$conf{opt}{since} group by err_severity, module_id"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($err_severity, $module_id, $count)); + $out = ""; + $err_sev = ""; + while($query_handle->fetch()) { + if ($err_severity ne $err_sev) { + $out .= "$err_severity errors:\n"; + $err_sev = $err_severity; + } + $out .= "\t$module_id: $count\n"; } - $out .= "\t$module_id: $count\n"; - } - if ($out ne "") { - print "HiSilicon KunPeng9xx common error events summary:\n$out\n"; - } - $query_handle->finish; + if ($out ne "") { + print "HiSilicon KunPeng9xx OEM type2 error events summary:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx OEM type2 errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx OEM type2 errors\n\n"; + } + }; + + try { + $query = "select err_severity, sub_module_id, count(*) from hip08_pcie_local_event_v2$conf{opt}{since} group by err_severity, sub_module_id"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($err_severity, $sub_module_id, $count)); + $out = ""; + $err_sev = ""; + while($query_handle->fetch()) { + if ($err_severity ne $err_sev) { + $out .= "$err_severity errors:\n"; + $err_sev = $err_severity; + } + $out .= "\t$sub_module_id: $count\n"; + } + if ($out ne "") { + print "HiSilicon KunPeng9xx PCIe controller error events summary:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx PCIe controller errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx PCIe controller errors\n\n"; + } + }; + + try { + $query = "select err_severity, module_id, count(*) from hisi_common_section_v2$conf{opt}{since} group by err_severity, module_id"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($err_severity, $module_id, $count)); + $out = ""; + $err_sev = ""; + while($query_handle->fetch()) { + if ($err_severity ne $err_sev) { + $out .= "$err_severity errors:\n"; + $err_sev = $err_severity; + } + $out .= "\t$module_id: $count\n"; + } + if ($out ne "") { + print "HiSilicon KunPeng9xx common error events summary:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx common errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx common errors\n\n"; + } + }; } if ($platform_id && !($found_platform)) { @@ -1670,117 +1705,151 @@ sub vendor_errors } my $dbh = DBI->connect("dbi:SQLite:dbname=$dbname", "", "", {}); + # Disable the DBI automatic error log + $dbh->{PrintError} = 0; # HiSilicon KunPeng9xx errors if ($platform_id eq HISILICON_KUNPENG_9XX) { - $found_platform = 1; - $query = "select id, timestamp, version, soc_id, socket_id, nimbus_id, module_id, sub_module_id, err_severity, regs_dump from hip08_oem_type1_event_v2$conf{opt}{since} order by id, module_id, err_severity"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $nimbus_id, $module_id, $sub_module_id, $err_severity, $regs)); - $out = ""; - while($query_handle->fetch()) { - if ($module eq 0 || ($module_id && uc($module) eq uc($module_id))) { - $out .= "$id. $timestamp Error Info: "; - $out .= "version=$version, "; - $out .= "soc_id=$soc_id, " if ($soc_id); - $out .= "socket_id=$socket_id, " if ($socket_id); - $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); - $out .= "module_id=$module_id, " if ($module_id); - $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); - $out .= "err_severity=$err_severity, " if ($err_severity); - $out .= "Error Registers: $regs " if ($regs); - $out .= "\n\n"; - $found_module = 1; - } - } - if ($out ne "") { - print "HiSilicon KunPeng9xx OEM type1 error events:\n$out\n"; - } - $query_handle->finish; - - $query = "select id, timestamp, version, soc_id, socket_id, nimbus_id, module_id, sub_module_id, err_severity, regs_dump from hip08_oem_type2_event_v2$conf{opt}{since} order by id, module_id, err_severity"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $nimbus_id, $module_id, $sub_module_id, $err_severity, $regs)); - $out = ""; - while($query_handle->fetch()) { - if ($module eq 0 || ($module_id && uc($module) eq uc($module_id))) { - $out .= "$id. $timestamp Error Info: "; - $out .= "version=$version, "; - $out .= "soc_id=$soc_id, " if ($soc_id); - $out .= "socket_id=$socket_id, " if ($socket_id); - $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); - $out .= "module_id=$module_id, " if ($module_id); - $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); - $out .= "err_severity=$err_severity, " if ($err_severity); - $out .= "Error Registers: $regs " if ($regs); - $out .= "\n\n"; - $found_module = 1; - } - } - if ($out ne "") { - print "HiSilicon KunPeng9xx OEM type2 error events:\n$out\n"; - } - $query_handle->finish; - - $query = "select id, timestamp, version, soc_id, socket_id, nimbus_id, sub_module_id, core_id, port_id, err_severity, err_type, regs_dump from hip08_pcie_local_event_v2$conf{opt}{since} order by id, sub_module_id, err_severity"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $nimbus_id, $sub_module_id, $core_id, $port_id, $err_severity, $err_type, $regs)); - $out = ""; - while($query_handle->fetch()) { - if ($module eq 0 || ($sub_module_id && uc($module) eq uc($sub_module_id))) { - $out .= "$id. $timestamp Error Info: "; - $out .= "version=$version, "; - $out .= "soc_id=$soc_id, " if ($soc_id); - $out .= "socket_id=$socket_id, " if ($socket_id); - $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); - $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); - $out .= "core_id=$core_id, " if ($core_id); - $out .= "port_id=$port_id, " if ($port_id); - $out .= "err_severity=$err_severity, " if ($err_severity); - $out .= "err_type=$err_type, " if ($err_type); - $out .= "Error Registers: $regs " if ($regs); - $out .= "\n\n"; - $found_module = 1; - } - } - if ($out ne "") { - print "HiSilicon KunPeng9xx PCIe controller error events:\n$out\n"; - } - $query_handle->finish; - - $query = "select id, timestamp, version, soc_id, socket_id, totem_id, nimbus_id, sub_system_id, module_id, sub_module_id, core_id, port_id, err_type, pcie_info, err_severity, regs_dump from hisi_common_section_v2$conf{opt}{since} order by id, module_id, err_severity"; - $query_handle = $dbh->prepare($query); - $query_handle->execute(); - $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $totem_id, $nimbus_id, $sub_system_id, $module_id, $sub_module_id, $core_id, $port_id, $err_type, $pcie_info, $err_severity, $regs)); - $out = ""; - while($query_handle->fetch()) { - if ($module eq 0 || ($module_id && uc($module) eq uc($module_id))) { - $out .= "$id. $timestamp Error Info: "; - $out .= "version=$version, "; - $out .= "soc_id=$soc_id, " if ($soc_id); - $out .= "socket_id=$socket_id, " if ($socket_id); - $out .= "totem_id=$totem_id, " if ($totem_id); - $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); - $out .= "sub_system_id=$sub_system_id, " if ($sub_system_id); - $out .= "module_id=$module_id, " if ($module_id); - $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); - $out .= "core_id=$core_id, " if ($core_id); - $out .= "port_id=$port_id, " if ($port_id); - $out .= "err_type=$err_type, " if ($err_type); - $out .= "pcie_info=$pcie_info, " if ($pcie_info); - $out .= "err_severity=$err_severity, " if ($err_severity); - $out .= "Error Registers: $regs" if ($regs); - $out .= "\n\n"; - $found_module = 1; - } - } - if ($out ne "") { - print "HiSilicon KunPeng9xx common error events:\n$out\n"; - } - $query_handle->finish; + $found_platform = 1; + try { + $query = "select id, timestamp, version, soc_id, socket_id, nimbus_id, module_id, sub_module_id, err_severity, regs_dump from hip08_oem_type1_event_v2$conf{opt}{since} order by id, module_id, err_severity"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $nimbus_id, $module_id, $sub_module_id, $err_severity, $regs)); + $out = ""; + while($query_handle->fetch()) { + if ($module eq 0 || ($module_id && uc($module) eq uc($module_id))) { + $out .= "$id. $timestamp Error Info: "; + $out .= "version=$version, "; + $out .= "soc_id=$soc_id, " if ($soc_id); + $out .= "socket_id=$socket_id, " if ($socket_id); + $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); + $out .= "module_id=$module_id, " if ($module_id); + $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); + $out .= "err_severity=$err_severity, " if ($err_severity); + $out .= "Error Registers: $regs " if ($regs); + $out .= "\n\n"; + $found_module = 1; + } + } + if ($out ne "") { + print "HiSilicon KunPeng9xx OEM type1 error events:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx OEM type1 errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx OEM type1 errors\n\n"; + } + }; + + try { + $query = "select id, timestamp, version, soc_id, socket_id, nimbus_id, module_id, sub_module_id, err_severity, regs_dump from hip08_oem_type2_event_v2$conf{opt}{since} order by id, module_id, err_severity"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $nimbus_id, $module_id, $sub_module_id, $err_severity, $regs)); + $out = ""; + while($query_handle->fetch()) { + if ($module eq 0 || ($module_id && uc($module) eq uc($module_id))) { + $out .= "$id. $timestamp Error Info: "; + $out .= "version=$version, "; + $out .= "soc_id=$soc_id, " if ($soc_id); + $out .= "socket_id=$socket_id, " if ($socket_id); + $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); + $out .= "module_id=$module_id, " if ($module_id); + $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); + $out .= "err_severity=$err_severity, " if ($err_severity); + $out .= "Error Registers: $regs " if ($regs); + $out .= "\n\n"; + $found_module = 1; + } + } + if ($out ne "") { + print "HiSilicon KunPeng9xx OEM type2 error events:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx OEM type2 errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx OEM type2 errors\n\n"; + } + }; + + try { + $query = "select id, timestamp, version, soc_id, socket_id, nimbus_id, sub_module_id, core_id, port_id, err_severity, err_type, regs_dump from hip08_pcie_local_event_v2$conf{opt}{since} order by id, sub_module_id, err_severity"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $nimbus_id, $sub_module_id, $core_id, $port_id, $err_severity, $err_type, $regs)); + $out = ""; + while($query_handle->fetch()) { + if ($module eq 0 || ($sub_module_id && uc($module) eq uc($sub_module_id))) { + $out .= "$id. $timestamp Error Info: "; + $out .= "version=$version, "; + $out .= "soc_id=$soc_id, " if ($soc_id); + $out .= "socket_id=$socket_id, " if ($socket_id); + $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); + $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); + $out .= "core_id=$core_id, " if ($core_id); + $out .= "port_id=$port_id, " if ($port_id); + $out .= "err_severity=$err_severity, " if ($err_severity); + $out .= "err_type=$err_type, " if ($err_type); + $out .= "Error Registers: $regs " if ($regs); + $out .= "\n\n"; + $found_module = 1; + } + } + if ($out ne "") { + print "HiSilicon KunPeng9xx PCIe controller error events:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx PCIe controller errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx PCIe controller errors\n\n"; + } + }; + + try { + $query = "select id, timestamp, version, soc_id, socket_id, totem_id, nimbus_id, sub_system_id, module_id, sub_module_id, core_id, port_id, err_type, pcie_info, err_severity, regs_dump from hisi_common_section_v2$conf{opt}{since} order by id, module_id, err_severity"; + $query_handle = $dbh->prepare($query); + $query_handle->execute(); + $query_handle->bind_columns(\($id, $timestamp, $version, $soc_id, $socket_id, $totem_id, $nimbus_id, $sub_system_id, $module_id, $sub_module_id, $core_id, $port_id, $err_type, $pcie_info, $err_severity, $regs)); + $out = ""; + while($query_handle->fetch()) { + if ($module eq 0 || ($module_id && uc($module) eq uc($module_id))) { + $out .= "$id. $timestamp Error Info: "; + $out .= "version=$version, "; + $out .= "soc_id=$soc_id, " if ($soc_id); + $out .= "socket_id=$socket_id, " if ($socket_id); + $out .= "totem_id=$totem_id, " if ($totem_id); + $out .= "nimbus_id=$nimbus_id, " if ($nimbus_id); + $out .= "sub_system_id=$sub_system_id, " if ($sub_system_id); + $out .= "module_id=$module_id, " if ($module_id); + $out .= "sub_module_id=$sub_module_id, " if ($sub_module_id); + $out .= "core_id=$core_id, " if ($core_id); + $out .= "port_id=$port_id, " if ($port_id); + $out .= "err_type=$err_type, " if ($err_type); + $out .= "pcie_info=$pcie_info, " if ($pcie_info); + $out .= "err_severity=$err_severity, " if ($err_severity); + $out .= "Error Registers: $regs" if ($regs); + $out .= "\n\n"; + $found_module = 1; + } + } + if ($out ne "") { + print "HiSilicon KunPeng9xx common error events:\n$out\n"; + } + $query_handle->finish; + } catch { + if ($DBI::errstr =~ "no such table") { + print "No HiSilicon KunPeng9xx common errors\n\n"; + } else { + print "Warning: $DBI::errstr when querying HiSilicon KunPeng9xx common errors\n\n"; + } + }; } if ($platform_id && !($found_platform)) {