ACPICA 20180212 release
Subsystems (2)
cover ACPICA 20180212 release
This is the ACPICA20180212 release.
Notable commits are changes made to integrate package handling with MLC and setting the TermList parsing as a default. A small commit was made to disable package resolution errors. This reverts the error reporting behavior to match the previous behavior (in 4.13)
Bob Moore (7):
ACPICA: Update error message, no functional change
ACPICA: Update for some debug output. No functional change
ACPICA: Revert "Fix for implicit result conversion for the ToXXXX
functions"
ACPICA: Add option to disable Package object name resolution errors
ACPICA: Restructure ACPI table files
ACPICA: Integrate package handling with module-level code
ACPICA: Update version to 20180209
drivers/acpi/acpica/acopcode.h | 14 +- drivers/acpi/acpica/amlcode.h | 20 +- drivers/acpi/acpica/dsargs.c | 1 + drivers/acpi/acpica/dsopcode.c | 4 +- drivers/acpi/acpica/dspkginit.c | 164 ++-- drivers/acpi/acpica/dswexec.c | 6 +- drivers/acpi/acpica/dswload.c | 2 +- drivers/acpi/acpica/exconvrt.c | 1 + drivers/acpi/acpica/exnames.c | 7 +- drivers/acpi/acpica/exresop.c | 1 + drivers/acpi/acpica/nseval.c | 8 +- drivers/acpi/acpica/nsinit.c | 7 +- drivers/acpi/acpica/nsnames.c | 3 + drivers/acpi/acpica/nsparse.c | 10 +- drivers/acpi/acpica/psloop.c | 4 +- drivers/acpi/acpica/psparse.c | 2 +- drivers/acpi/acpica/pstree.c | 1 + drivers/acpi/acpica/utcache.c | 7 +- drivers/acpi/acpica/utdelete.c | 20 +- include/acpi/acpixf.h | 10 +- include/acpi/actbl1.h | 1638 ++++++++++++++++---------------- include/acpi/actbl2.h | 1964 +++++++++++++++++++++------------------ include/acpi/actbl3.h | 1016 +++++++++----------- include/acpi/platform/aclinux.h | 1 + 24 files changed, 2477 insertions(+), 2434 deletions(-)
Signature · 1 line
2.14.3
PATCH 2/7 ACPICA: Update error message, no functional change
From: Bob Moore <[email protected]>
ACPICA commit 0787fda3b224a78369e26ac6046658beb2b64c12
Clarify error when an attempt is made to evaluate things like devices, events, etc. -- these objects have no data and cannot be "evaluated".
--- drivers/acpi/acpica/nseval.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/acpi/acpica/nseval.c +5 -3
@@ -187,6 +187,7 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info)* 3) The object is not a method -- just return it's current value */ switch (acpi_ns_get_type (info->node)) { +case ACPI_TYPE_ANY :case ACPI_TYPE_DEVICE :case ACPI_TYPE_EVENT :case ACPI_TYPE_MUTEX :
@@ -194,11 +195,12 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info)case ACPI_TYPE_THERMAL :case ACPI_TYPE_LOCAL_SCOPE :/* -* 1) Disallow evaluation of certain object types. For these, -* object evaluation is undefined and not supported. +* 1) Disallow evaluation of these object types. For these, +* object evaluation is undefined. */ ACPI_ERROR ((AE_INFO , -"%s: Evaluation of object type [%s] is not supported" , +"%s: This object type [%s] " +"never contains data and cannot be evaluated" , info->full_pathname,acpi_ut_get_type_name (info->node->type)));
Signature · 1 line
2.14.3
PATCH 3/7 ACPICA: Update for some debug output. No functional change
In reply to Erik SchmaussFrom: Bob Moore <[email protected]>
ACPICA commit 3a08436fe3bff297a6de162252964e955946c7d3
Improve/simplify some of the debug messages.
--- drivers/acpi/acpica/dsargs.c | 1 + drivers/acpi/acpica/dsopcode.c | 4 ++-- drivers/acpi/acpica/dswload.c | 2 +- drivers/acpi/acpica/exnames.c | 7 ++----- drivers/acpi/acpica/nsinit.c | 7 ++++++- drivers/acpi/acpica/nsnames.c | 3 +++ drivers/acpi/acpica/nsparse.c | 9 ++++++--- drivers/acpi/acpica/psloop.c | 4 ++-- drivers/acpi/acpica/psparse.c | 2 +- drivers/acpi/acpica/utcache.c | 7 ++++--- drivers/acpi/acpica/utdelete.c | 20 ++++++++++++-------- 11 files changed, 40 insertions(+), 26 deletions(-)
drivers/acpi/acpica/dsargs.c +1 -0
@@ -346,6 +346,7 @@ acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc) status =acpi_ds_execute_arguments (node, node, obj_desc->package.aml_length, obj_desc->package.aml_start); +return_ACPI_STATUS (status); }
drivers/acpi/acpica/dsopcode.c +2 -2
@@ -603,8 +603,8 @@ acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,if (!op->common.value.arg) {ACPI_ERROR ((AE_INFO , -"Dispatch: Missing child while executing TermArg for %X" , - op->common.aml_opcode)); +"Missing child while evaluating opcode %4.4X, Op %p" , + op->common.aml_opcode, op));return_ACPI_STATUS (AE_OK ); }
drivers/acpi/acpica/dswload.c +1 -1
@@ -147,7 +147,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,char *path;u32 flags; -ACPI_FUNCTION_TRACE (ds_load1_begin_op); +ACPI_FUNCTION_TRACE_PTR (ds_load1_begin_op, walk_state->op); op = walk_state->op; ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
drivers/acpi/acpica/exnames.c +2 -5
@@ -174,13 +174,10 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)return_ACPI_STATUS (AE_CTRL_PENDING ); } -ACPI_DEBUG_PRINT ((ACPI_DB_LOAD ,"Bytes from stream:\n" )); -for (index =0 ; (index <ACPI_NAME_SIZE ) && (acpi_ut_valid_name_char (*aml_address,0 )); index++) { char_buf[index] = *aml_address++; -ACPI_DEBUG_PRINT ((ACPI_DB_LOAD ,"%c\n" , char_buf[index])); }/* Valid name segment */
@@ -192,9 +189,9 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string) char_buf[4 ] ='\0' ;if (name_string) { -strcat (name_string, char_buf);ACPI_DEBUG_PRINT ((ACPI_DB_NAMES , -"Appended to - %s\n" , name_string)); +"Appending NameSeg %s\n" , char_buf)); +strcat (name_string, char_buf); }else {ACPI_DEBUG_PRINT ((ACPI_DB_NAMES ,"No Name string - %s\n" , char_buf));
drivers/acpi/acpica/nsinit.c +6 -1
@@ -286,7 +286,7 @@ acpi_status acpi_ns_initialize_devices(u32 flags)* RETURN: Status * * DESCRIPTION: Callback from acpi_walk_namespace. Invoked for every object -* within the namespace. +* within the namespace. * * Currently, the only objects that require initialization are: * 1) Methods
@@ -400,6 +400,10 @@ acpi_ns_init_one_object(acpi_handle obj_handle,break ; } +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE , +"%s: Completing resolution of Package elements\n" , +ACPI_GET_FUNCTION_NAME )); +/* * Resolve all named references in package objects (and all * sub-packages). This action has been deferred until the entire
@@ -409,6 +413,7 @@ acpi_ns_init_one_object(acpi_handle obj_handle, status =acpi_ut_walk_package_tree (obj_desc,NULL , acpi_ds_init_package_element,NULL ); + obj_desc->package.flags |=AOPOBJ_DATA_VALID ;break ;
drivers/acpi/acpica/nsnames.c +3 -0
@@ -354,6 +354,9 @@ char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, (void )acpi_ns_build_normalized_path (node, name_buffer, size, no_trailing); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES ,"%s: Path \"%s\"\n" , +ACPI_GET_FUNCTION_NAME , name_buffer)); +return_PTR (name_buffer); }
drivers/acpi/acpica/nsparse.c +6 -3
@@ -112,8 +112,10 @@ acpi_ns_execute_table(u32 table_index, struct acpi_namespace_node *start_node) goto cleanup; } -ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , -"Create table code block: %p\n" , method_obj)); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE , +"%s: Create table pseudo-method for [%4.4s] @%p, method %p\n" , +ACPI_GET_FUNCTION_NAME , table->signature, table, + method_obj)); method_obj->method.aml_start = aml_start; method_obj->method.aml_length = aml_length;
@@ -265,7 +267,8 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)ACPI_FUNCTION_TRACE (ns_parse_table);if (acpi_gbl_parse_table_as_term_list) { -ACPI_DEBUG_PRINT ((ACPI_DB_PARSE ,"**** Start load pass\n" )); +ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , +"**** Start table execution pass\n" )); status =acpi_ns_execute_table (table_index, start_node);if (ACPI_FAILURE (status)) {
drivers/acpi/acpica/psloop.c +2 -2
@@ -165,7 +165,7 @@ acpi_ps_get_arguments(struct acpi_walk_state *walk_state, }ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , -"Final argument count: %u pass %u\n" , +"Final argument count: %8.8X pass %u\n" , walk_state->arg_count, walk_state->pass_number));
@@ -581,7 +581,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)/* Check for arguments that need to be processed */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , -"Parseloop: argument count: %u\n" , +"Parseloop: argument count: %8.8X\n" , walk_state->arg_count));if (walk_state->arg_count) {
drivers/acpi/acpica/psparse.c +1 -1
@@ -454,7 +454,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) walk_state->parser_state.aml_size));if (!walk_state->parser_state.aml) { -return_ACPI_STATUS (AE_NULL_OBJECT ); +return_ACPI_STATUS (AE_BAD_ADDRESS ); }/* Create and initialize a new thread state */
drivers/acpi/acpica/utcache.c +4 -3
@@ -269,9 +269,10 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache) cache->current_depth--;ACPI_MEM_TRACKING (cache->hits++); -ACPI_DEBUG_PRINT ((ACPI_DB_EXEC , -"Object %p from %s cache\n" , object, - cache->list_name)); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC , +"%s: Object %p from %s cache\n" , +ACPI_GET_FUNCTION_NAME , object, + cache->list_name)); status =acpi_ut_release_mutex (ACPI_MTX_CACHES );if (ACPI_FAILURE (status)) {
drivers/acpi/acpica/utdelete.c +12 -8
@@ -332,8 +332,10 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)/* Now the object can be safely deleted */ -ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS ,"Deleting Object %p [%s]\n" , - object,acpi_ut_get_object_type_name (object))); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS , +"%s: Deleting Object %p [%s]\n" , +ACPI_GET_FUNCTION_NAME , object, +acpi_ut_get_object_type_name (object)));acpi_ut_delete_object_desc (object); return_VOID;
@@ -444,9 +446,10 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action) object)); } -ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS , -"Obj %p Type %.2X Refs %.2X [Decremented]\n" , - object, object->common.type, new_count)); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS , +"%s: Obj %p Type %.2X Refs %.2X [Decremented]\n" , +ACPI_GET_FUNCTION_NAME , object, + object->common.type, new_count));/* Actually delete the object on a reference count of zero */
@@ -747,9 +750,10 @@ void acpi_ut_remove_reference(union acpi_operand_object *object)return ; } -ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS , -"Obj %p Current Refs=%X [To Be Decremented]\n" , - object, object->common.reference_count)); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS , +"%s: Obj %p Current Refs=%X [To Be Decremented]\n" , +ACPI_GET_FUNCTION_NAME , object, + object->common.reference_count));/* * Decrement the reference count, and only actually delete the object
Signature · 1 line
2.14.3
PATCH 5/7 ACPICA: Integrate package handling with module-level code
In reply to Erik SchmaussACPICA commit 8faf6fca445eb7219963d80543fb802302a7a8c7
This change completes the integration of the recent changes to package object handling with the module-level code support.
For acpi_exec, the -ep flag is removed.
This change allows table load to behave as if it were a method invocation. Before this, the definition block definition below would have loaded all named objects at the root scope. After loading, it would execute the if statements at the root scope.
DefinitionBlock (...)
{
Name(OBJ1, 0)
if (1)
{
Device (DEV1)
{
Name (_HID,0x0)
}
}
Scope (DEV1)
{
Name (OBJ2) }
}
The above code would load OBJ1 to the namespace, defer the execution of the if statement and attempt to add OBJ2 within the scope of DEV1. Since DEV1 is not in scope, this would incur an AE_NOT_FOUND error. After this error is emitted, the if block is invoked and DEV1 and its _HID is added to the namespace.
This commit changes the behavior to execute the if block in place rather than deferring it until all tables are loaded. The new behavior is as follows: insert OBJ1 in the namespace, invoke the if statement and add DEV1 and its _HID to the namespace, add OBJ2 to the scope of DEV1.
Bug report links:
ACPICA repo:
--- drivers/acpi/acpica/dspkginit.c | 128 ++++++++++++++++++++++------------------ drivers/acpi/acpica/dswexec.c | 6 +- drivers/acpi/acpica/nsparse.c | 5 +- drivers/acpi/acpica/pstree.c | 1 + include/acpi/acpixf.h | 8 ++- 5 files changed, 85 insertions(+), 63 deletions(-)
drivers/acpi/acpica/dspkginit.c +71 -57
@@ -47,6 +47,7 @@#include "amlcode.h" #include "acdispat.h" #include "acinterp.h" +#include "acparser.h" #define _COMPONENT ACPI_NAMESPACEACPI_MODULE_NAME ("dspkginit" )
@@ -94,12 +95,19 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,union acpi_parse_object *parent;union acpi_operand_object *obj_desc =NULL ;acpi_status status =AE_OK ; +u8 module_level_code = FALSE;u16 reference_count;u32 index;u32 i;ACPI_FUNCTION_TRACE (ds_build_internal_package_obj); +/* Check if we are executing module level code */ + +if (walk_state->parse_flags &ACPI_PARSE_MODULE_LEVEL ) { + module_level_code = TRUE; + } +/* Find the parent of a possibly nested package */ parent = op->common.parent;
@@ -130,24 +138,44 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,/* * Allocate the element array (array of pointers to the individual -* objects) based on the num_elements parameter. Add an extra pointer slot -* so that the list is always null terminated. +* objects) if necessary. the count is based on the num_elements +* parameter. Add an extra pointer slot so that the list is always +* null terminated. */ - obj_desc->package.elements =ACPI_ALLOCATE_ZEROED (((acpi_size ) - element_count + -1 ) *sizeof (void *)); -if (!obj_desc->package.elements) { -acpi_ut_delete_object_desc (obj_desc); -return_ACPI_STATUS (AE_NO_MEMORY ); + obj_desc->package.elements =ACPI_ALLOCATE_ZEROED (((acpi_size ) + element_count + + +1 ) * +sizeof (void + *)); + +if (!obj_desc->package.elements) { +acpi_ut_delete_object_desc (obj_desc); +return_ACPI_STATUS (AE_NO_MEMORY ); + } + + obj_desc->package.count = element_count; } - obj_desc->package.count = element_count; +/* First arg is element count. Second arg begins the initializer list */ + arg = op->common.value.arg; arg = arg->common.next; -if (arg) { - obj_desc->package.flags |=AOPOBJ_DATA_VALID ; +/* +* If we are executing module-level code, we will defer the +* full resolution of the package elements in order to support +* forward references from the elements. This provides +* compatibility with other ACPI implementations. +*/ +if (module_level_code) { + obj_desc->package.aml_start = walk_state->aml; + obj_desc->package.aml_length =0 ; + +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE , +"%s: Deferring resolution of Package elements\n" , +ACPI_GET_FUNCTION_NAME )); }/*
@@ -187,15 +215,19 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state, "****DS namepath not found")); } -/* -* Initialize this package element. This function handles the -* resolution of named references within the package. -*/ -acpi_ds_init_package_element (0 , - obj_desc->package. - elements[i],NULL , - &obj_desc->package. - elements[i]); +if (!module_level_code) { +/* +* Initialize this package element. This function handles the +* resolution of named references within the package. +* Forward references from module-level code are deferred +* until all ACPI tables are loaded. +*/ +acpi_ds_init_package_element (0 , + obj_desc->package. + elements[i],NULL , + &obj_desc->package. + elements[i]); + } }if (*obj_desc_ptr) {
@@ -265,15 +297,21 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,* num_elements count. * * Note: this is not an error, the package is padded out -* with NULLs. +* with NULLs as per the ACPI specification. */ -ACPI_DEBUG_PRINT ((ACPI_DB_INFO , -"Package List length (%u) smaller than NumElements " -"count (%u), padded with null elements\n" , - i, element_count)); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO , +"%s: Package List length (%u) smaller than NumElements " +"count (%u), padded with null elements\n" , +ACPI_GET_FUNCTION_NAME , i, + element_count)); + } + +/* Module-level packages will be resolved later */ + +if (!module_level_code) { + obj_desc->package.flags |=AOPOBJ_DATA_VALID ; } - obj_desc->package.flags |=AOPOBJ_DATA_VALID ; op->common.node = ACPI_CAST_PTR(struct acpi_namespace_node, obj_desc);return_ACPI_STATUS (status); }
@@ -363,6 +401,10 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr)/* Check if reference element is already resolved */ if (element->reference.resolved) { +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE , +"%s: Package element is already resolved\n" , +ACPI_GET_FUNCTION_NAME )); + return_VOID; }
@@ -383,7 +425,10 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr)"Could not find/resolve named package element: %s" , external_path)); +/* Not found, set the element to NULL */ +ACPI_FREE (external_path); +acpi_ut_remove_reference (*element_ptr); *element_ptr =NULL ; return_VOID; }else if (resolved_node->type ==ACPI_TYPE_ANY ) {
@@ -397,23 +442,6 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr) *element_ptr =NULL ; return_VOID; } -#if 0 - else if (resolved_node->flags & ANOBJ_TEMPORARY) { -/* -* A temporary node found here indicates that the reference is -* to a node that was created within this method. We are not -* going to allow it (especially if the package is returned -* from the method) -- the temporary node will be deleted out -* from under the method. (05/2017). -*/ -ACPI_ERROR ((AE_INFO , -"Package element refers to a temporary name [%4.4s], " -"inserting a NULL element" , - resolved_node->name.ascii)); - *element_ptr =NULL ; - return_VOID; - } -#endif /* * Special handling for Alias objects. We need resolved_node to point
@@ -449,20 +477,6 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr)if (ACPI_FAILURE (status)) { return_VOID; } -#if 0 -/* TBD - alias support */ -/* -* Special handling for Alias objects. We need to setup the type -* and the Op->Common.Node to point to the Alias target. Note, -* Alias has at most one level of indirection internally. -*/ - type = op->common.node->type; -if (type ==ACPI_TYPE_LOCAL_ALIAS ) { - type = obj_desc->common.type; - op->common.node = ACPI_CAST_PTR(struct acpi_namespace_node, - op->common.node->object); - } -#endif switch (type) {/*
drivers/acpi/acpica/dswexec.c +4 -2
@@ -576,8 +576,10 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)case AML_TYPE_CREATE_OBJECT :ACPI_DEBUG_PRINT ((ACPI_DB_EXEC , -"Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n" , - op, op->named.data)); +"Executing CreateObject (Buffer/Package) Op=%p Child=%p ParentOpcode=%4.4X\n" , + op, op->named.value.arg, + op->common.parent->common. + aml_opcode));switch (op->common.parent->common.aml_opcode) {case AML_NAME_OP :
drivers/acpi/acpica/nsparse.c +3 -2
@@ -267,8 +267,9 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)ACPI_FUNCTION_TRACE (ns_parse_table);if (acpi_gbl_parse_table_as_term_list) { -ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , -"**** Start table execution pass\n" )); +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE , +"%s: **** Start table execution pass\n" , +ACPI_GET_FUNCTION_NAME )); status =acpi_ns_execute_table (table_index, start_node);if (ACPI_FAILURE (status)) {
drivers/acpi/acpica/pstree.c +1 -0
@@ -295,6 +295,7 @@ union acpi_parse_object *acpi_ps_get_child(union acpi_parse_object *op)case AML_BUFFER_OP :case AML_PACKAGE_OP : +case AML_VARIABLE_PACKAGE_OP :case AML_METHOD_OP :case AML_IF_OP :case AML_WHILE_OP :
include/acpi/acpixf.h +6 -2
@@ -192,15 +192,19 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE);/* * Optionally support group module level code. +* NOTE, this is essentially obsolete and will be removed soon +* (01/2018). */ -ACPI_INIT_GLOBAL (u8, acpi_gbl_group_module_level_code, TRUE); +ACPI_INIT_GLOBAL (u8, acpi_gbl_group_module_level_code, FALSE);/* * Optionally support module level code by parsing the entire table as * a term_list. Default is FALSE, do not execute entire table until some * lock order issues are fixed. +* NOTE, this is essentially obsolete and will be removed soon +* (01/2018). */ -ACPI_INIT_GLOBAL (u8, acpi_gbl_parse_table_as_term_list, FALSE); +ACPI_INIT_GLOBAL (u8, acpi_gbl_parse_table_as_term_list, TRUE);/* * Optionally use 32-bit FADT addresses if and when there is a conflict
Signature · 1 line
2.14.3
PATCH 6/7 ACPICA: Add option to disable Package object name resolution errors
In reply to Erik SchmaussFrom: Bob Moore <[email protected]>
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.
--- drivers/acpi/acpica/dspkginit.c | 38 +++++++++++++++++++++++++++++++------- include/acpi/platform/aclinux.h | 1 + 2 files changed, 32 insertions(+), 7 deletions(-)
drivers/acpi/acpica/dspkginit.c +31 -7
@@ -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 definedACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS && !definedACPI_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;
include/acpi/platform/aclinux.h +1 -0
@@ -58,6 +58,7 @@#define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 +#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS #ifdef __KERNEL__
Signature · 1 line
2.14.3
PATCH 7/7 ACPICA: Update version to 20180209
In reply to Erik SchmaussFrom: Bob Moore <[email protected]>
ACPICA commit 6e3468837f9f32f64c7d0a6e20bf0d2579411d43
Version 20180209.
--- include/acpi/acpixf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/acpi/acpixf.h +1 -1
@@ -46,7 +46,7 @@/* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20180105 +#define ACPI_CA_VERSION 0x20180209#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
2.14.3