All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ACPICA: Log Exceptions and Errors as warning while loading extra tables
@ 2017-03-01 10:36 Hans de Goede
  2017-03-02  2:03   ` [Devel] " Zheng, Lv
  0 siblings, 1 reply; 18+ messages in thread
From: Hans de Goede @ 2017-03-01 10:36 UTC (permalink / raw)
  To: Rafael J . Wysocki, Len Brown, Robert Moore, Lv Zheng
  Cc: Hans de Goede, linux-acpi, devel

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.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 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 edbb42e..5ae9eee 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 1971cd7..b0c5478 100644
--- a/drivers/acpi/acpica/tbxfload.c
+++ b/drivers/acpi/acpica/tbxfload.c
@@ -256,6 +256,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);
@@ -276,11 +277,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 475932c..e01ff1f 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 d9f15cb..c8ca25af 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 AE_OK, just print the message */
+	if (ACPI_FAILURE(status))
+		acpi_os_printf("%s, ", acpi_format_exception(status));
 
 	va_start(arg_list, format);
 	acpi_os_vprintf(format, arg_list);
-- 
2.9.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread
* [PATCH 0/1] ACPICA: Log Exceptions and Errors as warning while loading extra tables
@ 2018-01-11 19:28 Hans de Goede
  2018-01-11 19:28 ` [PATCH] " Hans de Goede
  0 siblings, 1 reply; 18+ messages in thread
From: Hans de Goede @ 2018-01-11 19:28 UTC (permalink / raw)
  To: Len Brown, Robert Moore, Lv Zheng; +Cc: Hans de Goede, linux-acpi, devel

Hi All,

So this is a rebased resend of an old patch of mine, which back then was
rejected because all the ugly ACPI errors scaring the user during boot
would need to be resolved in either the ACPICA code or in the BIOS /
firmware in question.

It is a year later now and as all the people commenting on:
https://bugzilla.kernel.org/show_bug.cgi?id=198167
show (33 comments and counting in a short time), people experience these
kinda errors as a real problem. Note this bug is (mostly) about a new bunch
of ACPI error messages which are not fixed by this patch actually, but it
does nicely illustrate that people experience these errors as a real problem /
a real nuisance and I agree with them.

https://bugzilla.kernel.org/show_bug.cgi?id=198167#c33
also shows that the chances of ever getting these errors fixed in the case
where the problem is in the DSDT is very close to 0, so rejecting this
patch with an "ask your vendor to fix the firmware" is really not a useful
answer, people have tried and this is simply not going to happen.

Given all the effort distros have done with splash-screens to give
users a nice clean boot experience, we really want dmesg --level=err
to not print anything unless there is a real problem with either the
hardware or the kernel. And in this case neither is not true and these
unfixable and therefor useless errors only lead to a very jarring boot
experience (hence all the users complaining in bug 198167).

Note this patch does not silence or removes the messages about these
problems in the ACPI tables, it merely lowers their log level from
error to warning so that the messages do not show on the console, they
will still show in dmesg and other logs.

Regards,

Hans


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-01-12 10:25 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-01 10:36 [PATCH] ACPICA: Log Exceptions and Errors as warning while loading extra tables Hans de Goede
2017-03-02  2:03 ` Zheng, Lv
2017-03-02  2:03   ` [Devel] " Zheng, Lv
2017-03-02 15:27   ` Hans de Goede
2017-03-03  2:48     ` Zheng, Lv
2017-03-03  2:48       ` [Devel] " Zheng, Lv
2017-03-03 13:55       ` Hans de Goede
2017-03-13  9:52         ` Zheng, Lv
2017-03-13  9:52           ` [Devel] " Zheng, Lv
2017-03-13 10:06           ` Hans de Goede
2017-03-14  8:15             ` Zheng, Lv
2017-03-14  8:15               ` [Devel] " Zheng, Lv
2017-03-14  8:56               ` Hans de Goede
2017-03-14 11:54                 ` Hans de Goede
2017-03-15  1:16                 ` Zheng, Lv
2017-03-15  1:16                   ` [Devel] " Zheng, Lv
2018-01-11 19:28 [PATCH 0/1] " Hans de Goede
2018-01-11 19:28 ` [PATCH] " Hans de Goede
2018-01-12 10:25   ` Hans de Goede

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.