ACPICA: 20150818 Release
Subsystems (3)
cover ACPICA: 20150818 Release
The 20150818 ACPICA kernel-resident subsystem updates are linuxized based on the linux-pm/linux-next branch.
The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. i386 + allyes + CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes + CONFIG_ACPI=n
5. x86_64 + default + COFNIG_ACPI=y
6. x86_64 + allyes + CONFIG_ACPI=y
7. x86_64 + default + COFNIG_ACPI=n
8. x86_64 + allyes + CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. x86_64 + default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All "drivers/acpi" configurations
All "drivers/platform" drivers
All other drivers that link the APIs provided by ACPICA subsystem
The divergences checking result:
Before applying (20150717 Release):
518 lines
After applying (20150818 Release):
517 lines
Bob Moore (14):
ACPICA: Correctly cleanup after a ACPI table load failure.
ACPICA: Disassembler: Remove duplicate code in _PLD processing.
ACPICA: Update parameter validation for data_table_region and
load_table.
ACPICA: Disassembler: Update for new listing mode.
ACPICA: Update info messages during ACPICA init.
ACPICA: Headers: Fix some comments, no functional change.
ACPICA: acpinames: Add new options and wildcard support.
ACPICA: acpiexec/acpinames: Support very large number of ACPI tables.
ACPICA: Table handling: Cleanup and update debug output for tools.
ACPICA: Add additional debug info/statements.
ACPICA: Debugger: Add option to display namespace summary/counts.
ACPICA: Make the max-number-of-loops runtime configurable.
ACPICA: Header support to improve compatibility with MSVC.
ACPICA: Update version to 20150818.
Lv Zheng (6):
ACPICA: Tables: Fix global table list issues by removing fixed table
indexes.
ACPICA: Tables: Cleanup to reduce FACS globals.
ACPICA: Debugger: Split debugger initialization/termination APIs.
ACPICA: Disassembler: Cleanup acpi_gbl_db_opt_disasm.
ACPICA: Disassembler: Cleanup acpi_gbl_db_opt_verbose acpiexec usage.
ACPICA: Debugger: Cleanup debugging outputs to dump name path without
trailing underscores.
drivers/acpi/acpica/acdebug.h | 7 --- drivers/acpi/acpica/acglobal.h | 19 +++++--- drivers/acpi/acpica/aclocal.h | 17 +++++-- drivers/acpi/acpica/actables.h | 14 ++++-- drivers/acpi/acpica/acutils.h | 2 +- drivers/acpi/acpica/dscontrol.c | 2 +- drivers/acpi/acpica/dsdebug.c | 2 +- drivers/acpi/acpica/dsinit.c | 20 ++++++--- drivers/acpi/acpica/dsopcode.c | 31 ++++++++----- drivers/acpi/acpica/evregion.c | 22 +++++++-- drivers/acpi/acpica/exconfig.c | 8 ---- drivers/acpi/acpica/exdump.c | 2 +- drivers/acpi/acpica/exresnte.c | 2 +- drivers/acpi/acpica/exresolv.c | 16 ++++--- drivers/acpi/acpica/hwxfsleep.c | 15 +------ drivers/acpi/acpica/nseval.c | 4 +- drivers/acpi/acpica/nsload.c | 16 ++++++- drivers/acpi/acpica/nsutils.c | 19 +++++++- drivers/acpi/acpica/psloop.c | 14 +++++- drivers/acpi/acpica/tbfadt.c | 6 +-- drivers/acpi/acpica/tbfind.c | 15 ++++++- drivers/acpi/acpica/tbinstal.c | 40 +++++++++-------- drivers/acpi/acpica/tbutils.c | 73 ++++++++++++++++++++---------- drivers/acpi/acpica/tbxfload.c | 93 +++++++++++++++++++++++++-------------- drivers/acpi/acpica/utfileio.c | 2 +- drivers/acpi/acpica/utinit.c | 1 + drivers/acpi/acpica/utmisc.c | 4 +- drivers/acpi/acpica/utxface.c | 12 ++--- drivers/acpi/acpica/utxfinit.c | 11 ----- include/acpi/acbuffer.h | 1 + include/acpi/acconfig.h | 4 -- include/acpi/acexcep.h | 7 ++- include/acpi/acpixf.h | 5 ++- include/acpi/actypes.h | 2 + include/acpi/platform/acenv.h | 19 ++++---- 35 files changed, 330 insertions(+), 197 deletions(-)
Signature · 1 line
1.7.10
PATCH 1/20 ACPICA: Correctly cleanup after a ACPI table load failure.
From: Bob Moore <[email protected]>
ACPICA commit ed7769e832de6c7ba90615480d916c85fd100422
If a table load fails, delete all namespace objects created by the table, otherwise these objects will be uninitialized, causing problems later. This appears to be a very rare problem. Also handle the unitialized node problem to prevent possible faults. ACPICA BZ 1185.
--- drivers/acpi/acpica/exresnte.c | 2 +- drivers/acpi/acpica/exresolv.c | 16 +++++++++++----- drivers/acpi/acpica/nseval.c | 1 + drivers/acpi/acpica/nsload.c | 16 +++++++++++++++- drivers/acpi/acpica/tbxfload.c | 29 ++++++++++++++++++++++++++--- include/acpi/acexcep.h | 7 +++++-- 6 files changed, 59 insertions(+), 12 deletions(-)
drivers/acpi/acpica/exresnte.c +1 -1
@@ -126,7 +126,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,if (!source_desc) {ACPI_ERROR ((AE_INFO ,"No object attached to node [%4.4s] %p" , node->name.ascii, node)); -return_ACPI_STATUS (AE_AML_NO_OPERAND ); +return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE ); }/*
drivers/acpi/acpica/exresolv.c +11 -5
@@ -337,8 +337,9 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,acpi_object_type * return_type, union acpi_operand_object **return_desc) { - union acpi_operand_object *obj_desc = (void *)operand; -struct acpi_namespace_node *node; + union acpi_operand_object *obj_desc = ACPI_CAST_PTR(void, operand); +struct acpi_namespace_node *node = + ACPI_CAST_PTR(struct acpi_namespace_node, operand);acpi_object_type type;acpi_status status;
@@ -355,9 +356,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,case ACPI_DESC_TYPE_NAMED : type = ((struct acpi_namespace_node *)obj_desc)->type; - obj_desc = -acpi_ns_get_attached_object ((struct acpi_namespace_node *) - obj_desc); + obj_desc =acpi_ns_get_attached_object (node);/* If we had an Alias node, use the attached object for type info */
@@ -368,6 +367,13 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, acpi_namespace_node *) obj_desc); } + +if (!obj_desc) { +ACPI_ERROR ((AE_INFO , +"[%4.4s] Node is unresolved or uninitialized" , +acpi_ut_get_node_name (node))); +return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE ); + }break ;default :
drivers/acpi/acpica/nseval.c +1 -0
@@ -274,6 +274,7 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info)acpi_ex_exit_interpreter ();if (ACPI_FAILURE (status)) { + info->return_object =NULL ; goto cleanup; }
drivers/acpi/acpica/nsload.c +15 -1
@@ -111,7 +111,21 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)if (ACPI_SUCCESS (status)) {acpi_tb_set_table_loaded_flag (table_index, TRUE); }else { - (void )acpi_tb_release_owner_id (table_index); +/* +* On error, delete any namespace objects created by this table. +* We cannot initialize these objects, so delete them. There are +* a couple of expecially bad cases: +* AE_ALREADY_EXISTS - namespace collision. +* AE_NOT_FOUND - the target of a Scope operator does not +* exist. This target of Scope must already exist in the +* namespace, as per the ACPI specification. +*/ + (void )acpi_ut_release_mutex (ACPI_MTX_NAMESPACE ); +acpi_ns_delete_namespace_by_owner (acpi_gbl_root_table_list. + tables[table_index].owner_id); +acpi_tb_release_owner_id (table_index); + +return_ACPI_STATUS (status); } unlock:
drivers/acpi/acpica/tbxfload.c +26 -3
@@ -102,6 +102,8 @@ static acpi_status acpi_tb_load_namespace(void)acpi_status status;u32 i;struct acpi_table_header *new_dsdt; +u32 tables_loaded =0 ; +u32 tables_failed =0 ;ACPI_FUNCTION_TRACE (tb_load_namespace);
@@ -159,7 +161,10 @@ static acpi_status acpi_tb_load_namespace(void) status =acpi_ns_load_table (ACPI_TABLE_INDEX_DSDT , acpi_gbl_root_node);if (ACPI_FAILURE (status)) { -return_ACPI_STATUS (status); +ACPI_EXCEPTION ((AE_INFO , status,"[DSDT] table load failed" )); + tables_failed++; + }else { + tables_loaded++; }/* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */
@@ -187,11 +192,29 @@ static acpi_status acpi_tb_load_namespace(void)/* Ignore errors while loading tables, get as many as possible */ (void )acpi_ut_release_mutex (ACPI_MTX_TABLES ); - (void )acpi_ns_load_table (i, acpi_gbl_root_node); + status =acpi_ns_load_table (i, acpi_gbl_root_node); +if (ACPI_FAILURE (status)) { +ACPI_EXCEPTION ((AE_INFO , status, +"[%4.4s] table load failed" , + &acpi_gbl_root_table_list.tables[i]. + signature.ascii[0 ])); + tables_failed++; + }else { + tables_loaded++; + } + (void )acpi_ut_acquire_mutex (ACPI_MTX_TABLES ); } -ACPI_INFO ((AE_INFO ,"All ACPI Tables successfully acquired" )); +if (!tables_failed) { +ACPI_INFO ((AE_INFO , +"All (%u) ACPI AML tables successfully loaded" , + tables_loaded)); + }else { +ACPI_ERROR ((AE_INFO , +"%u ACPI AML tables loaded, %u failed" , + tables_loaded, tables_failed)); + } unlock_and_exit: (void )acpi_ut_release_mutex (ACPI_MTX_TABLES );
include/acpi/acexcep.h +5 -2
@@ -192,8 +192,9 @@ struct acpi_exception_info {#define AE_AML_BAD_RESOURCE_LENGTH EXCEP_AML (0x001F)#define AE_AML_ILLEGAL_ADDRESS EXCEP_AML (0x0020)#define AE_AML_INFINITE_LOOP EXCEP_AML (0x0021) +#define AE_AML_UNINITIALIZED_NODE EXCEP_AML (0x0022) -#define AE_CODE_AML_MAX 0x0021 +#define AE_CODE_AML_MAX 0x0022/* * Internal exceptions used for control
@@ -355,7 +356,9 @@ static const struct acpi_exception_info acpi_gbl_exception_names_aml[] = {EXCEP_TXT ("AE_AML_ILLEGAL_ADDRESS" ,"A memory, I/O, or PCI configuration address is invalid" ),EXCEP_TXT ("AE_AML_INFINITE_LOOP" , -"An apparent infinite AML While loop, method was aborted" ) +"An apparent infinite AML While loop, method was aborted" ), +EXCEP_TXT ("AE_AML_UNINITIALIZED_NODE" , +"A namespace node is uninitialized or unresolved" ) }; static const struct acpi_exception_info acpi_gbl_exception_names_ctrl[] = {
Signature · 1 line
1.7.10
PATCH 2/20 ACPICA: Disassembler: Remove duplicate code in _PLD processing.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 6d9c827b540837b6e54059e17756a06985e4a196
ACPICA BZ 1176.
--- drivers/acpi/acpica/utxface.c | 5 +++-- include/acpi/acbuffer.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-)
drivers/acpi/acpica/utxface.c +3 -2
@@ -517,7 +517,8 @@ acpi_decode_pld_buffer(u8 *in_buffer,/* Parameter validation */ -if (!in_buffer || !return_buffer || (length <16 )) { +if (!in_buffer || !return_buffer + || (length <ACPI_PLD_REV1_BUFFER_SIZE )) {return (AE_BAD_PARAMETER ); }
@@ -567,7 +568,7 @@ acpi_decode_pld_buffer(u8 *in_buffer, pld_info->rotation =ACPI_PLD_GET_ROTATION (&dword); pld_info->order =ACPI_PLD_GET_ORDER (&dword); -if (length >=ACPI_PLD_BUFFER_SIZE ) { +if (length >=ACPI_PLD_REV2_BUFFER_SIZE ) {/* Fifth 32-bit DWord (Revision 2 of _PLD) */
include/acpi/acbuffer.h +1 -0
@@ -147,6 +147,7 @@ struct acpi_pld_info {* (Intended for BIOS use only) */ #define ACPI_PLD_REV1_BUFFER_SIZE 16/* For Revision 1 of the buffer (From ACPI spec) */ +#define ACPI_PLD_REV2_BUFFER_SIZE 20/* For Revision 2 of the buffer (From ACPI spec) */ #define ACPI_PLD_BUFFER_SIZE 20/* For Revision 2 of the buffer (From ACPI spec) */ /* First 32-bit dword, bits 0:32 */
Signature · 1 line
1.7.10
PATCH 3/20 ACPICA: Update parameter validation for data_table_region and load_table.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 51ab555e60b4a3de3cc4a846e86d0de255be441a
Add additional validation for the table signature and
the OEM strings. Eliminates buffer read overrun in data_table_region. ACPICA BZ 1184.
--- drivers/acpi/acpica/actables.h | 2 ++ drivers/acpi/acpica/dsopcode.c | 31 ++++++++++++++++++++----------- drivers/acpi/acpica/exconfig.c | 8 -------- drivers/acpi/acpica/tbfind.c | 15 ++++++++++++++- drivers/acpi/acpica/tbutils.c | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 20 deletions(-)
drivers/acpi/acpica/actables.h +2 -0
@@ -164,4 +164,6 @@ acpi_tb_install_fixed_table(acpi_physical_address address,acpi_status acpi_tb_parse_root_table (acpi_physical_address rsdp_address); +u8 acpi_is_valid_signature (char *signature); +#endif /* __ACTABLES_H__ */
drivers/acpi/acpica/dsopcode.c +20 -11
@@ -480,8 +480,8 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,union acpi_operand_object **operand;struct acpi_namespace_node *node;union acpi_parse_object *next_op; -u32 table_index;struct acpi_table_header *table; +u32 table_index;ACPI_FUNCTION_TRACE_PTR (ds_eval_table_region_operands, op);
@@ -504,6 +504,8 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,return_ACPI_STATUS (status); } + operand = &walk_state->operands[0 ]; +/* * Resolve the Signature string, oem_id string, * and oem_table_id string operands
@@ -511,32 +513,34 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state, status =acpi_ex_resolve_operands (op->common.aml_opcode,ACPI_WALK_OPERANDS , walk_state);if (ACPI_FAILURE (status)) { -return_ACPI_STATUS (status); + goto cleanup; } - operand = &walk_state->operands[0 ]; -/* Find the ACPI table */ status =acpi_tb_find_table (operand[0 ]->string.pointer, operand[1 ]->string.pointer, operand[2 ]->string.pointer, &table_index);if (ACPI_FAILURE (status)) { -return_ACPI_STATUS (status); +if (status ==AE_NOT_FOUND ) { +ACPI_ERROR ((AE_INFO , +"ACPI Table [%4.4s] OEM:(%s, %s) not found in RSDT/XSDT" , + operand[0 ]->string.pointer, + operand[1 ]->string.pointer, + operand[2 ]->string.pointer)); + } + goto cleanup; } -acpi_ut_remove_reference (operand[0 ]); -acpi_ut_remove_reference (operand[1 ]); -acpi_ut_remove_reference (operand[2 ]); - status =acpi_get_table_by_index (table_index, &table);if (ACPI_FAILURE (status)) { -return_ACPI_STATUS (status); + goto cleanup; } obj_desc =acpi_ns_get_attached_object (node);if (!obj_desc) { -return_ACPI_STATUS (AE_NOT_EXIST ); + status =AE_NOT_EXIST ; + goto cleanup; } obj_desc->region.address =ACPI_PTR_TO_PHYSADDR (table);
@@ -551,6 +555,11 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state, obj_desc->region.flags |=AOPOBJ_DATA_VALID ; +cleanup: +acpi_ut_remove_reference (operand[0 ]); +acpi_ut_remove_reference (operand[1 ]); +acpi_ut_remove_reference (operand[2 ]); +return_ACPI_STATUS (status); }
drivers/acpi/acpica/exconfig.c +0 -8
@@ -162,14 +162,6 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,ACPI_FUNCTION_TRACE (ex_load_table_op); -/* Validate lengths for the Signature, oem_id, and oem_table_id strings */ - -if ((operand[0 ]->string.length >ACPI_NAME_SIZE ) || - (operand[1 ]->string.length >ACPI_OEM_ID_SIZE ) || - (operand[2 ]->string.length >ACPI_OEM_TABLE_ID_SIZE )) { -return_ACPI_STATUS (AE_AML_STRING_LIMIT ); - } -/* Find the ACPI table in the RSDT/XSDT */ status = acpi_tb_find_table(operand[0]->string.pointer,
drivers/acpi/acpica/tbfind.c +14 -1
@@ -68,12 +68,25 @@ acpi_statusacpi_tb_find_table (char *signature, char *oem_id, char *oem_table_id, u32 *table_index) { -u32 i;acpi_status status;struct acpi_table_header header; +u32 i;ACPI_FUNCTION_TRACE (tb_find_table); +/* Validate the input table signature */ + +if (!acpi_is_valid_signature (signature)) { +return_ACPI_STATUS (AE_BAD_SIGNATURE ); + } + +/* Don't allow the OEM strings to be too long */ + +if ((strlen (oem_id) >ACPI_OEM_ID_SIZE ) || + (strlen (oem_table_id) >ACPI_OEM_TABLE_ID_SIZE )) { +return_ACPI_STATUS (AE_AML_STRING_LIMIT ); + } +/* Normalize the input strings */ memset (&header,0 ,sizeof (struct acpi_table_header ));
drivers/acpi/acpica/tbutils.c +33 -0
@@ -412,3 +412,36 @@ next_table:return_ACPI_STATUS (AE_OK ); } + +/******************************************************************************* +* +* FUNCTION: acpi_is_valid_signature +* +* PARAMETERS: signature - Sig string to be validated +* +* RETURN: TRUE if signature is correct length and has valid characters +* +* DESCRIPTION: Validate an ACPI table signature. +* +******************************************************************************/ + +u8 acpi_is_valid_signature (char *signature) +{ +u32 i; + +/* Validate the signature length */ + +if (strlen (signature) !=ACPI_NAME_SIZE ) { +return (FALSE); + } + +/* Validate each character in the signature */ + +for (i =0 ; i <ACPI_NAME_SIZE ; i++) { +if (!acpi_ut_valid_acpi_char (signature[i], i)) { +return (FALSE); + } + } + +return (TRUE); +}
Signature · 1 line
1.7.10
PATCH 4/20 ACPICA: Disassembler: Update for new listing mode.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 2ed09bb7619d25f5a5c065c33a8a775a6db3a856 ACPICA commit 2fefacf73825b0ec96bbfc4f70a256735b715d6c
This mode emits AML code along with the ASL code. A new global was needed to ensure the listing mode is completely separate from the debugger verbose mode.
Emits the correct AML offset for the AML code.
The -l option now works for both the compiler and disassembler.
Linux kernel is not affected by this commit.
--- drivers/acpi/acpica/acglobal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/acpica/acglobal.h +1 -1
@@ -307,9 +307,9 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_no_resource_disassembly, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_ignore_noop_operator, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_cstyle_disassembly, TRUE);ACPI_INIT_GLOBAL (u8, acpi_gbl_force_aml_disassembly, FALSE); -ACPI_INIT_GLOBAL(union acpi_parse_object *, acpi_gbl_previous_op, NULL);ACPI_GLOBAL (u8, acpi_gbl_db_opt_disasm); +ACPI_GLOBAL (u8, acpi_gbl_dm_opt_listing);ACPI_GLOBAL (u8, acpi_gbl_db_opt_verbose);ACPI_GLOBAL (u8, acpi_gbl_num_external_methods);ACPI_GLOBAL (u32, acpi_gbl_resolved_external_methods);
Signature · 1 line
1.7.10
PATCH 5/20 ACPICA: Update info messages during ACPICA init.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 4ccf8a1cc499ec8f00345f662a5887483980e1dd
Small cleanup of messages.
--- drivers/acpi/acpica/dsinit.c | 9 +++++++++ drivers/acpi/acpica/tbxfload.c | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-)
drivers/acpi/acpica/dsinit.c +9 -0
@@ -237,6 +237,15 @@ acpi_ds_initialize_objects(u32 table_index,return_ACPI_STATUS (status); } +/* DSDT is always the first AML table */ + +if (ACPI_COMPARE_NAME (table->signature,ACPI_SIG_DSDT )) { +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT , +"\nInitializing Namespace objects:\n" )); + } + +/* Summary of objects initialized */ + ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "Table [%4.4s] (id %4.4X) - %4u Objects with %3u Devices, " "%3u Regions, %3u Methods (%u/%u/%u Serial/Non/Cvt)\n",
drivers/acpi/acpica/tbxfload.c +2 -2
@@ -208,11 +208,11 @@ static acpi_status acpi_tb_load_namespace(void)if (!tables_failed) {ACPI_INFO ((AE_INFO , -"All (%u) ACPI AML tables successfully loaded" , +"%u ACPI AML tables successfully acquired and loaded" , tables_loaded)); }else {ACPI_ERROR ((AE_INFO , -"%u ACPI AML tables loaded, %u failed" , +"%u ACPI AML tables successfully acquired and loaded, %u failed" , tables_loaded, tables_failed)); }
Signature · 1 line
1.7.10
PATCH 6/20 ACPICA: Tables: Fix global table list issues by removing fixed table indexes.
In reply to Lv ZhengACPICA commit c0b38b4c3982c2336ee92a2a14716107248bd941
The fixed table indexes leave holes in the global table list:
1. One hole can be seen when there is only 1 FACS provided by the BIOS.
2. Tow holes can be seen when it is a reduced hardware platform. The holes do not break OSPMs but have broken ACPI debugger "tables" command.
Also the "fixed table indexes" mechanism may make the descriptors of the standard tables installed earlier than DSDT to be overwritten by the descriptors of the fixed tables. For example, FACP disappears from the global table list after DSDT is installed.
This patch fixes all above issues by removing the "fixed table indexes" mechanism which is too complicated to be maintained in a regression safe manner. After removal, the table loader will determine the indexes of the fixed tables. Lv Zheng.
--- drivers/acpi/acpica/acglobal.h | 3 +++ drivers/acpi/acpica/aclocal.h | 6 ++---- drivers/acpi/acpica/actables.h | 7 +++---- drivers/acpi/acpica/tbfadt.c | 6 +++--- drivers/acpi/acpica/tbinstal.c | 40 +++++++++++++++++++++------------------- drivers/acpi/acpica/tbutils.c | 37 ++++++++++++++----------------------- drivers/acpi/acpica/tbxfload.c | 10 +++++----- 7 files changed, 51 insertions(+), 58 deletions(-)
drivers/acpi/acpica/acglobal.h +3 -0
@@ -58,6 +58,9 @@ ACPI_GLOBAL(struct acpi_table_list, acpi_gbl_root_table_list); ACPI_GLOBAL(struct acpi_table_header *, acpi_gbl_DSDT); ACPI_GLOBAL(struct acpi_table_header, acpi_gbl_original_dsdt_header); +ACPI_INIT_GLOBAL (u32, acpi_gbl_dsdt_index,ACPI_INVALID_TABLE_INDEX ); +ACPI_INIT_GLOBAL (u32, acpi_gbl_facs_index,ACPI_INVALID_TABLE_INDEX ); +ACPI_INIT_GLOBAL (u32, acpi_gbl_xfacs_index,ACPI_INVALID_TABLE_INDEX );#if (!ACPI_REDUCED_HARDWARE ) ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_FACS);
drivers/acpi/acpica/aclocal.h +2 -4
@@ -213,11 +213,9 @@ struct acpi_table_list {#define ACPI_ROOT_ORIGIN_ALLOCATED (1)#define ACPI_ROOT_ALLOW_RESIZE (2) -/* Predefined (fixed) table indexes */ +/* Predefined table indexes */ -#define ACPI_TABLE_INDEX_DSDT (0) -#define ACPI_TABLE_INDEX_FACS (1) -#define ACPI_TABLE_INDEX_X_FACS (2) +#define ACPI_INVALID_TABLE_INDEX (0xFFFFFFFF)struct acpi_find_context {char *search_for;
drivers/acpi/acpica/actables.h +3 -4
@@ -154,13 +154,12 @@ void acpi_tb_check_dsdt_header(void);struct acpi_table_header *acpi_tb_copy_dsdt (u32 table_index);void -acpi_tb_install_table_with_override (u32 table_index, -struct acpi_table_desc *new_table_desc, -u8 override); +acpi_tb_install_table_with_override (struct acpi_table_desc *new_table_desc, +u8 override,u32 *table_index);acpi_status acpi_tb_install_fixed_table (acpi_physical_address address, -char *signature,u32 table_index); +char *signature,u32 *table_index);acpi_status acpi_tb_parse_root_table (acpi_physical_address rsdp_address);
drivers/acpi/acpica/tbfadt.c +3 -3
@@ -345,7 +345,7 @@ void acpi_tb_parse_fadt(u32 table_index)/* Obtain the DSDT and FACS tables via their addresses within the FADT */ acpi_tb_install_fixed_table ((acpi_physical_address ) acpi_gbl_FADT.Xdsdt, -ACPI_SIG_DSDT ,ACPI_TABLE_INDEX_DSDT ); +ACPI_SIG_DSDT , &acpi_gbl_dsdt_index);/* If Hardware Reduced flag is set, there is no FACS */
@@ -354,13 +354,13 @@ void acpi_tb_parse_fadt(u32 table_index)acpi_tb_install_fixed_table ((acpi_physical_address ) acpi_gbl_FADT.facs,ACPI_SIG_FACS , -ACPI_TABLE_INDEX_FACS ); + &acpi_gbl_facs_index); }if (acpi_gbl_FADT.Xfacs) {acpi_tb_install_fixed_table ((acpi_physical_address ) acpi_gbl_FADT.Xfacs,ACPI_SIG_FACS , -ACPI_TABLE_INDEX_X_FACS ); + &acpi_gbl_xfacs_index); } } }
drivers/acpi/acpica/tbinstal.c +21 -19
@@ -100,9 +100,9 @@ acpi_tb_compare_tables(struct acpi_table_desc *table_desc, u32 table_index)* * FUNCTION: acpi_tb_install_table_with_override * -* PARAMETERS: table_index - Index into root table array -* new_table_desc - New table descriptor to install +* PARAMETERS: new_table_desc - New table descriptor to install * override - Whether override should be performed +* table_index - Where the table index is returned * * RETURN: None *
@@ -114,12 +114,14 @@ acpi_tb_compare_tables(struct acpi_table_desc *table_desc, u32 table_index)******************************************************************************/ void -acpi_tb_install_table_with_override (u32 table_index, -struct acpi_table_desc *new_table_desc, -u8 override) +acpi_tb_install_table_with_override (struct acpi_table_desc *new_table_desc, +u8 override,u32 *table_index) { +u32 i; +acpi_status status; -if (table_index >= acpi_gbl_root_table_list.current_table_count) { + status =acpi_tb_get_next_table_descriptor (&i,NULL ); +if (ACPI_FAILURE (status)) {return ; }
@@ -134,8 +136,7 @@ acpi_tb_install_table_with_override(u32 table_index,acpi_tb_override_table (new_table_desc); } -acpi_tb_init_table_descriptor (&acpi_gbl_root_table_list. - tables[table_index], +acpi_tb_init_table_descriptor (&acpi_gbl_root_table_list.tables[i], new_table_desc->address, new_table_desc->flags, new_table_desc->pointer);
@@ -143,9 +144,13 @@ acpi_tb_install_table_with_override(u32 table_index,acpi_tb_print_table_header (new_table_desc->address, new_table_desc->pointer); +/* This synchronizes acpi_gbl_dsdt_index */ + + *table_index = i; +/* Set the global integer width (based upon revision of the DSDT) */ -if (table_index ==ACPI_TABLE_INDEX_DSDT ) { +if (i == acpi_gbl_dsdt_index) {acpi_ut_set_integer_width (new_table_desc->pointer->revision); } }
@@ -157,7 +162,7 @@ acpi_tb_install_table_with_override(u32 table_index,* PARAMETERS: address - Physical address of DSDT or FACS * signature - Table signature, NULL if no need to * match -* table_index - Index into root table array +* table_index - Where the table index is returned * * RETURN: Status *
@@ -168,7 +173,7 @@ acpi_tb_install_table_with_override(u32 table_index,acpi_status acpi_tb_install_fixed_table (acpi_physical_address address, -char *signature,u32 table_index) +char *signature,u32 *table_index) {struct acpi_table_desc new_table_desc;acpi_status status;
@@ -200,7 +205,9 @@ acpi_tb_install_fixed_table(acpi_physical_address address, goto release_and_exit; } -acpi_tb_install_table_with_override (table_index, &new_table_desc, TRUE); +/* Add the table to the global root table list */ + +acpi_tb_install_table_with_override (&new_table_desc, TRUE, table_index); release_and_exit:
@@ -355,13 +362,8 @@ acpi_tb_install_standard_table(acpi_physical_address address,/* Add the table to the global root table list */ - status =acpi_tb_get_next_table_descriptor (&i,NULL ); -if (ACPI_FAILURE (status)) { - goto release_and_exit; - } - - *table_index = i; -acpi_tb_install_table_with_override (i, &new_table_desc, override); +acpi_tb_install_table_with_override (&new_table_desc, override, + table_index); release_and_exit:
drivers/acpi/acpica/tbutils.c +14 -23
@@ -74,22 +74,20 @@ acpi_status acpi_tb_initialize_facs(void)if (acpi_gbl_reduced_hardware) { acpi_gbl_FACS =NULL ;return (AE_OK ); - } - - (void )acpi_get_table_by_index (ACPI_TABLE_INDEX_FACS , - ACPI_CAST_INDIRECT_PTR(struct - acpi_table_header, - &acpi_gbl_facs32)); - (void )acpi_get_table_by_index (ACPI_TABLE_INDEX_X_FACS , - ACPI_CAST_INDIRECT_PTR(struct - acpi_table_header, - &acpi_gbl_facs64)); - -if (acpi_gbl_facs64 - && (!acpi_gbl_facs32 || !acpi_gbl_use32_bit_facs_addresses)) { - acpi_gbl_FACS = acpi_gbl_facs64; - }else if (acpi_gbl_facs32) { + }else if (acpi_gbl_FADT.Xfacs && + (!acpi_gbl_FADT.facs + || !acpi_gbl_use32_bit_facs_addresses)) { + (void )acpi_get_table_by_index (acpi_gbl_xfacs_index, + ACPI_CAST_INDIRECT_PTR(struct + acpi_table_header, + &acpi_gbl_facs32)); acpi_gbl_FACS = acpi_gbl_facs32; + }else if (acpi_gbl_FADT.facs) { + (void )acpi_get_table_by_index (acpi_gbl_facs_index, + ACPI_CAST_INDIRECT_PTR(struct + acpi_table_header, + &acpi_gbl_facs64)); + acpi_gbl_FACS = acpi_gbl_facs64; }/* If there is no FACS, just continue. There was already an error msg */
@@ -192,7 +190,7 @@ struct acpi_table_header *acpi_tb_copy_dsdt(u32 table_index)acpi_tb_uninstall_table (table_desc);acpi_tb_init_table_descriptor (&acpi_gbl_root_table_list. - tables[ACPI_TABLE_INDEX_DSDT ], + tables[acpi_gbl_dsdt_index],ACPI_PTR_TO_PHYSADDR (new_table),ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL , new_table);
@@ -369,13 +367,6 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address) table_entry_size); table_entry =ACPI_ADD_PTR (u8, table,sizeof (struct acpi_table_header )); -/* -* First three entries in the table array are reserved for the DSDT -* and 32bit/64bit FACS, which are not actually present in the -* RSDT/XSDT - they come from the FADT -*/ - acpi_gbl_root_table_list.current_table_count =3 ; -/* Initialize the root table array from the RSDT/XSDT */ for (i =0 ; i < table_count; i++) {
drivers/acpi/acpica/tbxfload.c +5 -5
@@ -116,12 +116,12 @@ static acpi_status acpi_tb_load_namespace(void)if (!acpi_gbl_root_table_list.current_table_count || !ACPI_COMPARE_NAME (& (acpi_gbl_root_table_list. - tables[ACPI_TABLE_INDEX_DSDT ].signature), + tables[acpi_gbl_dsdt_index].signature),ACPI_SIG_DSDT ) ||ACPI_FAILURE (acpi_tb_validate_table (&acpi_gbl_root_table_list. - tables[ACPI_TABLE_INDEX_DSDT ]))) { + tables[acpi_gbl_dsdt_index]))) { status =AE_NO_ACPI_TABLES ; goto unlock_and_exit; }
@@ -133,7 +133,7 @@ static acpi_status acpi_tb_load_namespace(void)* .Pointer field is not validated until after call to acpi_tb_validate_table. */ acpi_gbl_DSDT = - acpi_gbl_root_table_list.tables[ACPI_TABLE_INDEX_DSDT ].pointer; + acpi_gbl_root_table_list.tables[acpi_gbl_dsdt_index].pointer;/* * Optionally copy the entire DSDT to local memory (instead of simply
@@ -142,7 +142,7 @@ static acpi_status acpi_tb_load_namespace(void)* the DSDT. */ if (acpi_gbl_copy_dsdt_locally) { - new_dsdt =acpi_tb_copy_dsdt (ACPI_TABLE_INDEX_DSDT ); + new_dsdt =acpi_tb_copy_dsdt (acpi_gbl_dsdt_index);if (new_dsdt) { acpi_gbl_DSDT = new_dsdt; }
@@ -159,7 +159,7 @@ static acpi_status acpi_tb_load_namespace(void)/* Load and parse tables */ - status =acpi_ns_load_table (ACPI_TABLE_INDEX_DSDT , acpi_gbl_root_node); + status =acpi_ns_load_table (acpi_gbl_dsdt_index, acpi_gbl_root_node);if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO , status,"[DSDT] table load failed" )); tables_failed++;
Signature · 1 line
1.7.10
PATCH 7/20 ACPICA: Tables: Cleanup to reduce FACS globals.
In reply to Lv ZhengACPICA commit 3f42ba76e2a0453976d3108296d5f656fdf2bd6e
In this patch, FACS table mapping is also tuned a bit so that only the selected FACS table will be mapped by the OSPM (mapped on demand) and the FACS related global variables can be reduced. Lv Zheng.
--- drivers/acpi/acpica/acglobal.h | 2 -- drivers/acpi/acpica/hwxfsleep.c | 15 ++------------- drivers/acpi/acpica/tbutils.c | 9 +++++---- 3 files changed, 7 insertions(+), 19 deletions(-)
drivers/acpi/acpica/acglobal.h +0 -2
@@ -64,8 +64,6 @@ ACPI_INIT_GLOBAL(u32, acpi_gbl_xfacs_index, ACPI_INVALID_TABLE_INDEX);#if (!ACPI_REDUCED_HARDWARE ) ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_FACS); -ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_facs32); -ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_facs64);#endif /* !ACPI_REDUCED_HARDWARE */
drivers/acpi/acpica/hwxfsleep.c +2 -13
@@ -160,19 +160,8 @@ acpi_set_firmware_waking_vectors(acpi_physical_address physical_address,ACPI_FUNCTION_TRACE (acpi_set_firmware_waking_vectors); -/* If Hardware Reduced flag is set, there is no FACS */ - -if (acpi_gbl_reduced_hardware) { -return_ACPI_STATUS (AE_OK ); - } - -if (acpi_gbl_facs32) { - (void )acpi_hw_set_firmware_waking_vectors (acpi_gbl_facs32, - physical_address, - physical_address64); - } -if (acpi_gbl_facs64) { - (void )acpi_hw_set_firmware_waking_vectors (acpi_gbl_facs64, +if (acpi_gbl_FACS) { + (void )acpi_hw_set_firmware_waking_vectors (acpi_gbl_FACS, physical_address, physical_address64); }
drivers/acpi/acpica/tbutils.c +5 -4
@@ -68,6 +68,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size);acpi_status acpi_tb_initialize_facs (void ) { +struct acpi_table_facs *facs;/* If Hardware Reduced flag is set, there is no FACS */
@@ -80,14 +81,14 @@ acpi_status acpi_tb_initialize_facs(void) (void )acpi_get_table_by_index (acpi_gbl_xfacs_index, ACPI_CAST_INDIRECT_PTR(struct acpi_table_header, - &acpi_gbl_facs32)); - acpi_gbl_FACS = acpi_gbl_facs32; + &facs)); + acpi_gbl_FACS = facs; }else if (acpi_gbl_FADT.facs) { (void )acpi_get_table_by_index (acpi_gbl_facs_index, ACPI_CAST_INDIRECT_PTR(struct acpi_table_header, - &acpi_gbl_facs64)); - acpi_gbl_FACS = acpi_gbl_facs64; + &facs)); + acpi_gbl_FACS = facs; }/* If there is no FACS, just continue. There was already an error msg */
Signature · 1 line
1.7.10
PATCH 8/20 ACPICA: Headers: Fix some comments, no functional change.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 539f8c03fe64305725bd85343e42f3b6c42aad14
A couple typos and long lines.
--- include/acpi/platform/acenv.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
include/acpi/platform/acenv.h +5 -5
@@ -89,8 +89,8 @@#endif /* -* acpi_bin/acpi_dump/acpi_help/acpi_names/acpi_src/acpi_xtract/Example configuration. -* All single threaded. +* acpi_bin/acpi_dump/acpi_help/acpi_names/acpi_src/acpi_xtract/Example +* configuration. All single threaded. */ #if (defined ACPI_BIN_APP) || \ (defined ACPI_DUMP_APP) || \
@@ -123,7 +123,7 @@#define ACPI_USE_NATIVE_RSDP_POINTER #endif -/* acpi_dump configuration. Native mapping used if provied by OSPMs */ +/* acpi_dump configuration. Native mapping used if provided by the host */ #ifdef ACPI_DUMP_APP #define ACPI_USE_NATIVE_MEMORY_MAPPING
@@ -323,8 +323,8 @@* ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and * the standard header files may be used. * -* The ACPICA subsystem only uses low level C library functions that do not call -* operating system services and may therefore be inlined in the code. +* The ACPICA subsystem only uses low level C library functions that do not +* call operating system services and may therefore be inlined in the code. * * It may be necessary to tailor these include files to the target * generation environment.
Signature · 1 line
1.7.10
PATCH 9/20 ACPICA: acpinames: Add new options and wildcard support.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 0ecf5b5a41c3d2e09af48f0fdbc9ae784f631788
- Add wilcard support for input filenames.
- Add -l option to load tables and exit, no display. This is useful for validation of the namespace during BIOS generation.
- Add -x option for specifying debug level.
Linux kernel is not affected by this commit.
--- drivers/acpi/acpica/acutils.h | 2 +- drivers/acpi/acpica/utmisc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/acpica/acutils.h +1 -1
@@ -517,7 +517,7 @@ const struct acpi_exception_info *acpi_ut_validate_exception(acpi_statusu8 acpi_ut_is_pci_root_bridge (char *id); -#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP ) +#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP || definedACPI_NAMES_APP )u8 acpi_ut_is_aml_table (struct acpi_table_header *table);#endif
drivers/acpi/acpica/utmisc.c +1 -1
@@ -75,7 +75,7 @@ u8 acpi_ut_is_pci_root_bridge(char *id)return (FALSE); } -#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP ) +#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP || definedACPI_NAMES_APP )/******************************************************************************* * * FUNCTION: acpi_ut_is_aml_table
Signature · 1 line
1.7.10
PATCH 10/20 ACPICA: acpiexec/acpinames: Support very large number of ACPI tables.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit ca3bd4c5cdc39a9009280032adbbc20f34e94c47
Fix a couple of issues with >40 ACPI tables.
Return exit error for acpinames to enable use with BIOS builds.
The new exported function is used by acpinames. For Linux kernel, this change is a no-op.
--- drivers/acpi/acpica/actables.h | 5 +++++ drivers/acpi/acpica/tbxfload.c | 17 ++++++++++++----- drivers/acpi/acpica/utfileio.c | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-)
drivers/acpi/acpica/actables.h +5 -0
@@ -165,4 +165,9 @@ acpi_status acpi_tb_parse_root_table(acpi_physical_address rsdp_address);u8 acpi_is_valid_signature (char *signature); +/* +* tbxfload +*/ +acpi_status acpi_tb_load_namespace (void ); +#endif /* __ACTABLES_H__ */
drivers/acpi/acpica/tbxfload.c +12 -5
@@ -51,9 +51,6 @@#define _COMPONENT ACPI_TABLESACPI_MODULE_NAME ("tbxfload" ) -/* Local prototypes */ -static acpi_status acpi_tb_load_namespace (void ); -/******************************************************************************* * * FUNCTION: acpi_load_tables
@@ -65,7 +62,6 @@ static acpi_status acpi_tb_load_namespace(void);* DESCRIPTION: Load the ACPI tables from the RSDT/XSDT * ******************************************************************************/ -acpi_status __init acpi_load_tables (void ) {acpi_status status;
@@ -75,6 +71,13 @@ acpi_status __init acpi_load_tables(void)/* Load the namespace from the tables */ status =acpi_tb_load_namespace (); + +/* Don't let single failures abort the load */ + +if (status ==AE_CTRL_TERMINATE ) { + status =AE_OK ; + } +if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO , status,"While loading namespace from ACPI tables" ));
@@ -97,7 +100,7 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_load_tables)* the RSDT/XSDT. * ******************************************************************************/ -static acpi_status acpi_tb_load_namespace (void ) +acpi_status acpi_tb_load_namespace (void ) {acpi_status status;u32 i;
@@ -214,6 +217,10 @@ static acpi_status acpi_tb_load_namespace(void)ACPI_ERROR ((AE_INFO ,"%u ACPI AML tables successfully acquired and loaded, %u failed" , tables_loaded, tables_failed)); + +/* Indicate at least one failure */ + + status =AE_CTRL_TERMINATE ; } unlock_and_exit:
drivers/acpi/acpica/utfileio.c +1 -1
@@ -312,7 +312,7 @@ acpi_ut_read_table_from_file(char *filename, struct acpi_table_header ** table)/* Get the entire file */ fprintf (stderr, -"Reading ACPI table from file %10s - Length %.8u (0x%06X)\n" , +"Reading ACPI table from file %12s - Length %.8u (0x%06X)\n" , filename, file_size, file_size); status =acpi_ut_read_table (file, table, &table_length);
Signature · 1 line
1.7.10
PATCH 11/20 ACPICA: Table handling: Cleanup and update debug output for tools.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 93862bd7a227543bc617d822ef5c4f8a5d68b519
Add output of table OEM ID along with signature to support lots of SSDTs.
Cleanup use of table pointers.
--- drivers/acpi/acpica/dsinit.c | 11 +++++---- drivers/acpi/acpica/tbxfload.c | 53 ++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 34 deletions(-)
drivers/acpi/acpica/dsinit.c +6 -5
@@ -247,11 +247,12 @@ acpi_ds_initialize_objects(u32 table_index,/* Summary of objects initialized */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT , -"Table [%4.4s] (id %4.4X) - %4u Objects with %3u Devices, " -"%3u Regions, %3u Methods (%u/%u/%u Serial/Non/Cvt)\n" , - table->signature, owner_id, info.object_count, - info.device_count, info.op_region_count, - info.method_count, info.serial_method_count, +"Table [%4.4s:%8.8s] (id %.2X) - %4u Objects with %3u Devices, " +"%3u Regions, %4u Methods (%u/%u/%u Serial/Non/Cvt)\n" , + table->signature, table->oem_table_id, owner_id, + info.object_count, info.device_count, + info.op_region_count, info.method_count, + info.serial_method_count, info.non_serial_method_count, info.serialized_method_count));
drivers/acpi/acpica/tbxfload.c +24 -29
92 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH 12/20 ACPICA: Add additional debug info/statements.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 74094ca9f51e2652a9b5f01722d8640a653cc75a
For _REG methods and module-level code blocks. For acpiexec, add deletion of module-level blocks in case of an early abort.
--- drivers/acpi/acpica/aclocal.h | 7 +++++++ drivers/acpi/acpica/evregion.c | 22 ++++++++++++++++++---- drivers/acpi/acpica/nseval.c | 3 ++- drivers/acpi/acpica/nsutils.c | 17 +++++++++++++++++ drivers/acpi/acpica/psloop.c | 14 +++++++++++++- 5 files changed, 57 insertions(+), 6 deletions(-)
drivers/acpi/acpica/aclocal.h +7 -0
@@ -406,6 +406,13 @@ struct acpi_simple_repair_info {#define ACPI_NUM_RTYPES 5/* Number of actual object types */ +/* Info for running the _REG methods */ + +struct acpi_reg_walk_info { +acpi_adr_space_type space_id; +u32 reg_run_count; +}; +/***************************************************************************** * * Event typedefs and structs
drivers/acpi/acpica/evregion.c +18 -4
@@ -626,9 +626,17 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, acpi_adr_space_type space_id) {acpi_status status; +struct acpi_reg_walk_info info;ACPI_FUNCTION_TRACE (ev_execute_reg_methods); + info.space_id = space_id; + info.reg_run_count =0 ; + +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES , +" Running _REG methods for SpaceId %s\n" , +acpi_ut_get_region_name (info.space_id))); +/* * Run all _REG methods for all Operation Regions for this space ID. This * is a separate walk in order to handle any interdependencies between
@@ -637,7 +645,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,*/ status =acpi_ns_walk_namespace (ACPI_TYPE_ANY , node,ACPI_UINT32_MAX ,ACPI_NS_WALK_UNLOCK , acpi_ev_reg_run, -NULL , &space_id,NULL ); +NULL , &info,NULL );/* Special case for EC: handle "orphan" _REG methods with no region */
@@ -645,6 +653,11 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,acpi_ev_orphan_ec_reg_method (node); } +ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES , +" Executed %u _REG methods for SpaceId %s\n" , + info.reg_run_count, +acpi_ut_get_region_name (info.space_id))); +return_ACPI_STATUS (status); }
@@ -664,10 +677,10 @@ acpi_ev_reg_run(acpi_handle obj_handle, {union acpi_operand_object *obj_desc;struct acpi_namespace_node *node; -acpi_adr_space_type space_id;acpi_status status; +struct acpi_reg_walk_info *info; - space_id = *ACPI_CAST_PTR (acpi_adr_space_type, context); + info = ACPI_CAST_PTR(struct acpi_reg_walk_info, context);/* Convert and validate the device handle */
@@ -696,13 +709,14 @@ acpi_ev_reg_run(acpi_handle obj_handle,/* Object is a Region */ -if (obj_desc->region.space_id != space_id) { +if (obj_desc->region.space_id != info->space_id) {/* This region is for a different address space, just ignore it */ return (AE_OK ); } + info->reg_run_count++; status =acpi_ev_execute_reg_method (obj_desc,ACPI_REG_CONNECT );return (status); }
drivers/acpi/acpica/nseval.c +2 -1
@@ -465,7 +465,8 @@ acpi_ns_exec_module_code(union acpi_operand_object *method_obj, status =acpi_ns_evaluate (info); -ACPI_DEBUG_PRINT ((ACPI_DB_INIT ,"Executed module-level code at %p\n" , +ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES , +"Executed module-level code at %p\n" , method_obj->method.aml_start));/* Delete a possible implicit return value (in slack mode) */
drivers/acpi/acpica/nsutils.c +17 -0
@@ -596,6 +596,23 @@ void acpi_ns_terminate(void)ACPI_FUNCTION_TRACE (ns_terminate); +#ifdef ACPI_EXEC_APP + { +union acpi_operand_object *prev; +union acpi_operand_object *next; + +/* Delete any module-level code blocks */ + + next = acpi_gbl_module_code_list; +while (next) { + prev = next; + next = next->method.mutex; + prev->method.mutex =NULL ;/* Clear the Mutex (cheated) field */ +acpi_ut_remove_reference (prev); + } + } +#endif +/* * Free the entire namespace -- all nodes and all objects * attached to the nodes
drivers/acpi/acpica/psloop.c +13 -1
@@ -321,6 +321,8 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op,union acpi_operand_object *method_obj;struct acpi_namespace_node *parent_node; +ACPI_FUNCTION_TRACE (ps_link_module_code); +/* Get the tail of the list */ prev = next = acpi_gbl_module_code_list;
@@ -340,9 +342,13 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op, method_obj =acpi_ut_create_internal_object (ACPI_TYPE_METHOD );if (!method_obj) { -return ; + return_VOID; } +ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , +"Create/Link new code block: %p\n" , + method_obj)); +if (parent_op->common.node) { parent_node = parent_op->common.node; }else {
@@ -367,8 +373,14 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op, prev->method.mutex = method_obj; } }else { +ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , +"Appending to existing code block: %p\n" , + prev)); + prev->method.aml_length += aml_length; } + + return_VOID; }/*******************************************************************************
Signature · 1 line
1.7.10
PATCH 13/20 ACPICA: Debugger: Add option to display namespace summary/counts.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit bba222c15c2ce79076eb3a5e9d4d5f7120db8a00
If "Objects" command is invoked with no arguments, the counts for each object type are displayed.
Linux kernel is not affected by this commit as currently debugger is not enabled in the Linux kernel.
--- drivers/acpi/acpica/acglobal.h | 4 ++-- drivers/acpi/acpica/aclocal.h | 4 ++++ include/acpi/actypes.h | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-)
drivers/acpi/acpica/acglobal.h +2 -2
@@ -346,8 +346,8 @@ ACPI_GLOBAL(char, acpi_gbl_db_debug_filename[ACPI_DB_LINE_BUFFER_SIZE]);/* * Statistic globals */ -ACPI_GLOBAL (u16, acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX +1 ]); -ACPI_GLOBAL (u16, acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX +1 ]); +ACPI_GLOBAL (u16, acpi_gbl_obj_type_count[ACPI_TOTAL_TYPES ]); +ACPI_GLOBAL (u16, acpi_gbl_node_type_count[ACPI_TOTAL_TYPES ]);ACPI_GLOBAL (u16, acpi_gbl_obj_type_count_misc);ACPI_GLOBAL (u16, acpi_gbl_node_type_count_misc);ACPI_GLOBAL (u32, acpi_gbl_num_nodes);
drivers/acpi/acpica/aclocal.h +4 -0
@@ -1131,6 +1131,10 @@ struct acpi_integrity_info {#define ACPI_DB_CONSOLE_OUTPUT 0x02#define ACPI_DB_DUPLICATE_OUTPUT 0x03 +struct acpi_object_info { +u32 types[ACPI_TOTAL_TYPES ]; +}; +/***************************************************************************** * * Debug
include/acpi/actypes.h +2 -0
@@ -662,6 +662,7 @@ typedef u32 acpi_object_type;#define ACPI_TYPE_DEBUG_OBJECT 0x10#define ACPI_TYPE_EXTERNAL_MAX 0x10 +#define ACPI_NUM_TYPES (ACPI_TYPE_EXTERNAL_MAX + 1)/* * These are object types that do not map directly to the ACPI
@@ -683,6 +684,7 @@ typedef u32 acpi_object_type;#define ACPI_TYPE_LOCAL_SCOPE 0x1B/* 1 Name, multiple object_list Nodes */ #define ACPI_TYPE_NS_NODE_MAX 0x1B/* Last typecode used within a NS Node */ +#define ACPI_TOTAL_TYPES (ACPI_TYPE_NS_NODE_MAX + 1)/* * These are special object types that never appear in
Signature · 1 line
1.7.10
PATCH 14/20 ACPICA: Make the max-number-of-loops runtime configurable.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit a9d9c2d0c2d077bb3175ec9c252cf0e5da3efd45
Was previously compile-time only.
Add support option for acpiexec.
--- drivers/acpi/acpica/acglobal.h | 4 ++++ drivers/acpi/acpica/dscontrol.c | 2 +- drivers/acpi/acpica/utinit.c | 1 + include/acpi/acconfig.h | 4 ---- 4 files changed, 6 insertions(+), 5 deletions(-)
drivers/acpi/acpica/acglobal.h +4 -0
@@ -236,6 +236,10 @@ ACPI_INIT_GLOBAL(u32, acpi_gbl_nesting_level, 0); ACPI_GLOBAL(struct acpi_thread_state *, acpi_gbl_current_walk_list); +/* Maximum number of While() loop iterations before forced abort */ + +ACPI_GLOBAL (u16, acpi_gbl_max_loop_iterations); +/* Control method single step flag */ ACPI_GLOBAL (u8, acpi_gbl_cm_single_step);
drivers/acpi/acpica/dscontrol.c +1 -1
@@ -212,7 +212,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,*/ control_state->control.loop_count++;if (control_state->control.loop_count > -ACPI_MAX_LOOP_ITERATIONS ) { + acpi_gbl_max_loop_iterations) { status =AE_AML_INFINITE_LOOP ;break ; }
drivers/acpi/acpica/utinit.c +1 -0
@@ -207,6 +207,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_debugger_configuration =DEBUGGER_THREADING ; acpi_gbl_osi_mutex =NULL ; acpi_gbl_reg_methods_executed = FALSE; + acpi_gbl_max_loop_iterations =0xFFFF ;/* Hardware oriented */
include/acpi/acconfig.h +0 -4
@@ -136,10 +136,6 @@#define ACPI_ROOT_TABLE_SIZE_INCREMENT 4 -/* Maximum number of While() loop iterations before forced abort */ - -#define ACPI_MAX_LOOP_ITERATIONS 0xFFFF -/* Maximum sleep allowed via Sleep() operator */ #define ACPI_MAX_SLEEP 2000/* 2000 millisec == two seconds */
Signature · 1 line
1.7.10
PATCH 15/20 ACPICA: Header support to improve compatibility with MSVC.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 5b4087fba991d8383046b550bbe22f3d8d9b9c8f
Needed to improve MSVC editor support for symbols.
For Linux kernel, this change is a no-op.
--- include/acpi/platform/acenv.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
include/acpi/platform/acenv.h +5 -4
@@ -70,13 +70,14 @@#ifdef ACPI_ASL_COMPILER #define ACPI_APPLICATION -#define ACPI_DISASSEMBLER #define ACPI_DEBUG_OUTPUT #define ACPI_CONSTANT_EVAL_ONLY #define ACPI_LARGE_NAMESPACE_NODE #define ACPI_DATA_TABLE_DISASSEMBLY #define ACPI_SINGLE_THREADED #define ACPI_32BIT_PHYSICAL_ADDRESS + +#define ACPI_DISASSEMBLER 1#endif /* acpi_exec configuration. Multithreaded with full AML debugger */
@@ -151,12 +152,12 @@#define ACPI_USE_LOCAL_CACHE #endif -/* Common debug support */ +/* Common debug/disassembler support */ #ifdef ACPI_FULL_DEBUG -#define ACPI_DEBUGGER #define ACPI_DEBUG_OUTPUT -#define ACPI_DISASSEMBLER +#define ACPI_DEBUGGER 1 +#define ACPI_DISASSEMBLER 1#endif
Signature · 1 line
1.7.10
PATCH 16/20 ACPICA: Debugger: Split debugger initialization/termination APIs.
In reply to Lv ZhengACPICA commit 7a3f22baab000b186779dac64ad71d9776b8f432
It is likely that the debugger is enabled only when a userspace program explicitly tells a kernel to do so, so it shouldn't be initialized as early as current implementation.
The only tool requiring ACPI_DEBUGGER is acpiexec, so acpiexec need to call the new APIs by itself. And BSD developers may also get notified to invoke the APIs for DDB enabling. Lv Zheng.
This patch doesn't affect Linux kernel as debugger is currently not enabled in the Linux kernel.
--- drivers/acpi/acpica/acdebug.h | 4 ---- drivers/acpi/acpica/utxface.c | 7 ------- drivers/acpi/acpica/utxfinit.c | 11 ----------- include/acpi/acpixf.h | 3 +++ 4 files changed, 3 insertions(+), 22 deletions(-)
drivers/acpi/acpica/acdebug.h +0 -4
@@ -77,10 +77,6 @@ struct acpi_db_execute_walk {/* * dbxface - external debugger interfaces */ -acpi_status acpi_db_initialize (void ); - -void acpi_db_terminate (void ); -acpi_status acpi_db_single_step (struct acpi_walk_state *walk_state,union acpi_parse_object *op,u32 op_type);
drivers/acpi/acpica/utxface.c +0 -7
@@ -92,13 +92,6 @@ acpi_status __init acpi_terminate(void)acpi_ut_mutex_terminate (); -#ifdef ACPI_DEBUGGER - -/* Shut down the debugger */ - -acpi_db_terminate (); -#endif -/* Now we can shutdown the OS-dependent layer */ status =acpi_os_terminate ();
drivers/acpi/acpica/utxfinit.c +0 -11
@@ -124,17 +124,6 @@ acpi_status __init acpi_initialize_subsystem(void)return_ACPI_STATUS (status); } -/* If configured, initialize the AML debugger */ - -#ifdef ACPI_DEBUGGER - status =acpi_db_initialize (); -if (ACPI_FAILURE (status)) { -ACPI_EXCEPTION ((AE_INFO , status, -"During Debugger initialization" )); -return_ACPI_STATUS (status); - } -#endif -return_ACPI_STATUS (AE_OK ); }
include/acpi/acpixf.h +3 -0
@@ -917,6 +917,9 @@ ACPI_DBG_DEPENDENT_RETURN_VOID(void ACPI_APP_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(1) void ACPI_INTERNAL_VAR_XFACE acpi_log_error(const char *format, ...)) +acpi_status acpi_initialize_debugger (void ); + +void acpi_terminate_debugger (void );/* * Divergences
Signature · 1 line
1.7.10
PATCH 17/20 ACPICA: Disassembler: Cleanup acpi_gbl_db_opt_disasm.
In reply to Lv ZhengACPICA commit 969989cf7f85e2a2a0cd048cd25fc706246a48a2
This patch cleans up the following global variable - acpi_gbl_db_opt_disasm:
The setting is used to control the full disassembly feature for iasl. ACPI debugger (acpiexec) shall have nothing to do with it. Actually, acpiexec never links to ad_aml_disassemble().
This patch thus renames this global option to acpi_gbl_dm_opt_disasm and removes all acpiexec and debugger references on it. Lv Zheng.
This patch doesn't affect Linux kernel.
--- drivers/acpi/acpica/acglobal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/acpica/acglobal.h +1 -1
@@ -313,7 +313,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_ignore_noop_operator, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_cstyle_disassembly, TRUE);ACPI_INIT_GLOBAL (u8, acpi_gbl_force_aml_disassembly, FALSE); -ACPI_GLOBAL (u8, acpi_gbl_db_opt_disasm); +ACPI_GLOBAL (u8, acpi_gbl_dm_opt_disasm);ACPI_GLOBAL (u8, acpi_gbl_dm_opt_listing);ACPI_GLOBAL (u8, acpi_gbl_db_opt_verbose);ACPI_GLOBAL (u8, acpi_gbl_num_external_methods);
Signature · 1 line
1.7.10
PATCH 18/20 ACPICA: Disassembler: Cleanup acpi_gbl_db_opt_verbose acpiexec usage.
In reply to Lv ZhengACPICA commit 42d7ad7bfb1cfb95183c1386c77509f2036f521d
When acpi_gbl_db_opt_verbose is used in acpi_dm_descending_op() (invoked by acpi_dm_disassemble()), it is actually exported by the disassembler but used by the debugger to distinguish the output of the disassembler for different debugger commands. It is by default TRUE but is set to FALSE for control method disassembly command - "disassemble". So it's initialization should be a part of the ACPI_DISASSEMBLER conditioned code. This patch uses ACPI_INIT_GLOBAL to achieve a clean manner so that when ACPI_DISASSEMBLER is not defined, ACPI_DEBUGGER conditioned code needn't link to this option. Since it is a disassembler exported variable, it is renamed to acpi_gbl_dm_opt_Verbose in this patch.
As VERBOSE_PRINT() macro has only one user, this patch also removes the definition of this macro. Lv Zheng.
This patch doesn't affect Linux kernel.
--- drivers/acpi/acpica/acdebug.h | 3 --- drivers/acpi/acpica/acglobal.h | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-)
drivers/acpi/acpica/acdebug.h +0 -3
@@ -67,9 +67,6 @@ struct acpi_db_execute_walk { };#define PARAM_LIST (pl) pl -#define DBTEST_OUTPUT_LEVEL (lvl) if (acpi_gbl_db_opt_verbose) -#define VERBOSE_PRINT (fp) DBTEST_OUTPUT_LEVEL(lvl) {\ - acpi_os_printf PARAM_LIST(fp);}#define EX_NO_SINGLE_STEP 1#define EX_SINGLE_STEP 2
drivers/acpi/acpica/acglobal.h +1 -1
@@ -312,10 +312,10 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_no_resource_disassembly, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_ignore_noop_operator, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_cstyle_disassembly, TRUE);ACPI_INIT_GLOBAL (u8, acpi_gbl_force_aml_disassembly, FALSE); +ACPI_INIT_GLOBAL (u8, acpi_gbl_dm_opt_verbose, TRUE);ACPI_GLOBAL (u8, acpi_gbl_dm_opt_disasm);ACPI_GLOBAL (u8, acpi_gbl_dm_opt_listing); -ACPI_GLOBAL (u8, acpi_gbl_db_opt_verbose);ACPI_GLOBAL (u8, acpi_gbl_num_external_methods);ACPI_GLOBAL (u32, acpi_gbl_resolved_external_methods); ACPI_GLOBAL(struct acpi_external_list *, acpi_gbl_external_list);
Signature · 1 line
1.7.10
PATCH 19/20 ACPICA: Debugger: Cleanup debugging outputs to dump name path without trailing underscores.
In reply to Lv ZhengACPICA commit 51a49c2fb4a73f302a6df2b8ddc1350dd261684d
It is better to use unified ASL path name to interact with the developers.
There are following acpi_ns_build_normalized_pathname() users invoking it for debugging purposes (acpiexec test results are attached):
1. acpi_ut_display_init_pathname (acpi_ns_handle_to_pathname):
---------------------------------------------
Initializing Region \_SB.H_EC.ECF2
---------------------------------------------
2. acpi_ns_print_node_pathname (acpi_ns_handle_to_pathname):
---------------------------------------------
- ex \_SB.H_EC._STA
Evaluating \_SB.H_EC._STA
---------------------------------------------3. acpi_ds_print_node_pathname (acpi_ns_handle_to_pathname):
---------------------------------------------
- level 211b console
- execute \M1
...
**** Exception AE_AML_UNINITIALIZED_ARG during execution of method [\M1] (Node 009CB6B8)
---------------------------------------------
4. acpi_ex_dump_reference_obj (acpi_ns_handle_to_pathname):
---------------------------------------------
- dump \_TZ.FAN4._PR0
...
[00] 00835E98 [Object Reference] Type [Named Object] 05 00828878 \_TZ.FN04
---------------------------------------------
5. acpi_db_bus_walk (acpi_ns_handle_to_pathname):
---------------------------------------------
- businfo
\_SB.PCI0 Type 6
...
---------------------------------------------
6. acpi_db_walk_and_match_name (acpi_ns_handle_to_pathname):
---------------------------------------------
- find _PR0
\_TZ.FAN4._PR0 Package 002D8DF8 01 Elements 01
---------------------------------------------
7. acpi_db_walk_for_specific_objects (acpi_ns_handle_to_pathname):
---------------------------------------------
- methods
...
\_SB.PCI0._PRT Method 0026D918 01 Args 0 Len 0005 Aml 0026B199
...
---------------------------------------------
8. acpi_db_decode_and_dispaly_object (acpi_get_name):
---------------------------------------------
- gpes
Block 0 - Info 003AC7B0 device_node 003A0E08 [\_GPE] - FADT-defined GPE block
...
---------------------------------------------
9. acpi_db_display_gpes (acpi_get_name):
---------------------------------------------
- dump \_GPE
Object (003A0E08) Pathname: \_GPE
---------------------------------------------10.ae_miscellaneous_tests (acpi_get_name):
No output available
This patch cleans up all of the above usages. ACPICA BZ 1178, Lv Zheng.
Linux kernel's ACPICA debugging messages may also be changed.
--- drivers/acpi/acpica/dsdebug.c | 2 +- drivers/acpi/acpica/exdump.c | 2 +- drivers/acpi/acpica/nsutils.c | 2 +- drivers/acpi/acpica/utmisc.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
drivers/acpi/acpica/dsdebug.c +1 -1
@@ -89,7 +89,7 @@ acpi_ds_print_node_pathname(struct acpi_namespace_node *node, buffer.length =ACPI_ALLOCATE_LOCAL_BUFFER ; - status =acpi_ns_handle_to_pathname (node, &buffer, FALSE); + status =acpi_ns_handle_to_pathname (node, &buffer, TRUE);if (ACPI_SUCCESS (status)) {if (message) { ACPI_DEBUG_PRINT_RAW((ACPI_DB_DISPATCH, "%s ",
drivers/acpi/acpica/exdump.c +1 -1
@@ -996,7 +996,7 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc)acpi_os_printf (" %p " , obj_desc->reference.node); status =acpi_ns_handle_to_pathname (obj_desc->reference.node, - &ret_buf, FALSE); + &ret_buf, TRUE);if (ACPI_FAILURE (status)) {acpi_os_printf (" Could not convert name to pathname\n" ); }else {
drivers/acpi/acpica/nsutils.c +1 -1
@@ -83,7 +83,7 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node, buffer.length =ACPI_ALLOCATE_LOCAL_BUFFER ; - status =acpi_ns_handle_to_pathname (node, &buffer, FALSE); + status =acpi_ns_handle_to_pathname (node, &buffer, TRUE);if (ACPI_SUCCESS (status)) {if (message) {acpi_os_printf ("%s " , message);
drivers/acpi/acpica/utmisc.c +1 -1
@@ -376,7 +376,7 @@ acpi_ut_display_init_pathname(u8 type,/* Get the full pathname to the node */ buffer.length =ACPI_ALLOCATE_LOCAL_BUFFER ; - status =acpi_ns_handle_to_pathname (obj_handle, &buffer, FALSE); + status =acpi_ns_handle_to_pathname (obj_handle, &buffer, TRUE);if (ACPI_FAILURE (status)) {return ; }
Signature · 1 line
1.7.10
PATCH 20/20 ACPICA: Update version to 20150818.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit d93470de8febeecdc20633fde11cb0b200fa773b
Version 20150818.
--- 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 0x20150717 +#define ACPI_CA_VERSION 0x20150818#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
1.7.10
Quoted 48 lines · Lv Zheng
The 20150818 ACPICA kernel-resident subsystem updates are linuxized based on the linux-pm/linux-next branch.
The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. i386 + allyes +CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes +CONFIG_ACPI=n
5.x86_64+ default + COFNIG_ACPI=y
6.x86_64+ allyes +CONFIG_ACPI=y
7.x86_64+ default + COFNIG_ACPI=n
8.x86_64+ allyes +CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2.x86_64+ default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2.x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All "drivers/acpi" configurations
All "drivers/platform" drivers
All other drivers that link the APIs provided by ACPICA subsystemThe divergences checking result:
Before applying (20150717 Release):
518 lines
After applying (20150818 Release):
517 linesBob Moore (14):
ACPICA: Correctly cleanup after a ACPI table load failure.
ACPICA: Disassembler: Remove duplicate code in_PLDprocessing.
ACPICA: Update parameter validation fordata_table_regionand
load_table.
ACPICA: Disassembler: Update for new listing mode.
ACPICA: Update info messages during ACPICA init.
ACPICA: Headers: Fix some comments, no functional change.
ACPICA: acpinames: Add new options and wildcard support.
ACPICA: acpiexec/acpinames: Support very large number of ACPI tables.
ACPICA: Table handling: Cleanup and update debug output for tools.
ACPICA: Add additional debug info/statements.
ACPICA: Debugger: Add option to display namespace summary/counts.
ACPICA: Make the max-number-of-loops runtime configurable.
ACPICA: Header support to improve compatibility with MSVC.
ACPICA: Update version to 20150818.
Quoted 9 lines
Lv Zheng (6):
ACPICA: Tables: Fix global table list issues by removing fixed table
indexes.
ACPICA: Tables: Cleanup to reduce FACS globals.
ACPICA: Debugger: Split debugger initialization/termination APIs.
ACPICA: Disassembler: Cleanupacpi_gbl_db_opt_disasm.
ACPICA: Disassembler: Cleanupacpi_gbl_db_opt_verboseacpiexec usage.
ACPICA: Debugger: Cleanup debugging outputs to dump name path without
trailing underscores.
Series queued up for 4.3, thanks!
Rafael