From patchwork Thu Jan 11 19:28:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 10158363 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 6DFE460170 for ; Thu, 11 Jan 2018 19:28:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5CCA9286A9 for ; Thu, 11 Jan 2018 19:28:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 51765286DA; Thu, 11 Jan 2018 19:28:50 +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=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D2B60286A9 for ; Thu, 11 Jan 2018 19:28:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965602AbeAKT2t (ORCPT ); Thu, 11 Jan 2018 14:28:49 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34458 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965599AbeAKT2s (ORCPT ); Thu, 11 Jan 2018 14:28:48 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6BFA08B108; Thu, 11 Jan 2018 19:28:48 +0000 (UTC) Received: from shalem.localdomain.com (ovpn-116-99.ams2.redhat.com [10.36.116.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id CB56F5C66F; Thu, 11 Jan 2018 19:28:45 +0000 (UTC) From: Hans de Goede To: Len Brown , Robert Moore , Lv Zheng Cc: Hans de Goede , linux-acpi@vger.kernel.org, devel@acpica.org Subject: [PATCH] ACPICA: Log Exceptions and Errors as warning while loading extra tables Date: Thu, 11 Jan 2018 20:28:41 +0100 Message-Id: <20180111192841.7951-2-hdegoede@redhat.com> In-Reply-To: <20180111192841.7951-1-hdegoede@redhat.com> References: <20180111192841.7951-1-hdegoede@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 11 Jan 2018 19:28:48 +0000 (UTC) Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Honor the "Ignore errors while loading tables, get as many as possible" comment in the tbxfload.c code and log any exceptions and errors during loading extra tables as warnings. This is important because many desktop and embedded applicance Linux use-cases have a hard requirement of not showing any (scary) text messages during system bootup, which get broken by errors reported by attempts to load the extra tables, as messaged logged at a KERN_ERR level are always shown even if the quiet kernel cmdline option is used. Ideally all ACPI tables would be free of errors, but in practice that is just not the case and vendors are not always willing / responsive to fixing issues. Note this commit only lowers the loglevel while loading extra / optional tables from acpi_tb_load_namespace() all other parsing errors are still logged with a loglevel of error. BugLink: http://en.community.dell.com/techcenter/os-applications/f/4457/t/20006889 BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=109511 Related: https://bugzilla.kernel.org/show_bug.cgi?id=198167 Signed-off-by: Hans de Goede --- drivers/acpi/acpica/acglobal.h | 1 + drivers/acpi/acpica/tbxfload.c | 4 +++- drivers/acpi/acpica/uterror.c | 10 ++++++++-- drivers/acpi/acpica/utxferror.c | 19 ++++++++++--------- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h index 95eed442703f..7cb2ee8ce945 100644 --- a/drivers/acpi/acpica/acglobal.h +++ b/drivers/acpi/acpica/acglobal.h @@ -146,6 +146,7 @@ ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_operand_cache); ACPI_INIT_GLOBAL(u32, acpi_gbl_startup_flags, 0); ACPI_INIT_GLOBAL(u8, acpi_gbl_shutdown, TRUE); ACPI_INIT_GLOBAL(u8, acpi_gbl_early_initialization, TRUE); +ACPI_INIT_GLOBAL(u8, acpi_gbl_log_errors_exceptions_as_warnings, FALSE); /* Global handlers */ diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c index d81f442228b8..a1eaa69d0749 100644 --- a/drivers/acpi/acpica/tbxfload.c +++ b/drivers/acpi/acpica/tbxfload.c @@ -217,6 +217,7 @@ acpi_status acpi_tb_load_namespace(void) } /* Ignore errors while loading tables, get as many as possible */ + acpi_gbl_log_errors_exceptions_as_warnings = TRUE; (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); status = acpi_ns_load_table(i, acpi_gbl_root_node); @@ -237,11 +238,12 @@ acpi_status acpi_tb_load_namespace(void) tables_loaded++; } } + acpi_gbl_log_errors_exceptions_as_warnings = FALSE; if (!tables_failed) { ACPI_INFO(("%u ACPI AML tables successfully acquired and loaded", tables_loaded)); } else { - ACPI_ERROR((AE_INFO, + ACPI_WARNING((AE_INFO, "%u table load failures, %u successful", tables_failed, tables_loaded)); diff --git a/drivers/acpi/acpica/uterror.c b/drivers/acpi/acpica/uterror.c index e3368186e1c1..fc3794c1c324 100644 --- a/drivers/acpi/acpica/uterror.c +++ b/drivers/acpi/acpica/uterror.c @@ -205,7 +205,10 @@ acpi_ut_namespace_error(const char *module_name, char *name = NULL; ACPI_MSG_REDIRECT_BEGIN; - acpi_os_printf(ACPI_MSG_ERROR); + if (acpi_gbl_log_errors_exceptions_as_warnings) + acpi_os_printf(ACPI_MSG_WARNING); + else + acpi_os_printf(ACPI_MSG_ERROR); if (lookup_status == AE_BAD_CHARACTER) { @@ -269,7 +272,10 @@ acpi_ut_method_error(const char *module_name, struct acpi_namespace_node *node = prefix_node; ACPI_MSG_REDIRECT_BEGIN; - acpi_os_printf(ACPI_MSG_ERROR); + if (acpi_gbl_log_errors_exceptions_as_warnings) + acpi_os_printf(ACPI_MSG_WARNING); + else + acpi_os_printf(ACPI_MSG_ERROR); if (path) { status = acpi_ns_get_node(prefix_node, path, diff --git a/drivers/acpi/acpica/utxferror.c b/drivers/acpi/acpica/utxferror.c index 950a1e500bfa..553b4eee8cec 100644 --- a/drivers/acpi/acpica/utxferror.c +++ b/drivers/acpi/acpica/utxferror.c @@ -73,7 +73,10 @@ acpi_error(const char *module_name, u32 line_number, const char *format, ...) va_list arg_list; ACPI_MSG_REDIRECT_BEGIN; - acpi_os_printf(ACPI_MSG_ERROR); + if (acpi_gbl_log_errors_exceptions_as_warnings) + acpi_os_printf(ACPI_MSG_WARNING); + else + acpi_os_printf(ACPI_MSG_ERROR); va_start(arg_list, format); acpi_os_vprintf(format, arg_list); @@ -107,16 +110,14 @@ acpi_exception(const char *module_name, va_list arg_list; ACPI_MSG_REDIRECT_BEGIN; - - /* For AE_OK, just print the message */ - - if (ACPI_SUCCESS(status)) { + if (acpi_gbl_log_errors_exceptions_as_warnings) + acpi_os_printf(ACPI_MSG_WARNING); + else acpi_os_printf(ACPI_MSG_EXCEPTION); - } else { - acpi_os_printf(ACPI_MSG_EXCEPTION "%s, ", - acpi_format_exception(status)); - } + /* For failures append the formatted exception */ + if (ACPI_FAILURE(status)) + acpi_os_printf("%s, ", acpi_format_exception(status)); va_start(arg_list, format); acpi_os_vprintf(format, arg_list);