summaryrefslogtreecommitdiff
path: root/drivers/acpi/acpica
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2018-02-16 00:09:31 +0300
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-02-22 01:51:08 +0300
commit959c38a7e128856cefaade7e7c2422939d5ad2da (patch)
treeeeca7f3ec7842a5d481155f82fc05aa137d1189d /drivers/acpi/acpica
parent5a8361f7ecceaed64b4064000d16cb703462be49 (diff)
downloadlinux-959c38a7e128856cefaade7e7c2422939d5ad2da.tar.xz
ACPICA: Add option to disable Package object name resolution errors
ACPICA commit a6c3c725c44dd44ad9d3f2b2a64351fdbe6e0014 For the kernel-resident ACPICA, optionally be silent about the NOT_FOUND case. Although this is potentially a serious problem, it can generate a lot of noise/errors on platforms whose firmware carries around a bunch of unused Package objects. To disable these errors, define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS in the OS-specific header. Link: https://bugzilla.kernel.org/show_bug.cgi?id=198167 Link: https://github.com/acpica/acpica/commit/a6c3c725 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Erik Schmauss <erik.schmauss@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/acpica')
-rw-r--r--drivers/acpi/acpica/dspkginit.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/drivers/acpi/acpica/dspkginit.c b/drivers/acpi/acpica/dspkginit.c
index a307a07aeacd..7d48525b5e52 100644
--- a/drivers/acpi/acpica/dspkginit.c
+++ b/drivers/acpi/acpica/dspkginit.c
@@ -389,11 +389,12 @@ static void
acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr)
{
acpi_status status;
+ acpi_status status2;
union acpi_generic_state scope_info;
union acpi_operand_object *element = *element_ptr;
struct acpi_namespace_node *resolved_node;
struct acpi_namespace_node *original_node;
- char *external_path = NULL;
+ char *external_path = "";
acpi_object_type type;
ACPI_FUNCTION_TRACE(ds_resolve_package_element);
@@ -417,17 +418,40 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr)
ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
NULL, &resolved_node);
if (ACPI_FAILURE(status)) {
- status = acpi_ns_externalize_name(ACPI_UINT32_MAX,
- (char *)element->reference.
- aml, NULL, &external_path);
+#if defined ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS && !defined ACPI_APPLICATION
+ /*
+ * For the kernel-resident ACPICA, optionally be silent about the
+ * NOT_FOUND case. Although this is potentially a serious problem,
+ * it can generate a lot of noise/errors on platforms whose
+ * firmware carries around a bunch of unused Package objects.
+ * To disable these errors, define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS
+ * in the OS-specific header.
+ *
+ * All errors are always reported for ACPICA applications such as
+ * acpi_exec.
+ */
+ if (status == AE_NOT_FOUND) {
+
+ /* Reference name not found, set the element to NULL */
+
+ acpi_ut_remove_reference(*element_ptr);
+ *element_ptr = NULL;
+ return_VOID;
+ }
+#endif
+ status2 = acpi_ns_externalize_name(ACPI_UINT32_MAX,
+ (char *)element->reference.
+ aml, NULL, &external_path);
ACPI_EXCEPTION((AE_INFO, status,
- "Could not find/resolve named package element: %s",
+ "While resolving a named reference package element - %s",
external_path));
+ if (ACPI_SUCCESS(status2)) {
+ ACPI_FREE(external_path);
+ }
- /* Not found, set the element to NULL */
+ /* Could not resolve name, set the element to NULL */
- ACPI_FREE(external_path);
acpi_ut_remove_reference(*element_ptr);
*element_ptr = NULL;
return_VOID;