Hotfixes in ACPICA 20130418 Release
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
cover Hotfixes in ACPICA 20130418 Release
The 20130418 ACPICA kernel resident system updates is linuxized based on the pm/linux-next branch.
This patch set includes hot fixes useful for -stable.
Bob Moore (1):
ACPICA: Fix possible buffer overflow during a field unit read
operation
Jung-uk Kim (1):
ACPICA: _OSI support: Fix possible memory leak
Tomasz Nowicki (1):
ACPICA: ACPICA: Fix for _INI regression
drivers/acpi/acpica/exfldio.c | 14 +++++++++++++- drivers/acpi/acpica/nsinit.c | 1 + drivers/acpi/acpica/utosi.c | 3 ++- 3 files changed, 16 insertions(+), 2 deletions(-)
Signature · 1 line
1.7.10
PATCH 1/3 ACPICA: Fix possible buffer overflow during a field unit read operation
From: Bob Moore <[email protected]>
Can only happen under these conditions: 1) The DSDT version is 1, meaning integers are 32-bits. 2) The field is between 33 and 64 bits long.
It applies cleanly back to ACPICA 20100806+ (Linux v2.6.37+).
--- drivers/acpi/acpica/exfldio.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
drivers/acpi/acpica/exfldio.c +13 -1
@@ -720,7 +720,19 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,if ((obj_desc->common_field.start_field_bit_offset ==0 ) && (obj_desc->common_field.bit_length == access_bit_width)) { - status =acpi_ex_field_datum_io (obj_desc,0 , buffer,ACPI_READ ); +if (buffer_length >=sizeof (u64)) { + status = +acpi_ex_field_datum_io (obj_desc,0 , buffer, +ACPI_READ ); + }else { +/* Use raw_datum (u64) to handle buffers < 64 bits */ + + status = +acpi_ex_field_datum_io (obj_desc,0 , &raw_datum, +ACPI_READ ); +ACPI_MEMCPY (buffer, &raw_datum, buffer_length); + } +return_ACPI_STATUS (status); }
Signature · 1 line
1.7.10
PATCH 2/3 ACPICA: _OSI support: Fix possible memory leak
In reply to Lv ZhengFrom: Jung-uk Kim <[email protected]>
Fixes a possible memory leak in the error exit path.
From 388a9902074c3cfe57d2425d766c491d072d2948 Mon Sep 17 00:00:00 2001
From: Jung-uk Kim <[email protected]>
Date: Fri, 12 Apr 2013 00:24:34 +0000
Subject: ACPICA: _OSI Support: handle any errors from acpi_os_acquire_mutex()
Jung-uk Kim ([email protected]), Bob Moore.
--- drivers/acpi/acpica/utosi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/acpi/acpica/utosi.c +2 -1
@@ -349,7 +349,8 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state * walk_state) return_value =0 ; status =acpi_os_acquire_mutex (acpi_gbl_osi_mutex,ACPI_WAIT_FOREVER );if (ACPI_FAILURE (status)) { -return (status); +acpi_ut_remove_reference (return_desc); +return_ACPI_STATUS (status); }/* Lookup the interface in the global _OSI list */
Signature · 1 line
1.7.10
PATCH 3/3 ACPICA: ACPICA: Fix for _INI regression
In reply to Lv ZhengFrom: Tomasz Nowicki <[email protected]>
This change fixes a problem introduced in 20130328 where _INI methods are no longer executed properly because of a memory block that is not initialized properly. ACPICA BZ1016. Tomasz Nowicki <[email protected]>
--- drivers/acpi/acpica/nsinit.c | 1 + 1 file changed, 1 insertion(+)
drivers/acpi/acpica/nsinit.c +1 -0
@@ -558,6 +558,7 @@ acpi_ns_init_one_device(acpi_handle obj_handle,ACPI_DEBUG_EXEC (acpi_ut_display_init_pathname (ACPI_TYPE_METHOD , device_node,METHOD_NAME__INI )); +ACPI_MEMSET (info,0 ,sizeof (struct acpi_evaluate_info )); info->prefix_node = device_node; info->pathname =METHOD_NAME__INI ; info->parameters =NULL ;
Signature · 1 line
1.7.10
cover ACPICA 20130418 Release
In reply to a message not in the archiveThe 20130418 ACPICA kernel resident system updates is linuxized based on the pm/linux-next branch.
The patch set has passed basic build/boot tests on i386/x86-64 machines.
Bob Moore (5):
ACPICA: Change an exception code for the ASL UnLoad() operator
ACPICA: Add BIOS error interface for predefined name validation
support
ACPICA: Add argument typechecking for all predefined ACPI names
ACPICA: Predefined name support: Remove unused local variable
ACPICA: Update version to 20130418
Lv Zheng (1):
ACPICA: Remove unused macros, no functional change
Zhang Rui (1):
ACPICA: Update for "orphan" embedded controller _REG method support
drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/aclocal.h | 17 --- drivers/acpi/acpica/acmacros.h | 10 +- drivers/acpi/acpica/acnamesp.h | 43 ++++-- drivers/acpi/acpica/acpredef.h | 4 +- drivers/acpi/acpica/acstruct.h | 40 +++-- drivers/acpi/acpica/acutils.h | 6 + drivers/acpi/acpica/evgpe.c | 1 - drivers/acpi/acpica/evregion.c | 63 +++----- drivers/acpi/acpica/exconfig.c | 2 +- drivers/acpi/acpica/hwxface.c | 6 +- drivers/acpi/acpica/nsarguments.c | 294 +++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/nseval.c | 247 ++++++++++++++++++------------- drivers/acpi/acpica/nsinit.c | 7 +- drivers/acpi/acpica/nspredef.c | 202 ++++++------------------- drivers/acpi/acpica/nsprepkg.c | 76 +++++----- drivers/acpi/acpica/nsrepair.c | 50 +++---- drivers/acpi/acpica/nsrepair2.c | 87 +++++------ drivers/acpi/acpica/nsxfeval.c | 162 ++++++++++++++++---- drivers/acpi/acpica/psxface.c | 14 +- drivers/acpi/acpica/rsutils.c | 2 +- drivers/acpi/acpica/uteval.c | 2 +- drivers/acpi/acpica/utpredef.c | 16 +- drivers/acpi/acpica/utxferror.c | 51 ++++++- include/acpi/acconfig.h | 4 +- include/acpi/acoutput.h | 8 +- include/acpi/acpixf.h | 2 +- 27 files changed, 882 insertions(+), 535 deletions(-) create mode 100644 drivers/acpi/acpica/nsarguments.c
Signature · 1 line
1.7.10
PATCH 1/7 ACPICA: Change an exception code for the ASL UnLoad() operator
From: Bob Moore <[email protected]>
Change the exception code for the case where the input DdbHandle is invalid from AE_BAD_PARAMETER to the more appropriate AE_AML_OPERAND_TYPE.
--- drivers/acpi/acpica/exconfig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/acpica/exconfig.c +1 -1
@@ -588,7 +588,7 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle) (ACPI_GET_DESCRIPTOR_TYPE(ddb_handle) != ACPI_DESC_TYPE_OPERAND) || (ddb_handle->common.type != ACPI_TYPE_LOCAL_REFERENCE) || (!(ddb_handle->common.flags & AOPOBJ_DATA_VALID))) { -return_ACPI_STATUS (AE_BAD_PARAMETER ); +return_ACPI_STATUS (AE_AML_OPERAND_TYPE ); }/* Get the table index from the ddb_handle */
Signature · 1 line
1.7.10
PATCH 2/7 ACPICA: Add BIOS error interface for predefined name validation support
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
BIOS error message for errors found in predefined names.
--- drivers/acpi/acpica/acmacros.h | 10 +++++--- drivers/acpi/acpica/acutils.h | 6 +++++ drivers/acpi/acpica/utxferror.c | 51 ++++++++++++++++++++++++++++++++++++--- 3 files changed, 59 insertions(+), 8 deletions(-)
drivers/acpi/acpica/acmacros.h +6 -4
@@ -374,10 +374,11 @@* the plist contains a set of parens to allow variable-length lists. * These macros are used for both the debug and non-debug versions of the code. */ -#define ACPI_ERROR_NAMESPACE (s, e) acpi_ut_namespace_error (AE_INFO, s, e); -#define ACPI_ERROR_METHOD (s, n, p, e) acpi_ut_method_error (AE_INFO, s, n, p, e); -#define ACPI_WARN_PREDEFINED (plist) acpi_ut_predefined_warning plist -#define ACPI_INFO_PREDEFINED (plist) acpi_ut_predefined_info plist +#define ACPI_ERROR_NAMESPACE (s, e) acpi_ut_namespace_error (AE_INFO, s, e); +#define ACPI_ERROR_METHOD (s, n, p, e) acpi_ut_method_error (AE_INFO, s, n, p, e); +#define ACPI_WARN_PREDEFINED (plist) acpi_ut_predefined_warning plist +#define ACPI_INFO_PREDEFINED (plist) acpi_ut_predefined_info plist +#define ACPI_BIOS_ERROR_PREDEFINED (plist) acpi_ut_predefined_bios_error plist#else
@@ -387,6 +388,7 @@#define ACPI_ERROR_METHOD (s, n, p, e)#define ACPI_WARN_PREDEFINED (plist)#define ACPI_INFO_PREDEFINED (plist) +#define ACPI_BIOS_ERROR_PREDEFINED (plist)#endif /* ACPI_NO_ERROR_MESSAGES */
drivers/acpi/acpica/acutils.h +6 -0
@@ -670,6 +670,12 @@ acpi_ut_predefined_info(const char *module_name,u32 line_number, char *pathname, u8 node_flags, const char *format, ...); +void ACPI_INTERNAL_VAR_XFACE +acpi_ut_predefined_bios_error (const char *module_name, +u32 line_number, +char *pathname, +u8 node_flags,const char *format, ...); + void acpi_ut_namespace_error(const char *module_name, u32 line_number,
drivers/acpi/acpica/utxferror.c +47 -4
69 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH 3/7 ACPICA: Add argument typechecking for all predefined ACPI names
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Fully implements typechecking on all incoming arguments for all predefined names. This ensures that ACPI-related drivers are passing the correct number of arguments, each of the correct object type.
--- drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/aclocal.h | 17 --- drivers/acpi/acpica/acnamesp.h | 43 ++++-- drivers/acpi/acpica/acpredef.h | 4 +- drivers/acpi/acpica/acstruct.h | 40 +++-- drivers/acpi/acpica/evgpe.c | 1 - drivers/acpi/acpica/evregion.c | 2 +- drivers/acpi/acpica/hwxface.c | 6 +- drivers/acpi/acpica/nsarguments.c | 294 +++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/nseval.c | 247 ++++++++++++++++++------------- drivers/acpi/acpica/nsinit.c | 7 +- drivers/acpi/acpica/nspredef.c | 201 ++++++------------------- drivers/acpi/acpica/nsprepkg.c | 76 +++++----- drivers/acpi/acpica/nsrepair.c | 50 +++---- drivers/acpi/acpica/nsrepair2.c | 87 +++++------ drivers/acpi/acpica/nsxfeval.c | 162 ++++++++++++++++---- drivers/acpi/acpica/psxface.c | 14 +- drivers/acpi/acpica/rsutils.c | 2 +- drivers/acpi/acpica/uteval.c | 2 +- drivers/acpi/acpica/utpredef.c | 16 +- include/acpi/acconfig.h | 4 +- 21 files changed, 800 insertions(+), 476 deletions(-) create mode 100644 drivers/acpi/acpica/nsarguments.c
drivers/acpi/acpica/Makefile +1 -0
@@ -83,6 +83,7 @@ acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o acpi-y += \ nsaccess.o \ nsalloc.o \ + nsarguments.o \ nsconvert.o \ nsdump.o \ nseval.o \
drivers/acpi/acpica/aclocal.h +0 -17
@@ -362,23 +362,6 @@ union acpi_predefined_info {#pragma pack() -/* Data block used during object validation */ - -struct acpi_predefined_data { -char *pathname; -const union acpi_predefined_info *predefined; -union acpi_operand_object *parent_package; -struct acpi_namespace_node *node; -u32 flags; -u32 return_btype; -u8 node_flags; -}; - -/* Defines for Flags field above */ - -#define ACPI_OBJECT_REPAIRED 1 -#define ACPI_OBJECT_WRAPPED 2 -/* Return object auto-repair info */ typedef acpi_status(*acpi_object_converter) (union acpi_operand_object
drivers/acpi/acpica/acnamesp.h +27 -16
87 lines not on this page · raw message
drivers/acpi/acpica/acpredef.h +2 -2
@@ -128,8 +128,8 @@ enum acpi_return_package_types {#define ARG_COUNT_IS_MINIMUM 0x8000#define METHOD_MAX_ARG_TYPE ACPI_TYPE_PACKAGE -#define METHOD_GET_COUNT (arg_list) (arg_list & METHOD_ARG_MASK) -#define METHOD_GET_NEXT_ARG (arg_list) (arg_list >> METHOD_ARG_BIT_WIDTH) +#define METHOD_GET_ARG_COUNT (arg_list) ((arg_list) & METHOD_ARG_MASK) +#define METHOD_GET_NEXT_TYPE (arg_list) (((arg_list) >>= METHOD_ARG_BIT_WIDTH) & METHOD_ARG_MASK)/* Macros used to build the predefined info table */
drivers/acpi/acpica/acstruct.h +28 -12
@@ -178,25 +178,41 @@ union acpi_aml_operands { };/* -* Structure used to pass object evaluation parameters. +* Structure used to pass object evaluation information and parameters. * Purpose is to reduce CPU stack use. */ struct acpi_evaluate_info { -struct acpi_namespace_node *prefix_node; -char *pathname; -union acpi_operand_object *obj_desc; -union acpi_operand_object **parameters; -struct acpi_namespace_node *resolved_node; -union acpi_operand_object *return_object; -u8 param_count; -u8 pass_number; -u8 return_object_type; -u8 flags; +/* The first 3 elements are passed by the caller to acpi_ns_evaluate */ + +struct acpi_namespace_node *prefix_node;/* Input: starting node */ +char *relative_pathname;/* Input: path relative to prefix_node */ +union acpi_operand_object **parameters;/* Input: argument list */ + +struct acpi_namespace_node *node;/* Resolved node (prefix_node:relative_pathname) */ +union acpi_operand_object *obj_desc;/* Object attached to the resolved node */ +char *full_pathname;/* Full pathname of the resolved node */ + +const union acpi_predefined_info *predefined;/* Used if Node is a predefined name */ +union acpi_operand_object *return_object;/* Object returned from the evaluation */ +union acpi_operand_object *parent_package;/* Used if return object is a Package */ + +u32 return_flags;/* Used for return value analysis */ +u32 return_btype;/* Bitmapped type of the returned object */ +u16 param_count;/* Count of the input argument list */ +u8 pass_number;/* Parser pass number */ +u8 return_object_type;/* Object type of the returned object */ +u8 node_flags;/* Same as Node->Flags */ +u8 flags;/* General flags */ };/* Values for Flags above */ -#define ACPI_IGNORE_RETURN_VALUE 1 +#define ACPI_IGNORE_RETURN_VALUE 1 + +/* Defines for return_flags field above */ + +#define ACPI_OBJECT_REPAIRED 1 +#define ACPI_OBJECT_WRAPPED 2/* Info used by acpi_ns_initialize_devices */
drivers/acpi/acpica/evgpe.c +0 -1
@@ -579,7 +579,6 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) (local_gpe_event_info->dispatch. method_node))); } -break ;default :
drivers/acpi/acpica/evregion.c +1 -1
@@ -532,7 +532,7 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function) } info->prefix_node = region_obj2->extra.method_REG; - info->pathname =NULL ; + info->relative_pathname =NULL ; info->parameters = args; info->flags =ACPI_IGNORE_RETURN_VALUE ;
drivers/acpi/acpica/hwxface.c +3 -3
@@ -495,7 +495,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 *sleep_type_a, u8 *sleep_type_b)* Evaluate the \_Sx namespace object containing the register values * for this state */ - info->pathname = + info->relative_pathname =ACPI_CAST_PTR (char, acpi_gbl_sleep_state_names[sleep_state]); status =acpi_ns_evaluate (info);if (ACPI_FAILURE (status)) {
@@ -506,7 +506,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 *sleep_type_a, u8 *sleep_type_b)if (!info->return_object) {ACPI_ERROR ((AE_INFO ,"No Sleep State object returned from [%s]" , - info->pathname)); + info->relative_pathname)); status =AE_AML_NO_RETURN_VALUE ; goto cleanup; }
@@ -565,7 +565,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 *sleep_type_a, u8 *sleep_type_b)if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO , status,"While evaluating Sleep State [%s]" , - info->pathname)); + info->relative_pathname)); }ACPI_FREE (info);
drivers/acpi/acpica/nsarguments.c new file +294 -0
294 lines not on this page · raw message
drivers/acpi/acpica/nseval.c +142 -105
335 lines not on this page · raw message
drivers/acpi/acpica/nsinit.c +3 -4
@@ -176,7 +176,7 @@ acpi_status acpi_ns_initialize_devices(void)* part of the ACPI specification. */ info.evaluate_info->prefix_node = acpi_gbl_root_node; - info.evaluate_info->pathname =METHOD_NAME__INI ; + info.evaluate_info->relative_pathname =METHOD_NAME__INI ; info.evaluate_info->parameters =NULL ; info.evaluate_info->flags =ACPI_IGNORE_RETURN_VALUE ;
@@ -560,7 +560,7 @@ acpi_ns_init_one_device(acpi_handle obj_handle,ACPI_MEMSET (info,0 ,sizeof (struct acpi_evaluate_info )); info->prefix_node = device_node; - info->pathname =METHOD_NAME__INI ; + info->relative_pathname =METHOD_NAME__INI ; info->parameters =NULL ; info->flags =ACPI_IGNORE_RETURN_VALUE ;
@@ -574,8 +574,7 @@ acpi_ns_init_one_device(acpi_handle obj_handle,/* Ignore error and move on to next device */ -char *scope_name = -acpi_ns_get_external_pathname (info->resolved_node); +char *scope_name =acpi_ns_get_external_pathname (info->node);ACPI_EXCEPTION ((AE_INFO , status,"during %s._INI execution" , scope_name));
drivers/acpi/acpica/nspredef.c +43 -158
345 lines not on this page · raw message
drivers/acpi/acpica/nsprepkg.c +39 -37
289 lines not on this page · raw message
drivers/acpi/acpica/nsrepair.c +25 -25
184 lines not on this page · raw message
drivers/acpi/acpica/nsrepair2.c +44 -43
301 lines not on this page · raw message
drivers/acpi/acpica/nsxfeval.c +130 -32
205 lines not on this page · raw message
drivers/acpi/acpica/psxface.c +6 -8
@@ -125,7 +125,7 @@ static void acpi_ps_start_trace(struct acpi_evaluate_info *info) }if ((!acpi_gbl_trace_method_name) || - (acpi_gbl_trace_method_name != info->resolved_node->name.integer)) { + (acpi_gbl_trace_method_name != info->node->name.integer)) { goto exit; }
@@ -170,7 +170,7 @@ static void acpi_ps_stop_trace(struct acpi_evaluate_info *info) }if ((!acpi_gbl_trace_method_name) || - (acpi_gbl_trace_method_name != info->resolved_node->name.integer)) { + (acpi_gbl_trace_method_name != info->node->name.integer)) { goto exit; }
@@ -226,15 +226,14 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)/* Validate the Info and method Node */ -if (!info || !info->resolved_node) { +if (!info || !info->node) {return_ACPI_STATUS (AE_NULL_ENTRY ); }/* Init for new method, wait on concurrency semaphore */ status = -acpi_ds_begin_method_execution (info->resolved_node, info->obj_desc, -NULL ); +acpi_ds_begin_method_execution (info->node, info->obj_desc,NULL );if (ACPI_FAILURE (status)) {return_ACPI_STATUS (status); }
@@ -253,8 +252,7 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)*/ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE ,"**** Begin Method Parse/Execute [%4.4s] **** Node=%p Obj=%p\n" , - info->resolved_node->name.ascii, info->resolved_node, - info->obj_desc)); + info->node->name.ascii, info->node, info->obj_desc));/* Create and init a Root Node */
@@ -275,7 +273,7 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info) goto cleanup; } - status =acpi_ds_init_aml_walk (walk_state, op, info->resolved_node, + status =acpi_ds_init_aml_walk (walk_state, op, info->node, info->obj_desc->method.aml_start, info->obj_desc->method.aml_length, info, info->pass_number);
drivers/acpi/acpica/rsutils.c +1 -1
@@ -736,7 +736,7 @@ acpi_rs_set_srs_method_data(struct acpi_namespace_node *node, } info->prefix_node = node; - info->pathname =METHOD_NAME__SRS ; + info->relative_pathname =METHOD_NAME__SRS ; info->parameters = args; info->flags =ACPI_IGNORE_RETURN_VALUE ;
drivers/acpi/acpica/uteval.c +1 -1
@@ -87,7 +87,7 @@ acpi_ut_evaluate_object(struct acpi_namespace_node * prefix_node, } info->prefix_node = prefix_node; - info->pathname = path; + info->relative_pathname = path;/* Evaluate the object/method */
drivers/acpi/acpica/utpredef.c +8 -8
@@ -147,6 +147,11 @@ void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes)u32 i;u32 j; +if (!expected_btypes) { +ACPI_STRCPY (buffer,"NONE" ); +return ; + } + j =1 ; buffer[0 ] =0 ; this_rtype =ACPI_RTYPE_INTEGER ;
@@ -328,9 +333,7 @@ static u32 acpi_ut_get_argument_types(char *buffer, u16 argument_types)/* First field in the types list is the count of args to follow */ - arg_count = (argument_types &METHOD_ARG_MASK ); - argument_types >>=METHOD_ARG_BIT_WIDTH ; - + arg_count =METHOD_GET_ARG_COUNT (argument_types);if (arg_count >METHOD_PREDEF_ARGS_MAX ) {printf ("**** Invalid argument count (%u) " "in predefined info structure\n" , arg_count);
@@ -340,7 +343,8 @@ static u32 acpi_ut_get_argument_types(char *buffer, u16 argument_types)/* Get each argument from the list, convert to ascii, store to buffer */ for (i =0 ; i < arg_count; i++) { - this_argument_type = (argument_types &METHOD_ARG_MASK ); + this_argument_type =METHOD_GET_NEXT_TYPE (argument_types); +if (!this_argument_type || (this_argument_type >METHOD_MAX_ARG_TYPE )) { printf("**** Invalid argument type (%u) "
@@ -351,10 +355,6 @@ static u32 acpi_ut_get_argument_types(char *buffer, u16 argument_types)strcat (buffer, ut_external_type_names[this_argument_type] + sub_index); - -/* Shift to next argument type field */ - - argument_types >>=METHOD_ARG_BIT_WIDTH ; sub_index =0 ; }
include/acpi/acconfig.h +2 -2
@@ -219,8 +219,8 @@* *****************************************************************************/ -#define ACPI_DEBUGGER_MAX_ARGS 8/* Must be max method args + 1 */ -#define ACPI_DB_LINE_BUFFER_SIZE 512 +#define ACPI_DEBUGGER_MAX_ARGS ACPI_METHOD_NUM_ARGS + 4/* Max command line arguments */ +#define ACPI_DB_LINE_BUFFER_SIZE 512#define ACPI_DEBUGGER_COMMAND_PROMPT '-'#define ACPI_DEBUGGER_EXECUTE_PROMPT '%'
Signature · 1 line
1.7.10
PATCH 4/7 ACPICA: Predefined name support: Remove unused local variable
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
"Pathname" is no longer used.
--- drivers/acpi/acpica/nspredef.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/acpi/acpica/nspredef.c +1 -4
@@ -104,13 +104,10 @@ acpi_ns_check_return_value(struct acpi_namespace_node *node, {acpi_status status;const union acpi_predefined_info *predefined; -char *pathname; - - predefined = info->predefined; - pathname = info->full_pathname;/* If not a predefined name, we cannot validate the return object */ + predefined = info->predefined;if (!predefined) {return (AE_OK ); }
Signature · 1 line
1.7.10
PATCH 5/7 ACPICA: Remove unused macros, no functional change
In reply to Lv ZhengRemove several unused/duplicated macros in acoutput.h Lv Zheng.
--- include/acpi/acoutput.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
include/acpi/acoutput.h +1 -7
@@ -428,27 +428,21 @@* This is the non-debug case -- make everything go away, * leaving no executable debug code! */ -#define ACPI_FUNCTION_NAME (a)#define ACPI_DEBUG_PRINT (pl)#define ACPI_DEBUG_PRINT_RAW (pl)#define ACPI_DEBUG_EXEC (a)#define ACPI_DEBUG_ONLY_MEMBERS (a) +#define ACPI_FUNCTION_NAME (a)#define ACPI_FUNCTION_TRACE (a)#define ACPI_FUNCTION_TRACE_PTR (a, b)#define ACPI_FUNCTION_TRACE_U32 (a, b)#define ACPI_FUNCTION_TRACE_STR (a, b) -#define ACPI_FUNCTION_EXIT -#define ACPI_FUNCTION_STATUS_EXIT (s) -#define ACPI_FUNCTION_VALUE_EXIT (s)#define ACPI_FUNCTION_ENTRY ()#define ACPI_DUMP_STACK_ENTRY (a)#define ACPI_DUMP_OPERANDS (a, b, c)#define ACPI_DUMP_ENTRY (a, b) -#define ACPI_DUMP_TABLES (a, b)#define ACPI_DUMP_PATHNAME (a, b, c, d)#define ACPI_DUMP_BUFFER (a, b) -#define ACPI_DEBUG_PRINT (pl) -#define ACPI_DEBUG_PRINT_RAW (pl)#define ACPI_IS_DEBUG_ENABLED (level, component) 0/* Return macros must have a return statement at the minimum */
Signature · 1 line
1.7.10
PATCH 6/7 ACPICA: Update for "orphan" embedded controller _REG method support
In reply to Lv ZhengFrom: Zhang Rui <[email protected]>
This refers to _REG methods under the EC device that have no corresponding operation region. This is allowed by the ACPI specification. This update removes a dependency on having an ECDT table, and will execute an orphan _REG method as long as the handler for the EC is installed at the EC device node (not the namespace root). Rui Zhang (original update), Bob Moore (update/integrate).
--- drivers/acpi/acpica/evregion.c | 61 ++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 40 deletions(-)
drivers/acpi/acpica/evregion.c +21 -40
@@ -54,7 +54,8 @@ extern u8 acpi_gbl_default_address_spaces[];/* Local prototypes */ -static void acpi_ev_orphan_ec_reg_method (void ); +static void +acpi_ev_orphan_ec_reg_method (struct acpi_namespace_node *ec_device_node); static acpi_status acpi_ev_reg_run(acpi_handle obj_handle,
@@ -612,7 +613,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,/* Special case for EC: handle "orphan" _REG methods with no region */ if (space_id ==ACPI_ADR_SPACE_EC ) { -acpi_ev_orphan_ec_reg_method (); +acpi_ev_orphan_ec_reg_method (node); }return_ACPI_STATUS (status);
@@ -681,7 +682,7 @@ acpi_ev_reg_run(acpi_handle obj_handle,* * FUNCTION: acpi_ev_orphan_ec_reg_method * -* PARAMETERS: None +* PARAMETERS: ec_device_node - Namespace node for an EC device * * RETURN: None *
@@ -693,37 +694,27 @@ acpi_ev_reg_run(acpi_handle obj_handle,* detected by providing a _REG method object underneath the * Embedded Controller device." * -* To quickly access the EC device, we use the EC_ID that appears -* within the ECDT. Otherwise, we would need to perform a time- -* consuming namespace walk, executing _HID methods to find the -* EC device. +* To quickly access the EC device, we use the ec_device_node used +* during EC handler installation. Otherwise, we would need to +* perform a time consuming namespace walk, executing _HID +* methods to find the EC device. +* +* MUTEX: Assumes the namespace is locked * ******************************************************************************/ -static void acpi_ev_orphan_ec_reg_method (void ) +static void +acpi_ev_orphan_ec_reg_method (struct acpi_namespace_node *ec_device_node) { -struct acpi_table_ecdt *table; +acpi_handle reg_method; +struct acpi_namespace_node *next_node;acpi_status status;struct acpi_object_list args;union acpi_object objects[2 ]; -struct acpi_namespace_node *ec_device_node; -struct acpi_namespace_node *reg_method; -struct acpi_namespace_node *next_node;ACPI_FUNCTION_TRACE (ev_orphan_ec_reg_method); -/* Get the ECDT (if present in system) */ - - status =acpi_get_table (ACPI_SIG_ECDT ,0 , - ACPI_CAST_INDIRECT_PTR(struct acpi_table_header, - &table)); -if (ACPI_FAILURE (status)) { - return_VOID; - } - -/* We need a valid EC_ID string */ - -if (!(*table->id)) { +if (!ec_device_node) { return_VOID; }
@@ -731,22 +722,11 @@ static void acpi_ev_orphan_ec_reg_method(void) (void )acpi_ut_release_mutex (ACPI_MTX_NAMESPACE ); -/* Get a handle to the EC device referenced in the ECDT */ - - status =acpi_get_handle (NULL , -ACPI_CAST_PTR (char, table->id), -ACPI_CAST_PTR (acpi_handle, &ec_device_node)); -if (ACPI_FAILURE (status)) { - goto exit; - } -/* Get a handle to a _REG method immediately under the EC device */ - status =acpi_get_handle (ec_device_node, -METHOD_NAME__REG ,ACPI_CAST_PTR (acpi_handle, - ®_method)); + status =acpi_get_handle (ec_device_node,METHOD_NAME__REG , ®_method);if (ACPI_FAILURE (status)) { - goto exit; + goto exit;/* There is no _REG method present */ }/*
@@ -754,19 +734,20 @@ static void acpi_ev_orphan_ec_reg_method(void)* this scope with the Embedded Controller space ID. Otherwise, it * will already have been executed. Note, this allows for Regions * with other space IDs to be present; but the code below will then -* execute the _REG method with the EC space ID argument. +* execute the _REG method with the embedded_control space_ID argument. */ next_node =acpi_ns_get_next_node (ec_device_node,NULL );while (next_node) {if ((next_node->type ==ACPI_TYPE_REGION ) && (next_node->object) && (next_node->object->region.space_id ==ACPI_ADR_SPACE_EC )) { - goto exit;/* Do not execute _REG */ + goto exit;/* Do not execute the _REG */ } + next_node =acpi_ns_get_next_node (ec_device_node, next_node); } -/* Evaluate the _REG(EC,Connect) method */ +/* Evaluate the _REG(embedded_control,Connect) method */ args.count =2 ; args.pointer = objects;
Signature · 1 line
1.7.10
RE: [PATCH v2 6/7] ACPICA: Update for "orphan" embedded controller _REG method support
A mistake in the email address.
Please ignore this and find an updated one sent later. Sorry for the mistake.
Thanks
-Lv
Quoted 171 lines
-----Original Message-----
From: Zheng, Lv
Sent: Thursday, May 30, 2013 10:01 AM
To: Wysocki, Rafael J; Moore, Robert; Brown, Len
Cc: Zheng, Lv; [email protected]; Zhang Rui; Zhang, Rui
Subject: [PATCH v2 6/7] ACPICA: Update for "orphan" embedded controller_REGmethod supportFrom: Zhang Rui <[email protected]>
This refers to
_REGmethods under the EC device that have no corresponding operation region. This is allowed by the ACPI specification. This update removes a dependency on having an ECDT table, and will execute an orphan_REGmethod as long as the handler for the EC is installed at the EC device node (not the namespace root). Rui Zhang (original update), Bob Moore (update/integrate).Signed-off-by Zhang Rui <[email protected]>Signed-off-by Bob Moore <[email protected]>Signed-off-by Lv Zheng <[email protected]>Acked-by Len Brown <[email protected]>--- drivers/acpi/acpica/evregion.c | 61 ++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 40 deletions(-)drivers/acpi/acpica/evregion.c +3
-1@@ -54,7 +54,8 @@ extern u8 acpi_gbl_default_address_spaces[];/* Local prototypes */ -static void acpi_ev_orphan_ec_reg_method (void ); +static void +acpi_ev_orphan_ec_reg_method (struct acpi_namespace_node +*ec_device_node); static acpi_status acpi_ev_reg_run(acpi_handle obj_handle, @@ -612,7 +613,7 @@acpi_ev_execute_reg_methods(struct
acpi_namespace_node*node,drivers/acpi/acpica/evregion.c +2
-2/* Special case for EC: handle "orphan" _REG methods with no region */ if (space_id ==ACPI_ADR_SPACE_EC ) { -acpi_ev_orphan_ec_reg_method (); +acpi_ev_orphan_ec_reg_method (node); }return_ACPI_STATUS (status);@@ -681,7 +682,7 @@ acpi_ev_reg_run(acpi_handle obj_handle,* * FUNCTION: acpi_ev_orphan_ec_reg_method * -* PARAMETERS: None +* PARAMETERS: ec_device_node - Namespace node for an EC device * * RETURN: None * @@ -693,37 +694,27 @@ acpi_ev_reg_run(acpi_handle obj_handle,* detected by providing a _REG method object underneath the
* Embedded Controller device."
*
- * To quickly access the EC device, we use theEC_IDthat
appears
- * within the ECDT. Otherwise, we would need to perform a
time-
- * consuming namespace walk, executing_HIDmethods to
find the
- * EC device.
+ * To quickly access the EC device, we use theec_device_nodeused
+ * during EC handler installation. Otherwise, we would need
to
+ * perform a time consuming namespace walk, executing_HID
+ * methods to find the EC device.
+ *
+ * MUTEX: Assumes the namespace is locked
*****************************************************************
**************/drivers/acpi/acpica/evregion.c +10
-31-static void acpi_ev_orphan_ec_reg_method (void ) +static void +acpi_ev_orphan_ec_reg_method (struct acpi_namespace_node +*ec_device_node) { -struct acpi_table_ecdt *table; +acpi_handle reg_method; +struct acpi_namespace_node *next_node;acpi_status status;struct acpi_object_list args;union acpi_object objects[2 ]; -struct acpi_namespace_node *ec_device_node; -struct acpi_namespace_node *reg_method; -struct acpi_namespace_node *next_node;ACPI_FUNCTION_TRACE (ev_orphan_ec_reg_method); -/* Get the ECDT (if present in system) */ - - status =acpi_get_table (ACPI_SIG_ECDT ,0 , - ACPI_CAST_INDIRECT_PTR(struct acpi_table_header, - &table)); -if (ACPI_FAILURE (status)) { - return_VOID; - } - -/* We need a valid EC_ID string */ - -if (!(*table->id)) { +if (!ec_device_node) { return_VOID; }@@ -731,22 +722,11 @@ static void acpi_ev_orphan_ec_reg_method(void) (void )acpi_ut_release_mutex (ACPI_MTX_NAMESPACE ); -/* Get a handle to the EC device referenced in the ECDT */ - - status =acpi_get_handle (NULL , -ACPI_CAST_PTR (char, table->id), -ACPI_CAST_PTR (acpi_handle, &ec_device_node)); -if (ACPI_FAILURE (status)) { - goto exit; - } -/* Get a handle to a _REG method immediately under the EC device */ - status =acpi_get_handle (ec_device_node, -METHOD_NAME__REG ,ACPI_CAST_PTR (acpi_handle, - ®_method)); + status =acpi_get_handle (ec_device_node,METHOD_NAME__REG , +®_method);if (ACPI_FAILURE (status)) { - goto exit; + goto exit;/* There is no _REG method present */ }/* @@ -754,19 +734,20 @@ static void acpi_ev_orphan_ec_reg_method(void)* this scope with the Embedded Controller space ID. Otherwise, it * will already have been executed. Note, this allows for Regions * with other space IDs to be present; but the code below will then -* execute the _REG method with the EC space ID argument. +* execute the _REG method with the embedded_control space_ID argument.
drivers/acpi/acpica/evregion.c +0
-0*/ next_node =acpi_ns_get_next_node (ec_device_node,NULL );while (next_node) {if ((next_node->type ==ACPI_TYPE_REGION ) && (next_node->object) && (next_node->object->region.space_id ==ACPI_ADR_SPACE_EC )){
drivers/acpi/acpica/evregion.c +3
-3- goto exit;/* Do not execute _REG */ + goto exit;/* Do not execute the _REG */ } + next_node =acpi_ns_get_next_node (ec_device_node, next_node); } -/* Evaluate the _REG(EC,Connect) method */ +/* Evaluate the _REG(embedded_control,Connect) method */ args.count =2 ; args.pointer = objects; --1.7.10
PATCH 7/7 ACPICA: Update version to 20130418
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Version 20130418.
--- 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 0x20130328 +#define ACPI_CA_VERSION 0x20130418#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
1.7.10
RE: [PATCH 00/07] ACPICA 20130418 Release
In reply to Lv Zhengfor 1-7:
thanks,
-Len
ps. i would prefer that there be less whitespace changes mixed with functional changes in the future. Those kind of things are best done in separate functionality vs cleanup patches.
RE: [PATCH 00/07] ACPICA 20130418 Release
OK.
I'll add and re-send them.
Thanks
-Lv
Quoted 18 lines
-----Original Message-----
From: Brown, Len
Sent: Thursday, May 30, 2013 4:41 AM
To: Zheng, Lv; Wysocki, Rafael J; Moore, Robert
Cc: [email protected]
Subject: RE: [PATCH 00/07] ACPICA 20130418 Releasefor 1-7:
Acked-by Len Brown <[email protected]>thanks,
-Lenps. i would prefer that there be less whitespace changes mixed with functional changes in the future. Those kind of things are best done in separate functionality vs cleanup patches.
Rafael J. Wysocki
AppliedRe: [PATCH 00/07] ACPICA 20130418 Release
In reply to Lv ZhengQuoted 12 lines · Lv Zheng
The 20130418 ACPICA kernel resident system updates is linuxized based on the pm/linux-next branch.
The patch set has passed basic build/boot tests on i386/x86-64 machines.Bob Moore (5):
ACPICA: Change an exception code for the ASLUnLoad()operator
ACPICA: Add BIOS error interface for predefined name validation
support
ACPICA: Add argument typechecking for all predefined ACPI names
ACPICA: Predefined name support: Remove unused local variable
ACPICA: Update version to 20130418
Quoted 5 lines
Lv Zheng (1):
ACPICA: Remove unused macros, no functional changeZhang Rui (1):
ACPICA: Update for "orphan" embedded controller_REGmethod support
Applied, thanks Lv!
Rafael
Quoted 31 lines
drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/aclocal.h | 17 --- drivers/acpi/acpica/acmacros.h | 10 +- drivers/acpi/acpica/acnamesp.h | 43 ++++-- drivers/acpi/acpica/acpredef.h | 4 +- drivers/acpi/acpica/acstruct.h | 40 +++-- drivers/acpi/acpica/acutils.h | 6 + drivers/acpi/acpica/evgpe.c | 1 - drivers/acpi/acpica/evregion.c | 63 +++----- drivers/acpi/acpica/exconfig.c | 2 +- drivers/acpi/acpica/hwxface.c | 6 +- drivers/acpi/acpica/nsarguments.c | 294 +++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/nseval.c | 247 ++++++++++++++++++------------- drivers/acpi/acpica/nsinit.c | 7 +- drivers/acpi/acpica/nspredef.c | 202 ++++++------------------- drivers/acpi/acpica/nsprepkg.c | 76 +++++----- drivers/acpi/acpica/nsrepair.c | 50 +++---- drivers/acpi/acpica/nsrepair2.c | 87 +++++------ drivers/acpi/acpica/nsxfeval.c | 162 ++++++++++++++++---- drivers/acpi/acpica/psxface.c | 14 +- drivers/acpi/acpica/rsutils.c | 2 +- drivers/acpi/acpica/uteval.c | 2 +- drivers/acpi/acpica/utpredef.c | 16 +- drivers/acpi/acpica/utxferror.c | 51 ++++++- include/acpi/acconfig.h | 4 +- include/acpi/acoutput.h | 8 +- include/acpi/acpixf.h | 2 +- 27 files changed, 882 insertions(+), 535 deletions(-) create mode 100644 drivers/acpi/acpica/nsarguments.c
Signature · 2 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.