diff options
author | Bob Moore <robert.moore@intel.com> | 2018-02-16 00:09:31 +0300 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-02-22 01:51:08 +0300 |
commit | 959c38a7e128856cefaade7e7c2422939d5ad2da (patch) | |
tree | eeca7f3ec7842a5d481155f82fc05aa137d1189d /drivers/acpi/acpica | |
parent | 5a8361f7ecceaed64b4064000d16cb703462be49 (diff) | |
download | linux-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.c | 38 |
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; |