diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-01-17 21:01:07 -0500 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-01-17 21:01:07 -0500 |
| commit | 2a2bafcb3b60f0b5b1cc7b10f21356a8516f192a (patch) | |
| tree | 589800f95c6c2f5c106fb01414075ac2d5a767eb /drivers/acpi/acpica | |
| parent | 90fd94e4aba4ddfb6764c051a6bf9a3f4f26fb50 (diff) | |
| parent | 3bd93bd76ba6b5588a1b2b9f4f451952c7d8994d (diff) | |
Merge branch 'acpica'
* acpica: (40 commits)
ACPICA: Update version to 20171215
ACPICA: trivial style fix, no functional change
ACPICA: Fix a couple memory leaks during package object resolution
ACPICA: Recognize the Windows 10 version 1607 and 1703 OSI strings
ACPICA: DT compiler: prevent error if optional field at the end of table is not present
ACPICA: Rename a global variable, no functional change
ACPICA: Create and deploy safe version of strncpy
ACPICA: Cleanup the global variables and update comments
ACPICA: Debugger: fix slight indentation issue
ACPICA: Fix a regression in the acpi_evaluate_object_type() interface
ACPICA: Update for a few debug output statements
ACPICA: Debug output, no functional change
ACPICA: Update information in MAINTAINERS
ACPICA: Rename variable to match upstream
ACPICA: Update version to 20171110
ACPICA: ACPI 6.2: Additional PPTT flags
ACPICA: Update linkage for get mutex name interface
ACPICA: Update mutex error messages, no functional change
ACPICA: Debugger: add "background" command for method execution
ACPICA: Small typo fix, no functional change
...
Diffstat (limited to 'drivers/acpi/acpica')
40 files changed, 672 insertions, 262 deletions
diff --git a/drivers/acpi/acpica/acapps.h b/drivers/acpi/acpica/acapps.h index 7a1a68b5ac5c..2243c8164b34 100644 --- a/drivers/acpi/acpica/acapps.h +++ b/drivers/acpi/acpica/acapps.h | |||
| @@ -80,6 +80,9 @@ | |||
| 80 | prefix, ACPICA_COPYRIGHT, \ | 80 | prefix, ACPICA_COPYRIGHT, \ |
| 81 | prefix | 81 | prefix |
| 82 | 82 | ||
| 83 | #define ACPI_COMMON_BUILD_TIME \ | ||
| 84 | "Build date/time: %s %s\n", __DATE__, __TIME__ | ||
| 85 | |||
| 83 | /* Macros for usage messages */ | 86 | /* Macros for usage messages */ |
| 84 | 87 | ||
| 85 | #define ACPI_USAGE_HEADER(usage) \ | 88 | #define ACPI_USAGE_HEADER(usage) \ |
diff --git a/drivers/acpi/acpica/acdebug.h b/drivers/acpi/acpica/acdebug.h index 71743e5252f5..54b8d9df9423 100644 --- a/drivers/acpi/acpica/acdebug.h +++ b/drivers/acpi/acpica/acdebug.h | |||
| @@ -223,6 +223,10 @@ void | |||
| 223 | acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags); | 223 | acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags); |
| 224 | 224 | ||
| 225 | void | 225 | void |
| 226 | acpi_db_create_execution_thread(char *method_name_arg, | ||
| 227 | char **arguments, acpi_object_type *types); | ||
| 228 | |||
| 229 | void | ||
| 226 | acpi_db_create_execution_threads(char *num_threads_arg, | 230 | acpi_db_create_execution_threads(char *num_threads_arg, |
| 227 | char *num_loops_arg, char *method_name_arg); | 231 | char *num_loops_arg, char *method_name_arg); |
| 228 | 232 | ||
diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h index 95eed442703f..45ef3f5dc9ad 100644 --- a/drivers/acpi/acpica/acglobal.h +++ b/drivers/acpi/acpica/acglobal.h | |||
| @@ -46,7 +46,7 @@ | |||
| 46 | 46 | ||
| 47 | /***************************************************************************** | 47 | /***************************************************************************** |
| 48 | * | 48 | * |
| 49 | * Globals related to the ACPI tables | 49 | * Globals related to the incoming ACPI tables |
| 50 | * | 50 | * |
| 51 | ****************************************************************************/ | 51 | ****************************************************************************/ |
| 52 | 52 | ||
| @@ -87,7 +87,7 @@ ACPI_GLOBAL(u8, acpi_gbl_integer_nybble_width); | |||
| 87 | 87 | ||
| 88 | /***************************************************************************** | 88 | /***************************************************************************** |
| 89 | * | 89 | * |
| 90 | * Mutual exclusion within ACPICA subsystem | 90 | * Mutual exclusion within the ACPICA subsystem |
| 91 | * | 91 | * |
| 92 | ****************************************************************************/ | 92 | ****************************************************************************/ |
| 93 | 93 | ||
| @@ -167,7 +167,7 @@ ACPI_GLOBAL(u8, acpi_gbl_next_owner_id_offset); | |||
| 167 | 167 | ||
| 168 | ACPI_INIT_GLOBAL(u8, acpi_gbl_namespace_initialized, FALSE); | 168 | ACPI_INIT_GLOBAL(u8, acpi_gbl_namespace_initialized, FALSE); |
| 169 | 169 | ||
| 170 | /* Misc */ | 170 | /* Miscellaneous */ |
| 171 | 171 | ||
| 172 | ACPI_GLOBAL(u32, acpi_gbl_original_mode); | 172 | ACPI_GLOBAL(u32, acpi_gbl_original_mode); |
| 173 | ACPI_GLOBAL(u32, acpi_gbl_ns_lookup_count); | 173 | ACPI_GLOBAL(u32, acpi_gbl_ns_lookup_count); |
| @@ -191,10 +191,9 @@ extern const char acpi_gbl_lower_hex_digits[]; | |||
| 191 | extern const char acpi_gbl_upper_hex_digits[]; | 191 | extern const char acpi_gbl_upper_hex_digits[]; |
| 192 | extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES]; | 192 | extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES]; |
| 193 | 193 | ||
| 194 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 195 | |||
| 196 | /* Lists for tracking memory allocations (debug only) */ | 194 | /* Lists for tracking memory allocations (debug only) */ |
| 197 | 195 | ||
| 196 | #ifdef ACPI_DBG_TRACK_ALLOCATIONS | ||
| 198 | ACPI_GLOBAL(struct acpi_memory_list *, acpi_gbl_global_list); | 197 | ACPI_GLOBAL(struct acpi_memory_list *, acpi_gbl_global_list); |
| 199 | ACPI_GLOBAL(struct acpi_memory_list *, acpi_gbl_ns_node_list); | 198 | ACPI_GLOBAL(struct acpi_memory_list *, acpi_gbl_ns_node_list); |
| 200 | ACPI_GLOBAL(u8, acpi_gbl_display_final_mem_stats); | 199 | ACPI_GLOBAL(u8, acpi_gbl_display_final_mem_stats); |
| @@ -203,7 +202,7 @@ ACPI_GLOBAL(u8, acpi_gbl_disable_mem_tracking); | |||
| 203 | 202 | ||
| 204 | /***************************************************************************** | 203 | /***************************************************************************** |
| 205 | * | 204 | * |
| 206 | * Namespace globals | 205 | * ACPI Namespace |
| 207 | * | 206 | * |
| 208 | ****************************************************************************/ | 207 | ****************************************************************************/ |
| 209 | 208 | ||
| @@ -234,15 +233,20 @@ ACPI_INIT_GLOBAL(u32, acpi_gbl_nesting_level, 0); | |||
| 234 | 233 | ||
| 235 | /***************************************************************************** | 234 | /***************************************************************************** |
| 236 | * | 235 | * |
| 237 | * Interpreter globals | 236 | * Interpreter/Parser globals |
| 238 | * | 237 | * |
| 239 | ****************************************************************************/ | 238 | ****************************************************************************/ |
| 240 | 239 | ||
| 241 | ACPI_GLOBAL(struct acpi_thread_state *, acpi_gbl_current_walk_list); | ||
| 242 | |||
| 243 | /* Control method single step flag */ | 240 | /* Control method single step flag */ |
| 244 | 241 | ||
| 245 | ACPI_GLOBAL(u8, acpi_gbl_cm_single_step); | 242 | ACPI_GLOBAL(u8, acpi_gbl_cm_single_step); |
| 243 | ACPI_GLOBAL(struct acpi_thread_state *, acpi_gbl_current_walk_list); | ||
| 244 | ACPI_INIT_GLOBAL(union acpi_parse_object, *acpi_gbl_current_scope, NULL); | ||
| 245 | |||
| 246 | /* ASL/ASL+ converter */ | ||
| 247 | |||
| 248 | ACPI_INIT_GLOBAL(u8, acpi_gbl_capture_comments, FALSE); | ||
| 249 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_last_list_head, NULL); | ||
| 246 | 250 | ||
| 247 | /***************************************************************************** | 251 | /***************************************************************************** |
| 248 | * | 252 | * |
| @@ -252,7 +256,6 @@ ACPI_GLOBAL(u8, acpi_gbl_cm_single_step); | |||
| 252 | 256 | ||
| 253 | extern struct acpi_bit_register_info | 257 | extern struct acpi_bit_register_info |
| 254 | acpi_gbl_bit_register_info[ACPI_NUM_BITREG]; | 258 | acpi_gbl_bit_register_info[ACPI_NUM_BITREG]; |
| 255 | |||
| 256 | ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a); | 259 | ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a); |
| 257 | ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b); | 260 | ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b); |
| 258 | 261 | ||
| @@ -263,7 +266,6 @@ ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b); | |||
| 263 | ****************************************************************************/ | 266 | ****************************************************************************/ |
| 264 | 267 | ||
| 265 | #if (!ACPI_REDUCED_HARDWARE) | 268 | #if (!ACPI_REDUCED_HARDWARE) |
| 266 | |||
| 267 | ACPI_GLOBAL(u8, acpi_gbl_all_gpes_initialized); | 269 | ACPI_GLOBAL(u8, acpi_gbl_all_gpes_initialized); |
| 268 | ACPI_GLOBAL(struct acpi_gpe_xrupt_info *, acpi_gbl_gpe_xrupt_list_head); | 270 | ACPI_GLOBAL(struct acpi_gpe_xrupt_info *, acpi_gbl_gpe_xrupt_list_head); |
| 269 | ACPI_GLOBAL(struct acpi_gpe_block_info *, | 271 | ACPI_GLOBAL(struct acpi_gpe_block_info *, |
| @@ -272,10 +274,8 @@ ACPI_GLOBAL(acpi_gbl_event_handler, acpi_gbl_global_event_handler); | |||
| 272 | ACPI_GLOBAL(void *, acpi_gbl_global_event_handler_context); | 274 | ACPI_GLOBAL(void *, acpi_gbl_global_event_handler_context); |
| 273 | ACPI_GLOBAL(struct acpi_fixed_event_handler, | 275 | ACPI_GLOBAL(struct acpi_fixed_event_handler, |
| 274 | acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]); | 276 | acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]); |
| 275 | |||
| 276 | extern struct acpi_fixed_event_info | 277 | extern struct acpi_fixed_event_info |
| 277 | acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS]; | 278 | acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS]; |
| 278 | |||
| 279 | #endif /* !ACPI_REDUCED_HARDWARE */ | 279 | #endif /* !ACPI_REDUCED_HARDWARE */ |
| 280 | 280 | ||
| 281 | /***************************************************************************** | 281 | /***************************************************************************** |
| @@ -291,14 +291,14 @@ ACPI_GLOBAL(u32, acpi_gpe_count); | |||
| 291 | ACPI_GLOBAL(u32, acpi_sci_count); | 291 | ACPI_GLOBAL(u32, acpi_sci_count); |
| 292 | ACPI_GLOBAL(u32, acpi_fixed_event_count[ACPI_NUM_FIXED_EVENTS]); | 292 | ACPI_GLOBAL(u32, acpi_fixed_event_count[ACPI_NUM_FIXED_EVENTS]); |
| 293 | 293 | ||
| 294 | /* Support for dynamic control method tracing mechanism */ | 294 | /* Dynamic control method tracing mechanism */ |
| 295 | 295 | ||
| 296 | ACPI_GLOBAL(u32, acpi_gbl_original_dbg_level); | 296 | ACPI_GLOBAL(u32, acpi_gbl_original_dbg_level); |
| 297 | ACPI_GLOBAL(u32, acpi_gbl_original_dbg_layer); | 297 | ACPI_GLOBAL(u32, acpi_gbl_original_dbg_layer); |
| 298 | 298 | ||
| 299 | /***************************************************************************** | 299 | /***************************************************************************** |
| 300 | * | 300 | * |
| 301 | * Debugger and Disassembler globals | 301 | * Debugger and Disassembler |
| 302 | * | 302 | * |
| 303 | ****************************************************************************/ | 303 | ****************************************************************************/ |
| 304 | 304 | ||
| @@ -326,7 +326,6 @@ ACPI_GLOBAL(struct acpi_external_file *, acpi_gbl_external_file_list); | |||
| 326 | #endif | 326 | #endif |
| 327 | 327 | ||
| 328 | #ifdef ACPI_DEBUGGER | 328 | #ifdef ACPI_DEBUGGER |
| 329 | |||
| 330 | ACPI_INIT_GLOBAL(u8, acpi_gbl_abort_method, FALSE); | 329 | ACPI_INIT_GLOBAL(u8, acpi_gbl_abort_method, FALSE); |
| 331 | ACPI_INIT_GLOBAL(acpi_thread_id, acpi_gbl_db_thread_id, ACPI_INVALID_THREAD_ID); | 330 | ACPI_INIT_GLOBAL(acpi_thread_id, acpi_gbl_db_thread_id, ACPI_INVALID_THREAD_ID); |
| 332 | 331 | ||
| @@ -340,7 +339,6 @@ ACPI_GLOBAL(u32, acpi_gbl_db_console_debug_level); | |||
| 340 | ACPI_GLOBAL(struct acpi_namespace_node *, acpi_gbl_db_scope_node); | 339 | ACPI_GLOBAL(struct acpi_namespace_node *, acpi_gbl_db_scope_node); |
| 341 | ACPI_GLOBAL(u8, acpi_gbl_db_terminate_loop); | 340 | ACPI_GLOBAL(u8, acpi_gbl_db_terminate_loop); |
| 342 | ACPI_GLOBAL(u8, acpi_gbl_db_threads_terminated); | 341 | ACPI_GLOBAL(u8, acpi_gbl_db_threads_terminated); |
| 343 | |||
| 344 | ACPI_GLOBAL(char *, acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS]); | 342 | ACPI_GLOBAL(char *, acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS]); |
| 345 | ACPI_GLOBAL(acpi_object_type, acpi_gbl_db_arg_types[ACPI_DEBUGGER_MAX_ARGS]); | 343 | ACPI_GLOBAL(acpi_object_type, acpi_gbl_db_arg_types[ACPI_DEBUGGER_MAX_ARGS]); |
| 346 | 344 | ||
| @@ -350,32 +348,33 @@ ACPI_GLOBAL(char, acpi_gbl_db_parsed_buf[ACPI_DB_LINE_BUFFER_SIZE]); | |||
| 350 | ACPI_GLOBAL(char, acpi_gbl_db_scope_buf[ACPI_DB_LINE_BUFFER_SIZE]); | 348 | ACPI_GLOBAL(char, acpi_gbl_db_scope_buf[ACPI_DB_LINE_BUFFER_SIZE]); |
| 351 | ACPI_GLOBAL(char, acpi_gbl_db_debug_filename[ACPI_DB_LINE_BUFFER_SIZE]); | 349 | ACPI_GLOBAL(char, acpi_gbl_db_debug_filename[ACPI_DB_LINE_BUFFER_SIZE]); |
| 352 | 350 | ||
| 353 | /* | 351 | /* Statistics globals */ |
| 354 | * Statistic globals | 352 | |
| 355 | */ | ||
| 356 | ACPI_GLOBAL(u16, acpi_gbl_obj_type_count[ACPI_TOTAL_TYPES]); | 353 | ACPI_GLOBAL(u16, acpi_gbl_obj_type_count[ACPI_TOTAL_TYPES]); |
| 357 | ACPI_GLOBAL(u16, acpi_gbl_node_type_count[ACPI_TOTAL_TYPES]); | 354 | ACPI_GLOBAL(u16, acpi_gbl_node_type_count[ACPI_TOTAL_TYPES]); |
| 358 | ACPI_GLOBAL(u16, acpi_gbl_obj_type_count_misc); | 355 | ACPI_GLOBAL(u16, acpi_gbl_obj_type_count_misc); |
| 359 | ACPI_GLOBAL(u16, acpi_gbl_node_type_count_misc); | 356 | ACPI_GLOBAL(u16, acpi_gbl_node_type_count_misc); |
| 360 | ACPI_GLOBAL(u32, acpi_gbl_num_nodes); | 357 | ACPI_GLOBAL(u32, acpi_gbl_num_nodes); |
| 361 | ACPI_GLOBAL(u32, acpi_gbl_num_objects); | 358 | ACPI_GLOBAL(u32, acpi_gbl_num_objects); |
| 362 | |||
| 363 | #endif /* ACPI_DEBUGGER */ | 359 | #endif /* ACPI_DEBUGGER */ |
| 364 | 360 | ||
| 365 | #if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER) | 361 | #if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER) |
| 366 | |||
| 367 | ACPI_GLOBAL(const char, *acpi_gbl_pld_panel_list[]); | 362 | ACPI_GLOBAL(const char, *acpi_gbl_pld_panel_list[]); |
| 368 | ACPI_GLOBAL(const char, *acpi_gbl_pld_vertical_position_list[]); | 363 | ACPI_GLOBAL(const char, *acpi_gbl_pld_vertical_position_list[]); |
| 369 | ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]); | 364 | ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]); |
| 370 | ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]); | 365 | ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]); |
| 371 | |||
| 372 | ACPI_INIT_GLOBAL(u8, acpi_gbl_disasm_flag, FALSE); | 366 | ACPI_INIT_GLOBAL(u8, acpi_gbl_disasm_flag, FALSE); |
| 373 | |||
| 374 | #endif | 367 | #endif |
| 375 | 368 | ||
| 376 | /* | 369 | /***************************************************************************** |
| 377 | * Meant for the -ca option. | 370 | * |
| 378 | */ | 371 | * ACPICA application-specific globals |
| 372 | * | ||
| 373 | ****************************************************************************/ | ||
| 374 | |||
| 375 | /* ASL-to-ASL+ conversion utility (implemented within the iASL compiler) */ | ||
| 376 | |||
| 377 | #ifdef ACPI_ASL_COMPILER | ||
| 379 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_inline_comment, NULL); | 378 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_inline_comment, NULL); |
| 380 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_end_node_comment, NULL); | 379 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_end_node_comment, NULL); |
| 381 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_open_brace_comment, NULL); | 380 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_open_brace_comment, NULL); |
| @@ -386,23 +385,18 @@ ACPI_INIT_GLOBAL(char *, acpi_gbl_current_filename, NULL); | |||
| 386 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_parent_filename, NULL); | 385 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_parent_filename, NULL); |
| 387 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_include_filename, NULL); | 386 | ACPI_INIT_GLOBAL(char *, acpi_gbl_current_include_filename, NULL); |
| 388 | 387 | ||
| 389 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_last_list_head, NULL); | ||
| 390 | |||
| 391 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_def_blk_comment_list_head, | 388 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_def_blk_comment_list_head, |
| 392 | NULL); | 389 | NULL); |
| 393 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_def_blk_comment_list_tail, | 390 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_def_blk_comment_list_tail, |
| 394 | NULL); | 391 | NULL); |
| 395 | |||
| 396 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_reg_comment_list_head, | 392 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_reg_comment_list_head, |
| 397 | NULL); | 393 | NULL); |
| 398 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_reg_comment_list_tail, | 394 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_reg_comment_list_tail, |
| 399 | NULL); | 395 | NULL); |
| 400 | |||
| 401 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_inc_comment_list_head, | 396 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_inc_comment_list_head, |
| 402 | NULL); | 397 | NULL); |
| 403 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_inc_comment_list_tail, | 398 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_inc_comment_list_tail, |
| 404 | NULL); | 399 | NULL); |
| 405 | |||
| 406 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_end_blk_comment_list_head, | 400 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_end_blk_comment_list_head, |
| 407 | NULL); | 401 | NULL); |
| 408 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_end_blk_comment_list_tail, | 402 | ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_end_blk_comment_list_tail, |
| @@ -410,30 +404,18 @@ ACPI_INIT_GLOBAL(struct acpi_comment_node, *acpi_gbl_end_blk_comment_list_tail, | |||
| 410 | 404 | ||
| 411 | ACPI_INIT_GLOBAL(struct acpi_comment_addr_node, | 405 | ACPI_INIT_GLOBAL(struct acpi_comment_addr_node, |
| 412 | *acpi_gbl_comment_addr_list_head, NULL); | 406 | *acpi_gbl_comment_addr_list_head, NULL); |
| 413 | |||
| 414 | ACPI_INIT_GLOBAL(union acpi_parse_object, *acpi_gbl_current_scope, NULL); | ||
| 415 | |||
| 416 | ACPI_INIT_GLOBAL(struct acpi_file_node, *acpi_gbl_file_tree_root, NULL); | 407 | ACPI_INIT_GLOBAL(struct acpi_file_node, *acpi_gbl_file_tree_root, NULL); |
| 417 | 408 | ||
| 418 | ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_reg_comment_cache); | 409 | ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_reg_comment_cache); |
| 419 | ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_comment_addr_cache); | 410 | ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_comment_addr_cache); |
| 420 | ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_file_cache); | 411 | ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_file_cache); |
| 421 | 412 | ||
| 422 | ACPI_INIT_GLOBAL(u8, gbl_capture_comments, FALSE); | ||
| 423 | |||
| 424 | ACPI_INIT_GLOBAL(u8, acpi_gbl_debug_asl_conversion, FALSE); | 413 | ACPI_INIT_GLOBAL(u8, acpi_gbl_debug_asl_conversion, FALSE); |
| 425 | ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_conv_debug_file, NULL); | 414 | ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_conv_debug_file, NULL); |
| 426 | |||
| 427 | ACPI_GLOBAL(char, acpi_gbl_table_sig[4]); | 415 | ACPI_GLOBAL(char, acpi_gbl_table_sig[4]); |
| 428 | 416 | #endif | |
| 429 | /***************************************************************************** | ||
| 430 | * | ||
| 431 | * Application globals | ||
| 432 | * | ||
| 433 | ****************************************************************************/ | ||
| 434 | 417 | ||
| 435 | #ifdef ACPI_APPLICATION | 418 | #ifdef ACPI_APPLICATION |
| 436 | |||
| 437 | ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_debug_file, NULL); | 419 | ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_debug_file, NULL); |
| 438 | ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_output_file, NULL); | 420 | ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_output_file, NULL); |
| 439 | ACPI_INIT_GLOBAL(u8, acpi_gbl_debug_timeout, FALSE); | 421 | ACPI_INIT_GLOBAL(u8, acpi_gbl_debug_timeout, FALSE); |
| @@ -442,16 +424,6 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_debug_timeout, FALSE); | |||
| 442 | 424 | ||
| 443 | ACPI_GLOBAL(acpi_spinlock, acpi_gbl_print_lock); /* For print buffer */ | 425 | ACPI_GLOBAL(acpi_spinlock, acpi_gbl_print_lock); /* For print buffer */ |
| 444 | ACPI_GLOBAL(char, acpi_gbl_print_buffer[1024]); | 426 | ACPI_GLOBAL(char, acpi_gbl_print_buffer[1024]); |
| 445 | |||
| 446 | #endif /* ACPI_APPLICATION */ | 427 | #endif /* ACPI_APPLICATION */ |
| 447 | 428 | ||
| 448 | /***************************************************************************** | ||
| 449 | * | ||
| 450 | * Info/help support | ||
| 451 | * | ||
| 452 | ****************************************************************************/ | ||
| 453 | |||
| 454 | extern const struct ah_predefined_name asl_predefined_info[]; | ||
| 455 | extern const struct ah_device_id asl_device_ids[]; | ||
| 456 | |||
| 457 | #endif /* __ACGLOBAL_H__ */ | 429 | #endif /* __ACGLOBAL_H__ */ |
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h index 0d45b8bb1678..a56675f0661e 100644 --- a/drivers/acpi/acpica/aclocal.h +++ b/drivers/acpi/acpica/aclocal.h | |||
| @@ -622,7 +622,7 @@ struct acpi_control_state { | |||
| 622 | union acpi_parse_object *predicate_op; | 622 | union acpi_parse_object *predicate_op; |
| 623 | u8 *aml_predicate_start; /* Start of if/while predicate */ | 623 | u8 *aml_predicate_start; /* Start of if/while predicate */ |
| 624 | u8 *package_end; /* End of if/while block */ | 624 | u8 *package_end; /* End of if/while block */ |
| 625 | u32 loop_count; /* While() loop counter */ | 625 | u64 loop_timeout; /* While() loop timeout */ |
| 626 | }; | 626 | }; |
| 627 | 627 | ||
| 628 | /* | 628 | /* |
| @@ -1218,16 +1218,17 @@ struct acpi_db_method_info { | |||
| 1218 | acpi_object_type *types; | 1218 | acpi_object_type *types; |
| 1219 | 1219 | ||
| 1220 | /* | 1220 | /* |
| 1221 | * Arguments to be passed to method for the command | 1221 | * Arguments to be passed to method for the commands Threads and |
| 1222 | * Threads - | 1222 | * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6). |
| 1223 | * the Number of threads, ID of current thread and | 1223 | * |
| 1224 | * Index of current thread inside all them created. | 1224 | * For the Threads command, the Number of threads, ID of current |
| 1225 | * thread and Index of current thread inside all them created. | ||
| 1225 | */ | 1226 | */ |
| 1226 | char init_args; | 1227 | char init_args; |
| 1227 | #ifdef ACPI_DEBUGGER | 1228 | #ifdef ACPI_DEBUGGER |
| 1228 | acpi_object_type arg_types[4]; | 1229 | acpi_object_type arg_types[ACPI_METHOD_NUM_ARGS]; |
| 1229 | #endif | 1230 | #endif |
| 1230 | char *arguments[4]; | 1231 | char *arguments[ACPI_METHOD_NUM_ARGS]; |
| 1231 | char num_threads_str[11]; | 1232 | char num_threads_str[11]; |
| 1232 | char id_of_thread_str[11]; | 1233 | char id_of_thread_str[11]; |
| 1233 | char index_of_thread_str[11]; | 1234 | char index_of_thread_str[11]; |
diff --git a/drivers/acpi/acpica/acmacros.h b/drivers/acpi/acpica/acmacros.h index c7f0c96cc00f..128a3d71b598 100644 --- a/drivers/acpi/acpica/acmacros.h +++ b/drivers/acpi/acpica/acmacros.h | |||
| @@ -455,7 +455,7 @@ | |||
| 455 | * the plist contains a set of parens to allow variable-length lists. | 455 | * the plist contains a set of parens to allow variable-length lists. |
| 456 | * These macros are used for both the debug and non-debug versions of the code. | 456 | * These macros are used for both the debug and non-debug versions of the code. |
| 457 | */ | 457 | */ |
| 458 | #define ACPI_ERROR_NAMESPACE(s, e) acpi_ut_namespace_error (AE_INFO, s, e); | 458 | #define ACPI_ERROR_NAMESPACE(s, p, e) acpi_ut_prefixed_namespace_error (AE_INFO, s, p, e); |
| 459 | #define ACPI_ERROR_METHOD(s, n, p, e) acpi_ut_method_error (AE_INFO, s, n, p, e); | 459 | #define ACPI_ERROR_METHOD(s, n, p, e) acpi_ut_method_error (AE_INFO, s, n, p, e); |
| 460 | #define ACPI_WARN_PREDEFINED(plist) acpi_ut_predefined_warning plist | 460 | #define ACPI_WARN_PREDEFINED(plist) acpi_ut_predefined_warning plist |
| 461 | #define ACPI_INFO_PREDEFINED(plist) acpi_ut_predefined_info plist | 461 | #define ACPI_INFO_PREDEFINED(plist) acpi_ut_predefined_info plist |
diff --git a/drivers/acpi/acpica/acnamesp.h b/drivers/acpi/acpica/acnamesp.h index 54a0c51b3e37..2fb1bb78d85c 100644 --- a/drivers/acpi/acpica/acnamesp.h +++ b/drivers/acpi/acpica/acnamesp.h | |||
| @@ -289,6 +289,9 @@ acpi_ns_build_normalized_path(struct acpi_namespace_node *node, | |||
| 289 | char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, | 289 | char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, |
| 290 | u8 no_trailing); | 290 | u8 no_trailing); |
| 291 | 291 | ||
| 292 | char *acpi_ns_build_prefixed_pathname(union acpi_generic_state *prefix_scope, | ||
| 293 | const char *internal_path); | ||
| 294 | |||
| 292 | char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state); | 295 | char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state); |
| 293 | 296 | ||
| 294 | acpi_status | 297 | acpi_status |
diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h index 83b75e9db7ef..b6b29d717824 100644 --- a/drivers/acpi/acpica/acutils.h +++ b/drivers/acpi/acpica/acutils.h | |||
| @@ -118,9 +118,6 @@ extern const char *acpi_gbl_ptyp_decode[]; | |||
| 118 | #ifndef ACPI_MSG_ERROR | 118 | #ifndef ACPI_MSG_ERROR |
| 119 | #define ACPI_MSG_ERROR "ACPI Error: " | 119 | #define ACPI_MSG_ERROR "ACPI Error: " |
| 120 | #endif | 120 | #endif |
| 121 | #ifndef ACPI_MSG_EXCEPTION | ||
| 122 | #define ACPI_MSG_EXCEPTION "ACPI Exception: " | ||
| 123 | #endif | ||
| 124 | #ifndef ACPI_MSG_WARNING | 121 | #ifndef ACPI_MSG_WARNING |
| 125 | #define ACPI_MSG_WARNING "ACPI Warning: " | 122 | #define ACPI_MSG_WARNING "ACPI Warning: " |
| 126 | #endif | 123 | #endif |
| @@ -129,10 +126,10 @@ extern const char *acpi_gbl_ptyp_decode[]; | |||
| 129 | #endif | 126 | #endif |
| 130 | 127 | ||
| 131 | #ifndef ACPI_MSG_BIOS_ERROR | 128 | #ifndef ACPI_MSG_BIOS_ERROR |
| 132 | #define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): " | 129 | #define ACPI_MSG_BIOS_ERROR "Firmware Error (ACPI): " |
| 133 | #endif | 130 | #endif |
| 134 | #ifndef ACPI_MSG_BIOS_WARNING | 131 | #ifndef ACPI_MSG_BIOS_WARNING |
| 135 | #define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): " | 132 | #define ACPI_MSG_BIOS_WARNING "Firmware Warning (ACPI): " |
| 136 | #endif | 133 | #endif |
| 137 | 134 | ||
| 138 | /* | 135 | /* |
| @@ -233,10 +230,10 @@ u64 acpi_ut_implicit_strtoul64(char *string); | |||
| 233 | */ | 230 | */ |
| 234 | acpi_status acpi_ut_init_globals(void); | 231 | acpi_status acpi_ut_init_globals(void); |
| 235 | 232 | ||
| 236 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
| 237 | |||
| 238 | const char *acpi_ut_get_mutex_name(u32 mutex_id); | 233 | const char *acpi_ut_get_mutex_name(u32 mutex_id); |
| 239 | 234 | ||
| 235 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
| 236 | |||
| 240 | const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type); | 237 | const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type); |
| 241 | #endif | 238 | #endif |
| 242 | 239 | ||
| @@ -641,9 +638,11 @@ void ut_convert_backslashes(char *pathname); | |||
| 641 | 638 | ||
| 642 | void acpi_ut_repair_name(char *name); | 639 | void acpi_ut_repair_name(char *name); |
| 643 | 640 | ||
| 644 | #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) | 641 | #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) |
| 645 | u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source); | 642 | u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source); |
| 646 | 643 | ||
| 644 | void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size); | ||
| 645 | |||
| 647 | u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source); | 646 | u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source); |
| 648 | 647 | ||
| 649 | u8 | 648 | u8 |
| @@ -737,9 +736,11 @@ acpi_ut_predefined_bios_error(const char *module_name, | |||
| 737 | u8 node_flags, const char *format, ...); | 736 | u8 node_flags, const char *format, ...); |
| 738 | 737 | ||
| 739 | void | 738 | void |
| 740 | acpi_ut_namespace_error(const char *module_name, | 739 | acpi_ut_prefixed_namespace_error(const char *module_name, |
| 741 | u32 line_number, | 740 | u32 line_number, |
| 742 | const char *internal_name, acpi_status lookup_status); | 741 | union acpi_generic_state *prefix_scope, |
| 742 | const char *internal_name, | ||
| 743 | acpi_status lookup_status); | ||
| 743 | 744 | ||
| 744 | void | 745 | void |
| 745 | acpi_ut_method_error(const char *module_name, | 746 | acpi_ut_method_error(const char *module_name, |
diff --git a/drivers/acpi/acpica/dbexec.c b/drivers/acpi/acpica/dbexec.c index 3b30319752f0..ed088fceb18d 100644 --- a/drivers/acpi/acpica/dbexec.c +++ b/drivers/acpi/acpica/dbexec.c | |||
| @@ -67,6 +67,8 @@ static acpi_status | |||
| 67 | acpi_db_execution_walk(acpi_handle obj_handle, | 67 | acpi_db_execution_walk(acpi_handle obj_handle, |
| 68 | u32 nesting_level, void *context, void **return_value); | 68 | u32 nesting_level, void *context, void **return_value); |
| 69 | 69 | ||
| 70 | static void ACPI_SYSTEM_XFACE acpi_db_single_execution_thread(void *context); | ||
| 71 | |||
| 70 | /******************************************************************************* | 72 | /******************************************************************************* |
| 71 | * | 73 | * |
| 72 | * FUNCTION: acpi_db_delete_objects | 74 | * FUNCTION: acpi_db_delete_objects |
| @@ -229,7 +231,7 @@ static acpi_status acpi_db_execute_setup(struct acpi_db_method_info *info) | |||
| 229 | 231 | ||
| 230 | ACPI_FUNCTION_NAME(db_execute_setup); | 232 | ACPI_FUNCTION_NAME(db_execute_setup); |
| 231 | 233 | ||
| 232 | /* Catenate the current scope to the supplied name */ | 234 | /* Concatenate the current scope to the supplied name */ |
| 233 | 235 | ||
| 234 | info->pathname[0] = 0; | 236 | info->pathname[0] = 0; |
| 235 | if ((info->name[0] != '\\') && (info->name[0] != '/')) { | 237 | if ((info->name[0] != '\\') && (info->name[0] != '/')) { |
| @@ -611,6 +613,112 @@ static void ACPI_SYSTEM_XFACE acpi_db_method_thread(void *context) | |||
| 611 | 613 | ||
| 612 | /******************************************************************************* | 614 | /******************************************************************************* |
| 613 | * | 615 | * |
| 616 | * FUNCTION: acpi_db_single_execution_thread | ||
| 617 | * | ||
| 618 | * PARAMETERS: context - Method info struct | ||
| 619 | * | ||
| 620 | * RETURN: None | ||
| 621 | * | ||
| 622 | * DESCRIPTION: Create one thread and execute a method | ||
| 623 | * | ||
| 624 | ******************************************************************************/ | ||
| 625 | |||
| 626 | static void ACPI_SYSTEM_XFACE acpi_db_single_execution_thread(void *context) | ||
| 627 | { | ||
| 628 | struct acpi_db_method_info *info = context; | ||
| 629 | acpi_status status; | ||
| 630 | struct acpi_buffer return_obj; | ||
| 631 | |||
| 632 | acpi_os_printf("\n"); | ||
| 633 | |||
| 634 | status = acpi_db_execute_method(info, &return_obj); | ||
| 635 | if (ACPI_FAILURE(status)) { | ||
| 636 | acpi_os_printf("%s During evaluation of %s\n", | ||
| 637 | acpi_format_exception(status), info->pathname); | ||
| 638 | return; | ||
| 639 | } | ||
| 640 | |||
| 641 | /* Display a return object, if any */ | ||
| 642 | |||
| 643 | if (return_obj.length) { | ||
| 644 | acpi_os_printf("Evaluation of %s returned object %p, " | ||
| 645 | "external buffer length %X\n", | ||
| 646 | acpi_gbl_db_method_info.pathname, | ||
| 647 | return_obj.pointer, (u32)return_obj.length); | ||
| 648 | |||
| 649 | acpi_db_dump_external_object(return_obj.pointer, 1); | ||
| 650 | } | ||
| 651 | |||
| 652 | acpi_os_printf("\nBackground thread completed\n%c ", | ||
| 653 | ACPI_DEBUGGER_COMMAND_PROMPT); | ||
| 654 | } | ||
| 655 | |||
| 656 | /******************************************************************************* | ||
| 657 | * | ||
| 658 | * FUNCTION: acpi_db_create_execution_thread | ||
| 659 | * | ||
| 660 | * PARAMETERS: method_name_arg - Control method to execute | ||
| 661 | * arguments - Array of arguments to the method | ||
| 662 | * types - Corresponding array of object types | ||
| 663 | * | ||
| 664 | * RETURN: None | ||
| 665 | * | ||
| 666 | * DESCRIPTION: Create a single thread to evaluate a namespace object. Handles | ||
| 667 | * arguments passed on command line for control methods. | ||
| 668 | * | ||
| 669 | ******************************************************************************/ | ||
| 670 | |||
| 671 | void | ||
| 672 | acpi_db_create_execution_thread(char *method_name_arg, | ||
| 673 | char **arguments, acpi_object_type *types) | ||
| 674 | { | ||
| 675 | acpi_status status; | ||
| 676 | u32 i; | ||
| 677 | |||
| 678 | memset(&acpi_gbl_db_method_info, 0, sizeof(struct acpi_db_method_info)); | ||
| 679 | acpi_gbl_db_method_info.name = method_name_arg; | ||
| 680 | acpi_gbl_db_method_info.init_args = 1; | ||
| 681 | acpi_gbl_db_method_info.args = acpi_gbl_db_method_info.arguments; | ||
| 682 | acpi_gbl_db_method_info.types = acpi_gbl_db_method_info.arg_types; | ||
| 683 | |||
| 684 | /* Setup method arguments, up to 7 (0-6) */ | ||
| 685 | |||
| 686 | for (i = 0; (i < ACPI_METHOD_NUM_ARGS) && *arguments; i++) { | ||
| 687 | acpi_gbl_db_method_info.arguments[i] = *arguments; | ||
| 688 | arguments++; | ||
| 689 | |||
| 690 | acpi_gbl_db_method_info.arg_types[i] = *types; | ||
| 691 | types++; | ||
| 692 | } | ||
| 693 | |||
| 694 | status = acpi_db_execute_setup(&acpi_gbl_db_method_info); | ||
| 695 | if (ACPI_FAILURE(status)) { | ||
| 696 | return; | ||
| 697 | } | ||
| 698 | |||
| 699 | /* Get the NS node, determines existence also */ | ||
| 700 | |||
| 701 | status = acpi_get_handle(NULL, acpi_gbl_db_method_info.pathname, | ||
| 702 | &acpi_gbl_db_method_info.method); | ||
| 703 | if (ACPI_FAILURE(status)) { | ||
| 704 | acpi_os_printf("%s Could not get handle for %s\n", | ||
| 705 | acpi_format_exception(status), | ||
| 706 | acpi_gbl_db_method_info.pathname); | ||
| 707 | return; | ||
| 708 | } | ||
| 709 | |||
| 710 | status = acpi_os_execute(OSL_DEBUGGER_EXEC_THREAD, | ||
| 711 | acpi_db_single_execution_thread, | ||
| 712 | &acpi_gbl_db_method_info); | ||
| 713 | if (ACPI_FAILURE(status)) { | ||
| 714 | return; | ||
| 715 | } | ||
| 716 | |||
| 717 | acpi_os_printf("\nBackground thread started\n"); | ||
| 718 | } | ||
| 719 | |||
| 720 | /******************************************************************************* | ||
| 721 | * | ||
| 614 | * FUNCTION: acpi_db_create_execution_threads | 722 | * FUNCTION: acpi_db_create_execution_threads |
| 615 | * | 723 | * |
| 616 | * PARAMETERS: num_threads_arg - Number of threads to create | 724 | * PARAMETERS: num_threads_arg - Number of threads to create |
diff --git a/drivers/acpi/acpica/dbfileio.c b/drivers/acpi/acpica/dbfileio.c index 4d81ea291d93..cf9607945704 100644 --- a/drivers/acpi/acpica/dbfileio.c +++ b/drivers/acpi/acpica/dbfileio.c | |||
| @@ -99,8 +99,8 @@ void acpi_db_open_debug_file(char *name) | |||
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | acpi_os_printf("Debug output file %s opened\n", name); | 101 | acpi_os_printf("Debug output file %s opened\n", name); |
| 102 | strncpy(acpi_gbl_db_debug_filename, name, | 102 | acpi_ut_safe_strncpy(acpi_gbl_db_debug_filename, name, |
| 103 | sizeof(acpi_gbl_db_debug_filename)); | 103 | sizeof(acpi_gbl_db_debug_filename)); |
| 104 | acpi_gbl_db_output_to_file = TRUE; | 104 | acpi_gbl_db_output_to_file = TRUE; |
| 105 | } | 105 | } |
| 106 | #endif | 106 | #endif |
diff --git a/drivers/acpi/acpica/dbinput.c b/drivers/acpi/acpica/dbinput.c index 2626d79db064..954ca3b981a7 100644 --- a/drivers/acpi/acpica/dbinput.c +++ b/drivers/acpi/acpica/dbinput.c | |||
| @@ -136,6 +136,7 @@ enum acpi_ex_debugger_commands { | |||
| 136 | CMD_UNLOAD, | 136 | CMD_UNLOAD, |
| 137 | 137 | ||
| 138 | CMD_TERMINATE, | 138 | CMD_TERMINATE, |
| 139 | CMD_BACKGROUND, | ||
| 139 | CMD_THREADS, | 140 | CMD_THREADS, |
| 140 | 141 | ||
| 141 | CMD_TEST, | 142 | CMD_TEST, |
| @@ -212,6 +213,7 @@ static const struct acpi_db_command_info acpi_gbl_db_commands[] = { | |||
| 212 | {"UNLOAD", 1}, | 213 | {"UNLOAD", 1}, |
| 213 | 214 | ||
| 214 | {"TERMINATE", 0}, | 215 | {"TERMINATE", 0}, |
| 216 | {"BACKGROUND", 1}, | ||
| 215 | {"THREADS", 3}, | 217 | {"THREADS", 3}, |
| 216 | 218 | ||
| 217 | {"TEST", 1}, | 219 | {"TEST", 1}, |
| @@ -222,9 +224,56 @@ static const struct acpi_db_command_info acpi_gbl_db_commands[] = { | |||
| 222 | /* | 224 | /* |
| 223 | * Help for all debugger commands. First argument is the number of lines | 225 | * Help for all debugger commands. First argument is the number of lines |
| 224 | * of help to output for the command. | 226 | * of help to output for the command. |
| 227 | * | ||
| 228 | * Note: Some commands are not supported by the kernel-level version of | ||
| 229 | * the debugger. | ||
| 225 | */ | 230 | */ |
| 226 | static const struct acpi_db_command_help acpi_gbl_db_command_help[] = { | 231 | static const struct acpi_db_command_help acpi_gbl_db_command_help[] = { |
| 227 | {0, "\nGeneral-Purpose Commands:", "\n"}, | 232 | {0, "\nNamespace Access:", "\n"}, |
| 233 | {1, " Businfo", "Display system bus info\n"}, | ||
| 234 | {1, " Disassemble <Method>", "Disassemble a control method\n"}, | ||
| 235 | {1, " Find <AcpiName> (? is wildcard)", | ||
| 236 | "Find ACPI name(s) with wildcards\n"}, | ||
| 237 | {1, " Integrity", "Validate namespace integrity\n"}, | ||
| 238 | {1, " Methods", "Display list of loaded control methods\n"}, | ||
| 239 | {1, " Namespace [Object] [Depth]", | ||
| 240 | "Display loaded namespace tree/subtree\n"}, | ||
| 241 | {1, " Notify <Object> <Value>", "Send a notification on Object\n"}, | ||
| 242 | {1, " Objects [ObjectType]", | ||
| 243 | "Display summary of all objects or just given type\n"}, | ||
| 244 | {1, " Owner <OwnerId> [Depth]", | ||
| 245 | "Display loaded namespace by object owner\n"}, | ||
| 246 | {1, " Paths", "Display full pathnames of namespace objects\n"}, | ||
| 247 | {1, " Predefined", "Check all predefined names\n"}, | ||
| 248 | {1, " Prefix [<Namepath>]", "Set or Get current execution prefix\n"}, | ||
| 249 | {1, " References <Addr>", "Find all references to object at addr\n"}, | ||
| 250 | {1, " Resources [DeviceName]", | ||
| 251 | "Display Device resources (no arg = all devices)\n"}, | ||
| 252 | {1, " Set N <NamedObject> <Value>", "Set value for named integer\n"}, | ||
| 253 | {1, " Template <Object>", "Format/dump a Buffer/ResourceTemplate\n"}, | ||
| 254 | {1, " Type <Object>", "Display object type\n"}, | ||
| 255 | |||
| 256 | {0, "\nControl Method Execution:", "\n"}, | ||
| 257 | {1, " Evaluate <Namepath> [Arguments]", | ||
| 258 | "Evaluate object or control method\n"}, | ||
| 259 | {1, " Execute <Namepath> [Arguments]", "Synonym for Evaluate\n"}, | ||
| 260 | #ifdef ACPI_APPLICATION | ||
| 261 | {1, " Background <Namepath> [Arguments]", | ||
| 262 | "Evaluate object/method in a separate thread\n"}, | ||
| 263 | {1, " Thread <Threads><Loops><NamePath>", | ||
| 264 | "Spawn threads to execute method(s)\n"}, | ||
| 265 | #endif | ||
| 266 | {1, " Debug <Namepath> [Arguments]", "Single-Step a control method\n"}, | ||
| 267 | {7, " [Arguments] formats:", "Control method argument formats\n"}, | ||
| 268 | {1, " Hex Integer", "Integer\n"}, | ||
| 269 | {1, " \"Ascii String\"", "String\n"}, | ||
| 270 | {1, " (Hex Byte List)", "Buffer\n"}, | ||
| 271 | {1, " (01 42 7A BF)", "Buffer example (4 bytes)\n"}, | ||
| 272 | {1, " [Package Element List]", "Package\n"}, | ||
| 273 | {1, " [0x01 0x1234 \"string\"]", | ||
| 274 | "Package example (3 elements)\n"}, | ||
| 275 | |||
| 276 | {0, "\nMiscellaneous:", "\n"}, | ||
| 228 | {1, " Allocations", "Display list of current memory allocations\n"}, | 277 | {1, " Allocations", "Display list of current memory allocations\n"}, |
| 229 | {2, " Dump <Address>|<Namepath>", "\n"}, | 278 | {2, " Dump <Address>|<Namepath>", "\n"}, |
| 230 | {0, " [Byte|Word|Dword|Qword]", | 279 | {0, " [Byte|Word|Dword|Qword]", |
| @@ -248,46 +297,30 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = { | |||
| 248 | {1, " Stack", "Display CPU stack usage\n"}, | 297 | {1, " Stack", "Display CPU stack usage\n"}, |
| 249 | {1, " Tables", "Info about current ACPI table(s)\n"}, | 298 | {1, " Tables", "Info about current ACPI table(s)\n"}, |
| 250 | {1, " Tables", "Display info about loaded ACPI tables\n"}, | 299 | {1, " Tables", "Display info about loaded ACPI tables\n"}, |
| 300 | #ifdef ACPI_APPLICATION | ||
| 301 | {1, " Terminate", "Delete namespace and all internal objects\n"}, | ||
| 302 | #endif | ||
| 251 | {1, " ! <CommandNumber>", "Execute command from history buffer\n"}, | 303 | {1, " ! <CommandNumber>", "Execute command from history buffer\n"}, |
| 252 | {1, " !!", "Execute last command again\n"}, | 304 | {1, " !!", "Execute last command again\n"}, |
| 253 | 305 | ||
| 254 | {0, "\nNamespace Access Commands:", "\n"}, | 306 | {0, "\nMethod and Namespace Debugging:", "\n"}, |
| 255 | {1, " Businfo", "Display system bus info\n"}, | 307 | {5, " Trace <State> [<Namepath>] [Once]", |
| 256 | {1, " Disassemble <Method>", "Disassemble a control method\n"}, | 308 | "Trace control method execution\n"}, |
| 257 | {1, " Find <AcpiName> (? is wildcard)", | 309 | {1, " Enable", "Enable all messages\n"}, |
| 258 | "Find ACPI name(s) with wildcards\n"}, | 310 | {1, " Disable", "Disable tracing\n"}, |
| 259 | {1, " Integrity", "Validate namespace integrity\n"}, | 311 | {1, " Method", "Enable method execution messages\n"}, |
| 260 | {1, " Methods", "Display list of loaded control methods\n"}, | 312 | {1, " Opcode", "Enable opcode execution messages\n"}, |
| 261 | {1, " Namespace [Object] [Depth]", | 313 | {3, " Test <TestName>", "Invoke a debug test\n"}, |
| 262 | "Display loaded namespace tree/subtree\n"}, | 314 | {1, " Objects", "Read/write/compare all namespace data objects\n"}, |
| 263 | {1, " Notify <Object> <Value>", "Send a notification on Object\n"}, | 315 | {1, " Predefined", |
| 264 | {1, " Objects [ObjectType]", | 316 | "Validate all ACPI predefined names (_STA, etc.)\n"}, |
| 265 | "Display summary of all objects or just given type\n"}, | 317 | {1, " Execute predefined", |
| 266 | {1, " Owner <OwnerId> [Depth]", | 318 | "Execute all predefined (public) methods\n"}, |
| 267 | "Display loaded namespace by object owner\n"}, | ||
| 268 | {1, " Paths", "Display full pathnames of namespace objects\n"}, | ||
| 269 | {1, " Predefined", "Check all predefined names\n"}, | ||
| 270 | {1, " Prefix [<Namepath>]", "Set or Get current execution prefix\n"}, | ||
| 271 | {1, " References <Addr>", "Find all references to object at addr\n"}, | ||
| 272 | {1, " Resources [DeviceName]", | ||
| 273 | "Display Device resources (no arg = all devices)\n"}, | ||
| 274 | {1, " Set N <NamedObject> <Value>", "Set value for named integer\n"}, | ||
| 275 | {1, " Template <Object>", "Format/dump a Buffer/ResourceTemplate\n"}, | ||
| 276 | {1, " Type <Object>", "Display object type\n"}, | ||
| 277 | 319 | ||
| 278 | {0, "\nControl Method Execution Commands:", "\n"}, | 320 | {0, "\nControl Method Single-Step Execution:", "\n"}, |
| 279 | {1, " Arguments (or Args)", "Display method arguments\n"}, | 321 | {1, " Arguments (or Args)", "Display method arguments\n"}, |
| 280 | {1, " Breakpoint <AmlOffset>", "Set an AML execution breakpoint\n"}, | 322 | {1, " Breakpoint <AmlOffset>", "Set an AML execution breakpoint\n"}, |
| 281 | {1, " Call", "Run to next control method invocation\n"}, | 323 | {1, " Call", "Run to next control method invocation\n"}, |
| 282 | {1, " Debug <Namepath> [Arguments]", "Single Step a control method\n"}, | ||
| 283 | {6, " Evaluate", "Synonym for Execute\n"}, | ||
| 284 | {5, " Execute <Namepath> [Arguments]", "Execute control method\n"}, | ||
| 285 | {1, " Hex Integer", "Integer method argument\n"}, | ||
| 286 | {1, " \"Ascii String\"", "String method argument\n"}, | ||
| 287 | {1, " (Hex Byte List)", "Buffer method argument\n"}, | ||
| 288 | {1, " [Package Element List]", "Package method argument\n"}, | ||
| 289 | {5, " Execute predefined", | ||
| 290 | "Execute all predefined (public) methods\n"}, | ||
| 291 | {1, " Go", "Allow method to run to completion\n"}, | 324 | {1, " Go", "Allow method to run to completion\n"}, |
| 292 | {1, " Information", "Display info about the current method\n"}, | 325 | {1, " Information", "Display info about the current method\n"}, |
| 293 | {1, " Into", "Step into (not over) a method call\n"}, | 326 | {1, " Into", "Step into (not over) a method call\n"}, |
| @@ -296,41 +329,24 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = { | |||
| 296 | {1, " Results", "Display method result stack\n"}, | 329 | {1, " Results", "Display method result stack\n"}, |
| 297 | {1, " Set <A|L> <#> <Value>", "Set method data (Arguments/Locals)\n"}, | 330 | {1, " Set <A|L> <#> <Value>", "Set method data (Arguments/Locals)\n"}, |
| 298 | {1, " Stop", "Terminate control method\n"}, | 331 | {1, " Stop", "Terminate control method\n"}, |
| 299 | {5, " Trace <State> [<Namepath>] [Once]", | ||
| 300 | "Trace control method execution\n"}, | ||
| 301 | {1, " Enable", "Enable all messages\n"}, | ||
| 302 | {1, " Disable", "Disable tracing\n"}, | ||
| 303 | {1, " Method", "Enable method execution messages\n"}, | ||
| 304 | {1, " Opcode", "Enable opcode execution messages\n"}, | ||
| 305 | {1, " Tree", "Display control method calling tree\n"}, | 332 | {1, " Tree", "Display control method calling tree\n"}, |
| 306 | {1, " <Enter>", "Single step next AML opcode (over calls)\n"}, | 333 | {1, " <Enter>", "Single step next AML opcode (over calls)\n"}, |
| 307 | 334 | ||
| 308 | #ifdef ACPI_APPLICATION | 335 | #ifdef ACPI_APPLICATION |
| 309 | {0, "\nHardware Simulation Commands:", "\n"}, | 336 | {0, "\nFile Operations:", "\n"}, |
| 310 | {1, " EnableAcpi", "Enable ACPI (hardware) mode\n"}, | ||
| 311 | {1, " Event <F|G> <Value>", "Generate AcpiEvent (Fixed/GPE)\n"}, | ||
| 312 | {1, " Gpe <GpeNum> [GpeBlockDevice]", "Simulate a GPE\n"}, | ||
| 313 | {1, " Gpes", "Display info on all GPE devices\n"}, | ||
| 314 | {1, " Sci", "Generate an SCI\n"}, | ||
| 315 | {1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"}, | ||
| 316 | |||
| 317 | {0, "\nFile I/O Commands:", "\n"}, | ||
| 318 | {1, " Close", "Close debug output file\n"}, | 337 | {1, " Close", "Close debug output file\n"}, |
| 319 | {1, " Load <Input Filename>", "Load ACPI table from a file\n"}, | 338 | {1, " Load <Input Filename>", "Load ACPI table from a file\n"}, |
| 320 | {1, " Open <Output Filename>", "Open a file for debug output\n"}, | 339 | {1, " Open <Output Filename>", "Open a file for debug output\n"}, |
| 321 | {1, " Unload <Namepath>", | 340 | {1, " Unload <Namepath>", |
| 322 | "Unload an ACPI table via namespace object\n"}, | 341 | "Unload an ACPI table via namespace object\n"}, |
| 323 | 342 | ||
| 324 | {0, "\nUser Space Commands:", "\n"}, | 343 | {0, "\nHardware Simulation:", "\n"}, |
| 325 | {1, " Terminate", "Delete namespace and all internal objects\n"}, | 344 | {1, " EnableAcpi", "Enable ACPI (hardware) mode\n"}, |
| 326 | {1, " Thread <Threads><Loops><NamePath>", | 345 | {1, " Event <F|G> <Value>", "Generate AcpiEvent (Fixed/GPE)\n"}, |
| 327 | "Spawn threads to execute method(s)\n"}, | 346 | {1, " Gpe <GpeNum> [GpeBlockDevice]", "Simulate a GPE\n"}, |
| 328 | 347 | {1, " Gpes", "Display info on all GPE devices\n"}, | |
| 329 | {0, "\nDebug Test Commands:", "\n"}, | 348 | {1, " Sci", "Generate an SCI\n"}, |
| 330 | {3, " Test <TestName>", "Invoke a debug test\n"}, | 349 | {1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"}, |
| 331 | {1, " Objects", "Read/write/compare all namespace data objects\n"}, | ||
| 332 | {1, " Predefined", | ||
| 333 | "Execute all ACPI predefined names (_STA, etc.)\n"}, | ||
| 334 | #endif | 350 | #endif |
| 335 | {0, NULL, NULL} | 351 | {0, NULL, NULL} |
| 336 | }; | 352 | }; |
| @@ -442,11 +458,15 @@ static void acpi_db_display_help(char *command) | |||
| 442 | 458 | ||
| 443 | /* No argument to help, display help for all commands */ | 459 | /* No argument to help, display help for all commands */ |
| 444 | 460 | ||
| 461 | acpi_os_printf("\nSummary of AML Debugger Commands\n\n"); | ||
| 462 | |||
| 445 | while (next->invocation) { | 463 | while (next->invocation) { |
| 446 | acpi_os_printf("%-38s%s", next->invocation, | 464 | acpi_os_printf("%-38s%s", next->invocation, |
| 447 | next->description); | 465 | next->description); |
| 448 | next++; | 466 | next++; |
| 449 | } | 467 | } |
| 468 | acpi_os_printf("\n"); | ||
| 469 | |||
| 450 | } else { | 470 | } else { |
| 451 | /* Display help for all commands that match the subtring */ | 471 | /* Display help for all commands that match the subtring */ |
| 452 | 472 | ||
| @@ -1087,6 +1107,13 @@ acpi_db_command_dispatch(char *input_buffer, | |||
| 1087 | /* acpi_initialize (NULL); */ | 1107 | /* acpi_initialize (NULL); */ |
| 1088 | break; | 1108 | break; |
| 1089 | 1109 | ||
| 1110 | case CMD_BACKGROUND: | ||
| 1111 | |||
| 1112 | acpi_db_create_execution_thread(acpi_gbl_db_args[1], | ||
| 1113 | &acpi_gbl_db_args[2], | ||
| 1114 | &acpi_gbl_db_arg_types[2]); | ||
| 1115 | break; | ||
| 1116 | |||
| 1090 | case CMD_THREADS: | 1117 | case CMD_THREADS: |
| 1091 | 1118 | ||
| 1092 | acpi_db_create_execution_threads(acpi_gbl_db_args[1], | 1119 | acpi_db_create_execution_threads(acpi_gbl_db_args[1], |
diff --git a/drivers/acpi/acpica/dscontrol.c b/drivers/acpi/acpica/dscontrol.c index f470e81b0499..4b6ebc2a2851 100644 --- a/drivers/acpi/acpica/dscontrol.c +++ b/drivers/acpi/acpica/dscontrol.c | |||
| @@ -118,6 +118,8 @@ acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state, | |||
| 118 | control_state->control.package_end = | 118 | control_state->control.package_end = |
| 119 | walk_state->parser_state.pkg_end; | 119 | walk_state->parser_state.pkg_end; |
| 120 | control_state->control.opcode = op->common.aml_opcode; | 120 | control_state->control.opcode = op->common.aml_opcode; |
| 121 | control_state->control.loop_timeout = acpi_os_get_timer() + | ||
| 122 | (u64)(acpi_gbl_max_loop_iterations * ACPI_100NSEC_PER_SEC); | ||
| 121 | 123 | ||
| 122 | /* Push the control state on this walk's control stack */ | 124 | /* Push the control state on this walk's control stack */ |
| 123 | 125 | ||
| @@ -206,15 +208,15 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state, | |||
| 206 | /* Predicate was true, the body of the loop was just executed */ | 208 | /* Predicate was true, the body of the loop was just executed */ |
| 207 | 209 | ||
| 208 | /* | 210 | /* |
| 209 | * This loop counter mechanism allows the interpreter to escape | 211 | * This infinite loop detection mechanism allows the interpreter |
| 210 | * possibly infinite loops. This can occur in poorly written AML | 212 | * to escape possibly infinite loops. This can occur in poorly |
| 211 | * when the hardware does not respond within a while loop and the | 213 | * written AML when the hardware does not respond within a while |
| 212 | * loop does not implement a timeout. | 214 | * loop and the loop does not implement a timeout. |
| 213 | */ | 215 | */ |
| 214 | control_state->control.loop_count++; | 216 | if (ACPI_TIME_AFTER(acpi_os_get_timer(), |
| 215 | if (control_state->control.loop_count > | 217 | control_state->control. |
| 216 | acpi_gbl_max_loop_iterations) { | 218 | loop_timeout)) { |
| 217 | status = AE_AML_INFINITE_LOOP; | 219 | status = AE_AML_LOOP_TIMEOUT; |
| 218 | break; | 220 | break; |
| 219 | } | 221 | } |
| 220 | 222 | ||
diff --git a/drivers/acpi/acpica/dsfield.c b/drivers/acpi/acpica/dsfield.c index 7bcf5f5ea029..0cab34a593d5 100644 --- a/drivers/acpi/acpica/dsfield.c +++ b/drivers/acpi/acpica/dsfield.c | |||
| @@ -209,7 +209,8 @@ acpi_ds_create_buffer_field(union acpi_parse_object *op, | |||
| 209 | ACPI_IMODE_LOAD_PASS1, flags, | 209 | ACPI_IMODE_LOAD_PASS1, flags, |
| 210 | walk_state, &node); | 210 | walk_state, &node); |
| 211 | if (ACPI_FAILURE(status)) { | 211 | if (ACPI_FAILURE(status)) { |
| 212 | ACPI_ERROR_NAMESPACE(arg->common.value.string, status); | 212 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 213 | arg->common.value.string, status); | ||
| 213 | return_ACPI_STATUS(status); | 214 | return_ACPI_STATUS(status); |
| 214 | } | 215 | } |
| 215 | } | 216 | } |
| @@ -383,7 +384,9 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info, | |||
| 383 | walk_state, | 384 | walk_state, |
| 384 | &info->connection_node); | 385 | &info->connection_node); |
| 385 | if (ACPI_FAILURE(status)) { | 386 | if (ACPI_FAILURE(status)) { |
| 386 | ACPI_ERROR_NAMESPACE(child->common. | 387 | ACPI_ERROR_NAMESPACE(walk_state-> |
| 388 | scope_info, | ||
| 389 | child->common. | ||
| 387 | value.name, | 390 | value.name, |
| 388 | status); | 391 | status); |
| 389 | return_ACPI_STATUS(status); | 392 | return_ACPI_STATUS(status); |
| @@ -402,7 +405,8 @@ acpi_ds_get_field_names(struct acpi_create_field_info *info, | |||
| 402 | ACPI_NS_DONT_OPEN_SCOPE, | 405 | ACPI_NS_DONT_OPEN_SCOPE, |
| 403 | walk_state, &info->field_node); | 406 | walk_state, &info->field_node); |
| 404 | if (ACPI_FAILURE(status)) { | 407 | if (ACPI_FAILURE(status)) { |
| 405 | ACPI_ERROR_NAMESPACE((char *)&arg->named.name, | 408 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 409 | (char *)&arg->named.name, | ||
| 406 | status); | 410 | status); |
| 407 | return_ACPI_STATUS(status); | 411 | return_ACPI_STATUS(status); |
| 408 | } else { | 412 | } else { |
| @@ -498,7 +502,8 @@ acpi_ds_create_field(union acpi_parse_object *op, | |||
| 498 | ®ion_node); | 502 | ®ion_node); |
| 499 | #endif | 503 | #endif |
| 500 | if (ACPI_FAILURE(status)) { | 504 | if (ACPI_FAILURE(status)) { |
| 501 | ACPI_ERROR_NAMESPACE(arg->common.value.name, status); | 505 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 506 | arg->common.value.name, status); | ||
| 502 | return_ACPI_STATUS(status); | 507 | return_ACPI_STATUS(status); |
| 503 | } | 508 | } |
| 504 | } | 509 | } |
| @@ -618,7 +623,8 @@ acpi_ds_init_field_objects(union acpi_parse_object *op, | |||
| 618 | ACPI_IMODE_LOAD_PASS1, flags, | 623 | ACPI_IMODE_LOAD_PASS1, flags, |
| 619 | walk_state, &node); | 624 | walk_state, &node); |
| 620 | if (ACPI_FAILURE(status)) { | 625 | if (ACPI_FAILURE(status)) { |
| 621 | ACPI_ERROR_NAMESPACE((char *)&arg->named.name, | 626 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 627 | (char *)&arg->named.name, | ||
| 622 | status); | 628 | status); |
| 623 | if (status != AE_ALREADY_EXISTS) { | 629 | if (status != AE_ALREADY_EXISTS) { |
| 624 | return_ACPI_STATUS(status); | 630 | return_ACPI_STATUS(status); |
| @@ -681,7 +687,8 @@ acpi_ds_create_bank_field(union acpi_parse_object *op, | |||
| 681 | ®ion_node); | 687 | ®ion_node); |
| 682 | #endif | 688 | #endif |
| 683 | if (ACPI_FAILURE(status)) { | 689 | if (ACPI_FAILURE(status)) { |
| 684 | ACPI_ERROR_NAMESPACE(arg->common.value.name, status); | 690 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 691 | arg->common.value.name, status); | ||
| 685 | return_ACPI_STATUS(status); | 692 | return_ACPI_STATUS(status); |
| 686 | } | 693 | } |
| 687 | } | 694 | } |
| @@ -695,7 +702,8 @@ acpi_ds_create_bank_field(union acpi_parse_object *op, | |||
| 695 | ACPI_NS_SEARCH_PARENT, walk_state, | 702 | ACPI_NS_SEARCH_PARENT, walk_state, |
| 696 | &info.register_node); | 703 | &info.register_node); |
| 697 | if (ACPI_FAILURE(status)) { | 704 | if (ACPI_FAILURE(status)) { |
| 698 | ACPI_ERROR_NAMESPACE(arg->common.value.string, status); | 705 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 706 | arg->common.value.string, status); | ||
| 699 | return_ACPI_STATUS(status); | 707 | return_ACPI_STATUS(status); |
| 700 | } | 708 | } |
| 701 | 709 | ||
| @@ -765,7 +773,8 @@ acpi_ds_create_index_field(union acpi_parse_object *op, | |||
| 765 | ACPI_NS_SEARCH_PARENT, walk_state, | 773 | ACPI_NS_SEARCH_PARENT, walk_state, |
| 766 | &info.register_node); | 774 | &info.register_node); |
| 767 | if (ACPI_FAILURE(status)) { | 775 | if (ACPI_FAILURE(status)) { |
| 768 | ACPI_ERROR_NAMESPACE(arg->common.value.string, status); | 776 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 777 | arg->common.value.string, status); | ||
| 769 | return_ACPI_STATUS(status); | 778 | return_ACPI_STATUS(status); |
| 770 | } | 779 | } |
| 771 | 780 | ||
| @@ -778,7 +787,8 @@ acpi_ds_create_index_field(union acpi_parse_object *op, | |||
| 778 | ACPI_NS_SEARCH_PARENT, walk_state, | 787 | ACPI_NS_SEARCH_PARENT, walk_state, |
| 779 | &info.data_register_node); | 788 | &info.data_register_node); |
| 780 | if (ACPI_FAILURE(status)) { | 789 | if (ACPI_FAILURE(status)) { |
| 781 | ACPI_ERROR_NAMESPACE(arg->common.value.string, status); | 790 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 791 | arg->common.value.string, status); | ||
| 782 | return_ACPI_STATUS(status); | 792 | return_ACPI_STATUS(status); |
| 783 | } | 793 | } |
| 784 | 794 | ||
diff --git a/drivers/acpi/acpica/dsobject.c b/drivers/acpi/acpica/dsobject.c index 82448551781b..b21fe084ffc8 100644 --- a/drivers/acpi/acpica/dsobject.c +++ b/drivers/acpi/acpica/dsobject.c | |||
| @@ -112,7 +112,9 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state, | |||
| 112 | acpi_namespace_node, | 112 | acpi_namespace_node, |
| 113 | &(op->common.node))); | 113 | &(op->common.node))); |
| 114 | if (ACPI_FAILURE(status)) { | 114 | if (ACPI_FAILURE(status)) { |
| 115 | ACPI_ERROR_NAMESPACE(op->common.value. | 115 | ACPI_ERROR_NAMESPACE(walk_state-> |
| 116 | scope_info, | ||
| 117 | op->common.value. | ||
| 116 | string, status); | 118 | string, status); |
| 117 | return_ACPI_STATUS(status); | 119 | return_ACPI_STATUS(status); |
| 118 | } | 120 | } |
diff --git a/drivers/acpi/acpica/dspkginit.c b/drivers/acpi/acpica/dspkginit.c index 6d487edfe2de..5a602b75084e 100644 --- a/drivers/acpi/acpica/dspkginit.c +++ b/drivers/acpi/acpica/dspkginit.c | |||
| @@ -297,8 +297,10 @@ acpi_ds_init_package_element(u8 object_type, | |||
| 297 | { | 297 | { |
| 298 | union acpi_operand_object **element_ptr; | 298 | union acpi_operand_object **element_ptr; |
| 299 | 299 | ||
| 300 | ACPI_FUNCTION_TRACE(ds_init_package_element); | ||
| 301 | |||
| 300 | if (!source_object) { | 302 | if (!source_object) { |
| 301 | return (AE_OK); | 303 | return_ACPI_STATUS(AE_OK); |
| 302 | } | 304 | } |
| 303 | 305 | ||
| 304 | /* | 306 | /* |
| @@ -329,7 +331,7 @@ acpi_ds_init_package_element(u8 object_type, | |||
| 329 | source_object->package.flags |= AOPOBJ_DATA_VALID; | 331 | source_object->package.flags |= AOPOBJ_DATA_VALID; |
| 330 | } | 332 | } |
| 331 | 333 | ||
| 332 | return (AE_OK); | 334 | return_ACPI_STATUS(AE_OK); |
| 333 | } | 335 | } |
| 334 | 336 | ||
| 335 | /******************************************************************************* | 337 | /******************************************************************************* |
| @@ -352,6 +354,7 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr) | |||
| 352 | union acpi_generic_state scope_info; | 354 | union acpi_generic_state scope_info; |
| 353 | union acpi_operand_object *element = *element_ptr; | 355 | union acpi_operand_object *element = *element_ptr; |
| 354 | struct acpi_namespace_node *resolved_node; | 356 | struct acpi_namespace_node *resolved_node; |
| 357 | struct acpi_namespace_node *original_node; | ||
| 355 | char *external_path = NULL; | 358 | char *external_path = NULL; |
| 356 | acpi_object_type type; | 359 | acpi_object_type type; |
| 357 | 360 | ||
| @@ -441,6 +444,7 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr) | |||
| 441 | * will remain as named references. This behavior is not described | 444 | * will remain as named references. This behavior is not described |
| 442 | * in the ACPI spec, but it appears to be an oversight. | 445 | * in the ACPI spec, but it appears to be an oversight. |
| 443 | */ | 446 | */ |
| 447 | original_node = resolved_node; | ||
| 444 | status = acpi_ex_resolve_node_to_value(&resolved_node, NULL); | 448 | status = acpi_ex_resolve_node_to_value(&resolved_node, NULL); |
| 445 | if (ACPI_FAILURE(status)) { | 449 | if (ACPI_FAILURE(status)) { |
| 446 | return_VOID; | 450 | return_VOID; |
| @@ -468,26 +472,27 @@ acpi_ds_resolve_package_element(union acpi_operand_object **element_ptr) | |||
| 468 | */ | 472 | */ |
| 469 | case ACPI_TYPE_DEVICE: | 473 | case ACPI_TYPE_DEVICE: |
| 470 | case ACPI_TYPE_THERMAL: | 474 | case ACPI_TYPE_THERMAL: |
| 471 | 475 | case ACPI_TYPE_METHOD: | |
| 472 | /* TBD: This may not be necesssary */ | ||
| 473 | |||
| 474 | acpi_ut_add_reference(resolved_node->object); | ||
| 475 | break; | 476 | break; |
| 476 | 477 | ||
| 477 | case ACPI_TYPE_MUTEX: | 478 | case ACPI_TYPE_MUTEX: |
| 478 | case ACPI_TYPE_METHOD: | ||
| 479 | case ACPI_TYPE_POWER: | 479 | case ACPI_TYPE_POWER: |
| 480 | case ACPI_TYPE_PROCESSOR: | 480 | case ACPI_TYPE_PROCESSOR: |
| 481 | case ACPI_TYPE_EVENT: | 481 | case ACPI_TYPE_EVENT: |
| 482 | case ACPI_TYPE_REGION: | 482 | case ACPI_TYPE_REGION: |
| 483 | 483 | ||
| 484 | /* acpi_ex_resolve_node_to_value gave these an extra reference */ | ||
| 485 | |||
| 486 | acpi_ut_remove_reference(original_node->object); | ||
| 484 | break; | 487 | break; |
| 485 | 488 | ||
| 486 | default: | 489 | default: |
| 487 | /* | 490 | /* |
| 488 | * For all other types - the node was resolved to an actual | 491 | * For all other types - the node was resolved to an actual |
| 489 | * operand object with a value, return the object | 492 | * operand object with a value, return the object. Remove |
| 493 | * a reference on the existing object. | ||
| 490 | */ | 494 | */ |
| 495 | acpi_ut_remove_reference(element); | ||
| 491 | *element_ptr = (union acpi_operand_object *)resolved_node; | 496 | *element_ptr = (union acpi_operand_object *)resolved_node; |
| 492 | break; | 497 | break; |
| 493 | } | 498 | } |
diff --git a/drivers/acpi/acpica/dsutils.c b/drivers/acpi/acpica/dsutils.c index 0dabd9b95684..4c5faf629a83 100644 --- a/drivers/acpi/acpica/dsutils.c +++ b/drivers/acpi/acpica/dsutils.c | |||
| @@ -583,7 +583,8 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state, | |||
| 583 | } | 583 | } |
| 584 | 584 | ||
| 585 | if (ACPI_FAILURE(status)) { | 585 | if (ACPI_FAILURE(status)) { |
| 586 | ACPI_ERROR_NAMESPACE(name_string, status); | 586 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 587 | name_string, status); | ||
| 587 | } | 588 | } |
| 588 | } | 589 | } |
| 589 | 590 | ||
diff --git a/drivers/acpi/acpica/dswload.c b/drivers/acpi/acpica/dswload.c index eaa859a89702..5771e4e4a99a 100644 --- a/drivers/acpi/acpica/dswload.c +++ b/drivers/acpi/acpica/dswload.c | |||
| @@ -207,7 +207,8 @@ acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state, | |||
| 207 | } | 207 | } |
| 208 | #endif | 208 | #endif |
| 209 | if (ACPI_FAILURE(status)) { | 209 | if (ACPI_FAILURE(status)) { |
| 210 | ACPI_ERROR_NAMESPACE(path, status); | 210 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, path, |
| 211 | status); | ||
| 211 | return_ACPI_STATUS(status); | 212 | return_ACPI_STATUS(status); |
| 212 | } | 213 | } |
| 213 | 214 | ||
| @@ -375,7 +376,8 @@ acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state, | |||
| 375 | } | 376 | } |
| 376 | 377 | ||
| 377 | if (ACPI_FAILURE(status)) { | 378 | if (ACPI_FAILURE(status)) { |
| 378 | ACPI_ERROR_NAMESPACE(path, status); | 379 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 380 | path, status); | ||
| 379 | return_ACPI_STATUS(status); | 381 | return_ACPI_STATUS(status); |
| 380 | } | 382 | } |
| 381 | } | 383 | } |
diff --git a/drivers/acpi/acpica/dswload2.c b/drivers/acpi/acpica/dswload2.c index aad83ef5a4ec..b3d0aaec8203 100644 --- a/drivers/acpi/acpica/dswload2.c +++ b/drivers/acpi/acpica/dswload2.c | |||
| @@ -184,11 +184,14 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, | |||
| 184 | if (status == AE_NOT_FOUND) { | 184 | if (status == AE_NOT_FOUND) { |
| 185 | status = AE_OK; | 185 | status = AE_OK; |
| 186 | } else { | 186 | } else { |
| 187 | ACPI_ERROR_NAMESPACE(buffer_ptr, | 187 | ACPI_ERROR_NAMESPACE(walk_state-> |
| 188 | scope_info, | ||
| 189 | buffer_ptr, | ||
| 188 | status); | 190 | status); |
| 189 | } | 191 | } |
| 190 | #else | 192 | #else |
| 191 | ACPI_ERROR_NAMESPACE(buffer_ptr, status); | 193 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 194 | buffer_ptr, status); | ||
| 192 | #endif | 195 | #endif |
| 193 | return_ACPI_STATUS(status); | 196 | return_ACPI_STATUS(status); |
| 194 | } | 197 | } |
| @@ -343,7 +346,8 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, | |||
| 343 | } | 346 | } |
| 344 | 347 | ||
| 345 | if (ACPI_FAILURE(status)) { | 348 | if (ACPI_FAILURE(status)) { |
| 346 | ACPI_ERROR_NAMESPACE(buffer_ptr, status); | 349 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 350 | buffer_ptr, status); | ||
| 347 | return_ACPI_STATUS(status); | 351 | return_ACPI_STATUS(status); |
| 348 | } | 352 | } |
| 349 | 353 | ||
| @@ -719,7 +723,8 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state) | |||
| 719 | */ | 723 | */ |
| 720 | op->common.node = new_node; | 724 | op->common.node = new_node; |
| 721 | } else { | 725 | } else { |
| 722 | ACPI_ERROR_NAMESPACE(arg->common.value.string, status); | 726 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, |
| 727 | arg->common.value.string, status); | ||
| 723 | } | 728 | } |
| 724 | break; | 729 | break; |
| 725 | 730 | ||
diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index 28b447ff92df..bb58419f0d61 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c | |||
| @@ -298,6 +298,16 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, | |||
| 298 | ACPI_EXCEPTION((AE_INFO, status, "Returned by Handler for [%s]", | 298 | ACPI_EXCEPTION((AE_INFO, status, "Returned by Handler for [%s]", |
| 299 | acpi_ut_get_region_name(region_obj->region. | 299 | acpi_ut_get_region_name(region_obj->region. |
| 300 | space_id))); | 300 | space_id))); |
| 301 | |||
| 302 | /* | ||
| 303 | * Special case for an EC timeout. These are seen so frequently | ||
| 304 | * that an additional error message is helpful | ||
| 305 | */ | ||
| 306 | if ((region_obj->region.space_id == ACPI_ADR_SPACE_EC) && | ||
| 307 | (status == AE_TIME)) { | ||
| 308 | ACPI_ERROR((AE_INFO, | ||
| 309 | "Timeout from EC hardware or EC device driver")); | ||
| 310 | } | ||
| 301 | } | 311 | } |
| 302 | 312 | ||
| 303 | if (!(handler_desc->address_space.handler_flags & | 313 | if (!(handler_desc->address_space.handler_flags & |
diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c index 83398dc4b7c2..b2ff61bdb9a8 100644 --- a/drivers/acpi/acpica/exdump.c +++ b/drivers/acpi/acpica/exdump.c | |||
| @@ -617,10 +617,11 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth) | |||
| 617 | u32 length; | 617 | u32 length; |
| 618 | u32 index; | 618 | u32 index; |
| 619 | 619 | ||
| 620 | ACPI_FUNCTION_NAME(ex_dump_operand) | 620 | ACPI_FUNCTION_NAME(ex_dump_operand); |
| 621 | 621 | ||
| 622 | /* Check if debug output enabled */ | 622 | /* Check if debug output enabled */ |
| 623 | if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_EXEC, _COMPONENT)) { | 623 | |
| 624 | if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_EXEC, _COMPONENT)) { | ||
| 624 | return; | 625 | return; |
| 625 | } | 626 | } |
| 626 | 627 | ||
| @@ -904,7 +905,7 @@ void | |||
| 904 | acpi_ex_dump_operands(union acpi_operand_object **operands, | 905 | acpi_ex_dump_operands(union acpi_operand_object **operands, |
| 905 | const char *opcode_name, u32 num_operands) | 906 | const char *opcode_name, u32 num_operands) |
| 906 | { | 907 | { |
| 907 | ACPI_FUNCTION_NAME(ex_dump_operands); | 908 | ACPI_FUNCTION_TRACE(ex_dump_operands); |
| 908 | 909 | ||
| 909 | if (!opcode_name) { | 910 | if (!opcode_name) { |
| 910 | opcode_name = "UNKNOWN"; | 911 | opcode_name = "UNKNOWN"; |
| @@ -928,7 +929,7 @@ acpi_ex_dump_operands(union acpi_operand_object **operands, | |||
| 928 | 929 | ||
| 929 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | 930 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 930 | "**** End operand dump for [%s]\n", opcode_name)); | 931 | "**** End operand dump for [%s]\n", opcode_name)); |
| 931 | return; | 932 | return_VOID; |
| 932 | } | 933 | } |
| 933 | 934 | ||
| 934 | /******************************************************************************* | 935 | /******************************************************************************* |
diff --git a/drivers/acpi/acpica/hwtimer.c b/drivers/acpi/acpica/hwtimer.c index a2f4e25d45b1..5b4282902a83 100644 --- a/drivers/acpi/acpica/hwtimer.c +++ b/drivers/acpi/acpica/hwtimer.c | |||
| @@ -150,10 +150,10 @@ ACPI_EXPORT_SYMBOL(acpi_get_timer) | |||
| 150 | * | 150 | * |
| 151 | ******************************************************************************/ | 151 | ******************************************************************************/ |
| 152 | acpi_status | 152 | acpi_status |
| 153 | acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed) | 153 | acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 *time_elapsed) |
| 154 | { | 154 | { |
| 155 | acpi_status status; | 155 | acpi_status status; |
| 156 | u32 delta_ticks; | 156 | u64 delta_ticks; |
| 157 | u64 quotient; | 157 | u64 quotient; |
| 158 | 158 | ||
| 159 | ACPI_FUNCTION_TRACE(acpi_get_timer_duration); | 159 | ACPI_FUNCTION_TRACE(acpi_get_timer_duration); |
| @@ -168,30 +168,29 @@ acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed) | |||
| 168 | return_ACPI_STATUS(AE_SUPPORT); | 168 | return_ACPI_STATUS(AE_SUPPORT); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | if (start_ticks == end_ticks) { | ||
| 172 | *time_elapsed = 0; | ||
| 173 | return_ACPI_STATUS(AE_OK); | ||
| 174 | } | ||
| 175 | |||
| 171 | /* | 176 | /* |
| 172 | * Compute Tick Delta: | 177 | * Compute Tick Delta: |
| 173 | * Handle (max one) timer rollovers on 24-bit versus 32-bit timers. | 178 | * Handle (max one) timer rollovers on 24-bit versus 32-bit timers. |
| 174 | */ | 179 | */ |
| 175 | if (start_ticks < end_ticks) { | 180 | delta_ticks = end_ticks; |
| 176 | delta_ticks = end_ticks - start_ticks; | 181 | if (start_ticks > end_ticks) { |
| 177 | } else if (start_ticks > end_ticks) { | ||
| 178 | if ((acpi_gbl_FADT.flags & ACPI_FADT_32BIT_TIMER) == 0) { | 182 | if ((acpi_gbl_FADT.flags & ACPI_FADT_32BIT_TIMER) == 0) { |
| 179 | 183 | ||
| 180 | /* 24-bit Timer */ | 184 | /* 24-bit Timer */ |
| 181 | 185 | ||
| 182 | delta_ticks = | 186 | delta_ticks |= (u64)1 << 24; |
| 183 | (((0x00FFFFFF - start_ticks) + | ||
| 184 | end_ticks) & 0x00FFFFFF); | ||
| 185 | } else { | 187 | } else { |
| 186 | /* 32-bit Timer */ | 188 | /* 32-bit Timer */ |
| 187 | 189 | ||
| 188 | delta_ticks = (0xFFFFFFFF - start_ticks) + end_ticks; | 190 | delta_ticks |= (u64)1 << 32; |
| 189 | } | 191 | } |
| 190 | } else { /* start_ticks == end_ticks */ | ||
| 191 | |||
| 192 | *time_elapsed = 0; | ||
| 193 | return_ACPI_STATUS(AE_OK); | ||
| 194 | } | 192 | } |
| 193 | delta_ticks -= start_ticks; | ||
| 195 | 194 | ||
| 196 | /* | 195 | /* |
| 197 | * Compute Duration (Requires a 64-bit multiply and divide): | 196 | * Compute Duration (Requires a 64-bit multiply and divide): |
| @@ -199,10 +198,10 @@ acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed) | |||
| 199 | * time_elapsed (microseconds) = | 198 | * time_elapsed (microseconds) = |
| 200 | * (delta_ticks * ACPI_USEC_PER_SEC) / ACPI_PM_TIMER_FREQUENCY; | 199 | * (delta_ticks * ACPI_USEC_PER_SEC) / ACPI_PM_TIMER_FREQUENCY; |
| 201 | */ | 200 | */ |
| 202 | status = acpi_ut_short_divide(((u64)delta_ticks) * ACPI_USEC_PER_SEC, | 201 | status = acpi_ut_short_divide(delta_ticks * ACPI_USEC_PER_SEC, |
| 203 | ACPI_PM_TIMER_FREQUENCY, "ient, NULL); | 202 | ACPI_PM_TIMER_FREQUENCY, "ient, NULL); |
| 204 | 203 | ||
| 205 | *time_elapsed = (u32) quotient; | 204 | *time_elapsed = (u32)quotient; |
| 206 | return_ACPI_STATUS(status); | 205 | return_ACPI_STATUS(status); |
| 207 | } | 206 | } |
| 208 | 207 | ||
diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c index 3094cec4eab4..d1679035d5f3 100644 --- a/drivers/acpi/acpica/hwvalid.c +++ b/drivers/acpi/acpica/hwvalid.c | |||
| @@ -128,14 +128,14 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
| 128 | acpi_io_address last_address; | 128 | acpi_io_address last_address; |
| 129 | const struct acpi_port_info *port_info; | 129 | const struct acpi_port_info *port_info; |
| 130 | 130 | ||
| 131 | ACPI_FUNCTION_NAME(hw_validate_io_request); | 131 | ACPI_FUNCTION_TRACE(hw_validate_io_request); |
| 132 | 132 | ||
| 133 | /* Supported widths are 8/16/32 */ | 133 | /* Supported widths are 8/16/32 */ |
| 134 | 134 | ||
| 135 | if ((bit_width != 8) && (bit_width != 16) && (bit_width != 32)) { | 135 | if ((bit_width != 8) && (bit_width != 16) && (bit_width != 32)) { |
| 136 | ACPI_ERROR((AE_INFO, | 136 | ACPI_ERROR((AE_INFO, |
| 137 | "Bad BitWidth parameter: %8.8X", bit_width)); | 137 | "Bad BitWidth parameter: %8.8X", bit_width)); |
| 138 | return (AE_BAD_PARAMETER); | 138 | return_ACPI_STATUS(AE_BAD_PARAMETER); |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | port_info = acpi_protected_ports; | 141 | port_info = acpi_protected_ports; |
| @@ -153,13 +153,13 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
| 153 | ACPI_ERROR((AE_INFO, | 153 | ACPI_ERROR((AE_INFO, |
| 154 | "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X", | 154 | "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X", |
| 155 | ACPI_FORMAT_UINT64(address), byte_width)); | 155 | ACPI_FORMAT_UINT64(address), byte_width)); |
| 156 | return (AE_LIMIT); | 156 | return_ACPI_STATUS(AE_LIMIT); |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | /* Exit if requested address is not within the protected port table */ | 159 | /* Exit if requested address is not within the protected port table */ |
| 160 | 160 | ||
| 161 | if (address > acpi_protected_ports[ACPI_PORT_INFO_ENTRIES - 1].end) { | 161 | if (address > acpi_protected_ports[ACPI_PORT_INFO_ENTRIES - 1].end) { |
| 162 | return (AE_OK); | 162 | return_ACPI_STATUS(AE_OK); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | /* Check request against the list of protected I/O ports */ | 165 | /* Check request against the list of protected I/O ports */ |
| @@ -180,8 +180,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
| 180 | /* Port illegality may depend on the _OSI calls made by the BIOS */ | 180 | /* Port illegality may depend on the _OSI calls made by the BIOS */ |
| 181 | 181 | ||
| 182 | if (acpi_gbl_osi_data >= port_info->osi_dependency) { | 182 | if (acpi_gbl_osi_data >= port_info->osi_dependency) { |
| 183 | ACPI_DEBUG_PRINT((ACPI_DB_IO, | 183 | ACPI_DEBUG_PRINT((ACPI_DB_VALUES, |
| 184 | "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)", | 184 | "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)\n", |
| 185 | ACPI_FORMAT_UINT64(address), | 185 | ACPI_FORMAT_UINT64(address), |
| 186 | byte_width, port_info->name, | 186 | byte_width, port_info->name, |
| 187 | port_info->start, | 187 | port_info->start, |
| @@ -198,7 +198,7 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) | |||
| 198 | } | 198 | } |
| 199 | } | 199 | } |
| 200 | 200 | ||
| 201 | return (AE_OK); | 201 | return_ACPI_STATUS(AE_OK); |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | /****************************************************************************** | 204 | /****************************************************************************** |
diff --git a/drivers/acpi/acpica/nsaccess.c b/drivers/acpi/acpica/nsaccess.c index f2733f51ca8d..33e652a12fca 100644 --- a/drivers/acpi/acpica/nsaccess.c +++ b/drivers/acpi/acpica/nsaccess.c | |||
| @@ -644,17 +644,18 @@ acpi_ns_lookup(union acpi_generic_state *scope_info, | |||
| 644 | this_node->object; | 644 | this_node->object; |
| 645 | } | 645 | } |
| 646 | } | 646 | } |
| 647 | #ifdef ACPI_ASL_COMPILER | ||
| 648 | if (!acpi_gbl_disasm_flag && | ||
| 649 | (this_node->flags & ANOBJ_IS_EXTERNAL)) { | ||
| 650 | this_node->flags |= IMPLICIT_EXTERNAL; | ||
| 651 | } | ||
| 652 | #endif | ||
| 653 | } | 647 | } |
| 654 | 648 | ||
| 655 | /* Special handling for the last segment (num_segments == 0) */ | 649 | /* Special handling for the last segment (num_segments == 0) */ |
| 656 | 650 | ||
| 657 | else { | 651 | else { |
| 652 | #ifdef ACPI_ASL_COMPILER | ||
| 653 | if (!acpi_gbl_disasm_flag | ||
| 654 | && (this_node->flags & ANOBJ_IS_EXTERNAL)) { | ||
| 655 | this_node->flags &= ~IMPLICIT_EXTERNAL; | ||
| 656 | } | ||
| 657 | #endif | ||
| 658 | |||
| 658 | /* | 659 | /* |
| 659 | * Sanity typecheck of the target object: | 660 | * Sanity typecheck of the target object: |
| 660 | * | 661 | * |
diff --git a/drivers/acpi/acpica/nsconvert.c b/drivers/acpi/acpica/nsconvert.c index 539d775bbc92..d55dcc82f434 100644 --- a/drivers/acpi/acpica/nsconvert.c +++ b/drivers/acpi/acpica/nsconvert.c | |||
| @@ -495,7 +495,8 @@ acpi_ns_convert_to_reference(struct acpi_namespace_node *scope, | |||
| 495 | 495 | ||
| 496 | /* Check if we are resolving a named reference within a package */ | 496 | /* Check if we are resolving a named reference within a package */ |
| 497 | 497 | ||
| 498 | ACPI_ERROR_NAMESPACE(original_object->string.pointer, status); | 498 | ACPI_ERROR_NAMESPACE(&scope_info, |
| 499 | original_object->string.pointer, status); | ||
| 499 | goto error_exit; | 500 | goto error_exit; |
| 500 | } | 501 | } |
| 501 | 502 | ||
diff --git a/drivers/acpi/acpica/nsnames.c b/drivers/acpi/acpica/nsnames.c index a410760a0308..22c92d1a24d8 100644 --- a/drivers/acpi/acpica/nsnames.c +++ b/drivers/acpi/acpica/nsnames.c | |||
| @@ -49,6 +49,9 @@ | |||
| 49 | #define _COMPONENT ACPI_NAMESPACE | 49 | #define _COMPONENT ACPI_NAMESPACE |
| 50 | ACPI_MODULE_NAME("nsnames") | 50 | ACPI_MODULE_NAME("nsnames") |
| 51 | 51 | ||
| 52 | /* Local Prototypes */ | ||
| 53 | static void acpi_ns_normalize_pathname(char *original_path); | ||
| 54 | |||
| 52 | /******************************************************************************* | 55 | /******************************************************************************* |
| 53 | * | 56 | * |
| 54 | * FUNCTION: acpi_ns_get_external_pathname | 57 | * FUNCTION: acpi_ns_get_external_pathname |
| @@ -63,6 +66,7 @@ ACPI_MODULE_NAME("nsnames") | |||
| 63 | * for error and debug statements. | 66 | * for error and debug statements. |
| 64 | * | 67 | * |
| 65 | ******************************************************************************/ | 68 | ******************************************************************************/ |
| 69 | |||
| 66 | char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) | 70 | char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) |
| 67 | { | 71 | { |
| 68 | char *name_buffer; | 72 | char *name_buffer; |
| @@ -352,3 +356,148 @@ char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, | |||
| 352 | 356 | ||
| 353 | return_PTR(name_buffer); | 357 | return_PTR(name_buffer); |
| 354 | } | 358 | } |
| 359 | |||
| 360 | /******************************************************************************* | ||
| 361 | * | ||
| 362 | * FUNCTION: acpi_ns_build_prefixed_pathname | ||
| 363 | * | ||
| 364 | * PARAMETERS: prefix_scope - Scope/Path that prefixes the internal path | ||
| 365 | * internal_path - Name or path of the namespace node | ||
| 366 | * | ||
| 367 | * RETURN: None | ||
| 368 | * | ||
| 369 | * DESCRIPTION: Construct a fully qualified pathname from a concatenation of: | ||
| 370 | * 1) Path associated with the prefix_scope namespace node | ||
| 371 | * 2) External path representation of the Internal path | ||
| 372 | * | ||
| 373 | ******************************************************************************/ | ||
| 374 | |||
| 375 | char *acpi_ns_build_prefixed_pathname(union acpi_generic_state *prefix_scope, | ||
| 376 | const char *internal_path) | ||
| 377 | { | ||
| 378 | acpi_status status; | ||
| 379 | char *full_path = NULL; | ||
| 380 | char *external_path = NULL; | ||
| 381 | char *prefix_path = NULL; | ||
| 382 | u32 prefix_path_length = 0; | ||
| 383 | |||
| 384 | /* If there is a prefix, get the pathname to it */ | ||
| 385 | |||
| 386 | if (prefix_scope && prefix_scope->scope.node) { | ||
| 387 | prefix_path = | ||
| 388 | acpi_ns_get_normalized_pathname(prefix_scope->scope.node, | ||
| 389 | TRUE); | ||
| 390 | if (prefix_path) { | ||
| 391 | prefix_path_length = strlen(prefix_path); | ||
| 392 | } | ||
| 393 | } | ||
| 394 | |||
| 395 | status = acpi_ns_externalize_name(ACPI_UINT32_MAX, internal_path, | ||
| 396 | NULL, &external_path); | ||
| 397 | if (ACPI_FAILURE(status)) { | ||
| 398 | goto cleanup; | ||
| 399 | } | ||
| 400 | |||
| 401 | /* Merge the prefix path and the path. 2 is for one dot and trailing null */ | ||
| 402 | |||
| 403 | full_path = | ||
| 404 | ACPI_ALLOCATE_ZEROED(prefix_path_length + strlen(external_path) + | ||
| 405 | 2); | ||
| 406 | if (!full_path) { | ||
| 407 | goto cleanup; | ||
| 408 | } | ||
| 409 | |||
| 410 | /* Don't merge if the External path is already fully qualified */ | ||
| 411 | |||
| 412 | if (prefix_path && (*external_path != '\\') && (*external_path != '^')) { | ||
| 413 | strcat(full_path, prefix_path); | ||
| 414 | if (prefix_path[1]) { | ||
| 415 | strcat(full_path, "."); | ||
| 416 | } | ||
| 417 | } | ||
| 418 | |||
| 419 | acpi_ns_normalize_pathname(external_path); | ||
| 420 | strcat(full_path, external_path); | ||
| 421 | |||
| 422 | cleanup: | ||
| 423 | if (prefix_path) { | ||
| 424 | ACPI_FREE(prefix_path); | ||
| 425 | } | ||
| 426 | if (external_path) { | ||
| 427 | ACPI_FREE(external_path); | ||
| 428 | } | ||
| 429 | |||
| 430 | return (full_path); | ||
| 431 | } | ||
| 432 | |||
| 433 | /******************************************************************************* | ||
| 434 | * | ||
| 435 | * FUNCTION: acpi_ns_normalize_pathname | ||
| 436 | * | ||
| 437 | * PARAMETERS: original_path - Path to be normalized, in External format | ||
| 438 | * | ||
| 439 | * RETURN: The original path is processed in-place | ||
| 440 | * | ||
| 441 | * DESCRIPTION: Remove trailing underscores from each element of a path. | ||
| 442 | * | ||
| 443 | * For example: \A___.B___.C___ becomes \A.B.C | ||
| 444 | * | ||
| 445 | ******************************************************************************/ | ||
| 446 | |||
| 447 | static void acpi_ns_normalize_pathname(char *original_path) | ||
| 448 | { | ||
| 449 | char *input_path = original_path; | ||
| 450 | char *new_path_buffer; | ||
| 451 | char *new_path; | ||
| 452 | u32 i; | ||
| 453 | |||
| 454 | /* Allocate a temp buffer in which to construct the new path */ | ||
| 455 | |||
| 456 | new_path_buffer = ACPI_ALLOCATE_ZEROED(strlen(input_path) + 1); | ||
| 457 | new_path = new_path_buffer; | ||
| 458 | if (!new_path_buffer) { | ||
| 459 | return; | ||
| 460 | } | ||
| 461 | |||
| 462 | /* Special characters may appear at the beginning of the path */ | ||
| 463 | |||
| 464 | if (*input_path == '\\') { | ||
| 465 | *new_path = *input_path; | ||
| 466 | new_path++; | ||
| 467 | input_path++; | ||
| 468 | } | ||
| 469 | |||
| 470 | while (*input_path == '^') { | ||
| 471 | *new_path = *input_path; | ||
| 472 | new_path++; | ||
| 473 | input_path++; | ||
| 474 | } | ||
| 475 | |||
| 476 | /* Remainder of the path */ | ||
| 477 | |||
| 478 | while (*input_path) { | ||
| 479 | |||
| 480 | /* Do one nameseg at a time */ | ||
| 481 | |||
| 482 | for (i = 0; (i < ACPI_NAME_SIZE) && *input_path; i++) { | ||
| 483 | if ((i == 0) || (*input_path != '_')) { /* First char is allowed to be underscore */ | ||
| 484 | *new_path = *input_path; | ||
| 485 | new_path++; | ||
| 486 | } | ||
| 487 | |||
| 488 | input_path++; | ||
| 489 | } | ||
| 490 | |||
| 491 | /* Dot means that there are more namesegs to come */ | ||
| 492 | |||
| 493 | if (*input_path == '.') { | ||
| 494 | *new_path = *input_path; | ||
| 495 | new_path++; | ||
| 496 | input_path++; | ||
| 497 | } | ||
| 498 | } | ||
| 499 | |||
| 500 | *new_path = 0; | ||
| 501 | strcpy(original_path, new_path_buffer); | ||
| 502 | ACPI_FREE(new_path_buffer); | ||
| 503 | } | ||
diff --git a/drivers/acpi/acpica/nssearch.c b/drivers/acpi/acpica/nssearch.c index 5de8957f5ef0..e91dbee9235f 100644 --- a/drivers/acpi/acpica/nssearch.c +++ b/drivers/acpi/acpica/nssearch.c | |||
| @@ -417,6 +417,7 @@ acpi_ns_search_and_enter(u32 target_name, | |||
| 417 | if (flags & ACPI_NS_EXTERNAL || | 417 | if (flags & ACPI_NS_EXTERNAL || |
| 418 | (walk_state && walk_state->opcode == AML_SCOPE_OP)) { | 418 | (walk_state && walk_state->opcode == AML_SCOPE_OP)) { |
| 419 | new_node->flags |= ANOBJ_IS_EXTERNAL; | 419 | new_node->flags |= ANOBJ_IS_EXTERNAL; |
| 420 | new_node->flags |= IMPLICIT_EXTERNAL; | ||
| 420 | } | 421 | } |
| 421 | #endif | 422 | #endif |
| 422 | 423 | ||
diff --git a/drivers/acpi/acpica/nsxfeval.c b/drivers/acpi/acpica/nsxfeval.c index 783f4c838aee..9b51f65823b2 100644 --- a/drivers/acpi/acpica/nsxfeval.c +++ b/drivers/acpi/acpica/nsxfeval.c | |||
| @@ -61,10 +61,10 @@ static void acpi_ns_resolve_references(struct acpi_evaluate_info *info); | |||
| 61 | * | 61 | * |
| 62 | * PARAMETERS: handle - Object handle (optional) | 62 | * PARAMETERS: handle - Object handle (optional) |
| 63 | * pathname - Object pathname (optional) | 63 | * pathname - Object pathname (optional) |
| 64 | * external_params - List of parameters to pass to method, | 64 | * external_params - List of parameters to pass to a method, |
| 65 | * terminated by NULL. May be NULL | 65 | * terminated by NULL. May be NULL |
| 66 | * if no parameters are being passed. | 66 | * if no parameters are being passed. |
| 67 | * return_buffer - Where to put method's return value (if | 67 | * return_buffer - Where to put the object's return value (if |
| 68 | * any). If NULL, no value is returned. | 68 | * any). If NULL, no value is returned. |
| 69 | * return_type - Expected type of return object | 69 | * return_type - Expected type of return object |
| 70 | * | 70 | * |
| @@ -100,13 +100,14 @@ acpi_evaluate_object_typed(acpi_handle handle, | |||
| 100 | free_buffer_on_error = TRUE; | 100 | free_buffer_on_error = TRUE; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | /* Get a handle here, in order to build an error message if needed */ | ||
| 104 | |||
| 105 | target_handle = handle; | ||
| 103 | if (pathname) { | 106 | if (pathname) { |
| 104 | status = acpi_get_handle(handle, pathname, &target_handle); | 107 | status = acpi_get_handle(handle, pathname, &target_handle); |
| 105 | if (ACPI_FAILURE(status)) { | 108 | if (ACPI_FAILURE(status)) { |
| 106 | return_ACPI_STATUS(status); | 109 | return_ACPI_STATUS(status); |
| 107 | } | 110 | } |
| 108 | } else { | ||
| 109 | target_handle = handle; | ||
| 110 | } | 111 | } |
| 111 | 112 | ||
| 112 | full_pathname = acpi_ns_get_external_pathname(target_handle); | 113 | full_pathname = acpi_ns_get_external_pathname(target_handle); |
diff --git a/drivers/acpi/acpica/psargs.c b/drivers/acpi/acpica/psargs.c index eb9dfaca555f..171e2faa7c50 100644 --- a/drivers/acpi/acpica/psargs.c +++ b/drivers/acpi/acpica/psargs.c | |||
| @@ -361,7 +361,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state, | |||
| 361 | /* Final exception check (may have been changed from code above) */ | 361 | /* Final exception check (may have been changed from code above) */ |
| 362 | 362 | ||
| 363 | if (ACPI_FAILURE(status)) { | 363 | if (ACPI_FAILURE(status)) { |
| 364 | ACPI_ERROR_NAMESPACE(path, status); | 364 | ACPI_ERROR_NAMESPACE(walk_state->scope_info, path, status); |
| 365 | 365 | ||
| 366 | if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == | 366 | if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == |
| 367 | ACPI_PARSE_EXECUTE) { | 367 | ACPI_PARSE_EXECUTE) { |
diff --git a/drivers/acpi/acpica/psobject.c b/drivers/acpi/acpica/psobject.c index 0bef6df71bba..c0b179883ff2 100644 --- a/drivers/acpi/acpica/psobject.c +++ b/drivers/acpi/acpica/psobject.c | |||
| @@ -372,16 +372,10 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state, | |||
| 372 | * external declaration opcode. Setting walk_state->Aml to | 372 | * external declaration opcode. Setting walk_state->Aml to |
| 373 | * walk_state->parser_state.Aml + 2 moves increments the | 373 | * walk_state->parser_state.Aml + 2 moves increments the |
| 374 | * walk_state->Aml past the object type and the paramcount of the | 374 | * walk_state->Aml past the object type and the paramcount of the |
| 375 | * external opcode. For the error message, only print the AML | 375 | * external opcode. |
| 376 | * offset. We could attempt to print the name but this may cause | ||
| 377 | * a segmentation fault when printing the namepath because the | ||
| 378 | * AML may be incorrect. | ||
| 379 | */ | 376 | */ |
| 380 | acpi_os_printf | ||
| 381 | ("// Invalid external declaration at AML offset 0x%x.\n", | ||
| 382 | walk_state->aml - | ||
| 383 | walk_state->parser_state.aml_start); | ||
| 384 | walk_state->aml = walk_state->parser_state.aml + 2; | 377 | walk_state->aml = walk_state->parser_state.aml + 2; |
| 378 | walk_state->parser_state.aml = walk_state->aml; | ||
| 385 | return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE); | 379 | return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE); |
| 386 | } | 380 | } |
| 387 | #endif | 381 | #endif |
diff --git a/drivers/acpi/acpica/psutils.c b/drivers/acpi/acpica/psutils.c index 02642760cb93..cd59dfe6a47d 100644 --- a/drivers/acpi/acpica/psutils.c +++ b/drivers/acpi/acpica/psutils.c | |||
| @@ -94,9 +94,11 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode) | |||
| 94 | op->common.descriptor_type = ACPI_DESC_TYPE_PARSER; | 94 | op->common.descriptor_type = ACPI_DESC_TYPE_PARSER; |
| 95 | op->common.aml_opcode = opcode; | 95 | op->common.aml_opcode = opcode; |
| 96 | 96 | ||
| 97 | ACPI_DISASM_ONLY_MEMBERS(strncpy(op->common.aml_op_name, | 97 | ACPI_DISASM_ONLY_MEMBERS(acpi_ut_safe_strncpy(op->common.aml_op_name, |
| 98 | (acpi_ps_get_opcode_info(opcode))-> | 98 | (acpi_ps_get_opcode_info |
| 99 | name, sizeof(op->common.aml_op_name))); | 99 | (opcode))->name, |
| 100 | sizeof(op->common. | ||
| 101 | aml_op_name))); | ||
| 100 | } | 102 | } |
| 101 | 103 | ||
| 102 | /******************************************************************************* | 104 | /******************************************************************************* |
| @@ -158,10 +160,10 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml) | |||
| 158 | if (opcode == AML_SCOPE_OP) { | 160 | if (opcode == AML_SCOPE_OP) { |
| 159 | acpi_gbl_current_scope = op; | 161 | acpi_gbl_current_scope = op; |
| 160 | } | 162 | } |
| 161 | } | ||
| 162 | 163 | ||
| 163 | if (gbl_capture_comments) { | 164 | if (acpi_gbl_capture_comments) { |
| 164 | ASL_CV_TRANSFER_COMMENTS(op); | 165 | ASL_CV_TRANSFER_COMMENTS(op); |
| 166 | } | ||
| 165 | } | 167 | } |
| 166 | 168 | ||
| 167 | return (op); | 169 | return (op); |
diff --git a/drivers/acpi/acpica/utdebug.c b/drivers/acpi/acpica/utdebug.c index 615a885e2ca3..cff7154b7fee 100644 --- a/drivers/acpi/acpica/utdebug.c +++ b/drivers/acpi/acpica/utdebug.c | |||
| @@ -163,6 +163,9 @@ acpi_debug_print(u32 requested_debug_level, | |||
| 163 | { | 163 | { |
| 164 | acpi_thread_id thread_id; | 164 | acpi_thread_id thread_id; |
| 165 | va_list args; | 165 | va_list args; |
| 166 | #ifdef ACPI_APPLICATION | ||
| 167 | int fill_count; | ||
| 168 | #endif | ||
| 166 | 169 | ||
| 167 | /* Check if debug output enabled */ | 170 | /* Check if debug output enabled */ |
| 168 | 171 | ||
| @@ -202,10 +205,21 @@ acpi_debug_print(u32 requested_debug_level, | |||
| 202 | acpi_os_printf("[%u] ", (u32)thread_id); | 205 | acpi_os_printf("[%u] ", (u32)thread_id); |
| 203 | } | 206 | } |
| 204 | 207 | ||
| 205 | acpi_os_printf("[%02ld] ", acpi_gbl_nesting_level); | 208 | fill_count = 48 - acpi_gbl_nesting_level - |
| 206 | #endif | 209 | strlen(acpi_ut_trim_function_name(function_name)); |
| 210 | if (fill_count < 0) { | ||
| 211 | fill_count = 0; | ||
| 212 | } | ||
| 213 | |||
| 214 | acpi_os_printf("[%02ld] %*s", | ||
| 215 | acpi_gbl_nesting_level, acpi_gbl_nesting_level + 1, " "); | ||
| 216 | acpi_os_printf("%s%*s: ", | ||
| 217 | acpi_ut_trim_function_name(function_name), fill_count, | ||
| 218 | " "); | ||
| 207 | 219 | ||
| 220 | #else | ||
| 208 | acpi_os_printf("%-22.22s: ", acpi_ut_trim_function_name(function_name)); | 221 | acpi_os_printf("%-22.22s: ", acpi_ut_trim_function_name(function_name)); |
| 222 | #endif | ||
| 209 | 223 | ||
| 210 | va_start(args, format); | 224 | va_start(args, format); |
| 211 | acpi_os_vprintf(format, args); | 225 | acpi_os_vprintf(format, args); |
diff --git a/drivers/acpi/acpica/utdecode.c b/drivers/acpi/acpica/utdecode.c index 02cd2c2d961a..55debbad487d 100644 --- a/drivers/acpi/acpica/utdecode.c +++ b/drivers/acpi/acpica/utdecode.c | |||
| @@ -395,11 +395,6 @@ const char *acpi_ut_get_reference_name(union acpi_operand_object *object) | |||
| 395 | return (acpi_gbl_ref_class_names[object->reference.class]); | 395 | return (acpi_gbl_ref_class_names[object->reference.class]); |
| 396 | } | 396 | } |
| 397 | 397 | ||
| 398 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
| 399 | /* | ||
| 400 | * Strings and procedures used for debug only | ||
| 401 | */ | ||
| 402 | |||
| 403 | /******************************************************************************* | 398 | /******************************************************************************* |
| 404 | * | 399 | * |
| 405 | * FUNCTION: acpi_ut_get_mutex_name | 400 | * FUNCTION: acpi_ut_get_mutex_name |
| @@ -433,6 +428,12 @@ const char *acpi_ut_get_mutex_name(u32 mutex_id) | |||
| 433 | return (acpi_gbl_mutex_names[mutex_id]); | 428 | return (acpi_gbl_mutex_names[mutex_id]); |
| 434 | } | 429 | } |
| 435 | 430 | ||
| 431 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
| 432 | |||
| 433 | /* | ||
| 434 | * Strings and procedures used for debug only | ||
| 435 | */ | ||
| 436 | |||
| 436 | /******************************************************************************* | 437 | /******************************************************************************* |
| 437 | * | 438 | * |
| 438 | * FUNCTION: acpi_ut_get_notify_name | 439 | * FUNCTION: acpi_ut_get_notify_name |
diff --git a/drivers/acpi/acpica/uterror.c b/drivers/acpi/acpica/uterror.c index e3368186e1c1..42388dcb5ccc 100644 --- a/drivers/acpi/acpica/uterror.c +++ b/drivers/acpi/acpica/uterror.c | |||
| @@ -182,6 +182,78 @@ acpi_ut_predefined_bios_error(const char *module_name, | |||
| 182 | 182 | ||
| 183 | /******************************************************************************* | 183 | /******************************************************************************* |
| 184 | * | 184 | * |
| 185 | * FUNCTION: acpi_ut_prefixed_namespace_error | ||
| 186 | * | ||
| 187 | * PARAMETERS: module_name - Caller's module name (for error output) | ||
| 188 | * line_number - Caller's line number (for error output) | ||
| 189 | * prefix_scope - Scope/Path that prefixes the internal path | ||
| 190 | * internal_path - Name or path of the namespace node | ||
| 191 | * lookup_status - Exception code from NS lookup | ||
| 192 | * | ||
| 193 | * RETURN: None | ||
| 194 | * | ||
| 195 | * DESCRIPTION: Print error message with the full pathname constructed this way: | ||
| 196 | * | ||
| 197 | * prefix_scope_node_full_path.externalized_internal_path | ||
| 198 | * | ||
| 199 | * NOTE: 10/2017: Treat the major ns_lookup errors as firmware errors | ||
| 200 | * | ||
| 201 | ******************************************************************************/ | ||
| 202 | |||
| 203 | void | ||
| 204 | acpi_ut_prefixed_namespace_error(const char *module_name, | ||
| 205 | u32 line_number, | ||
| 206 | union acpi_generic_state *prefix_scope, | ||
| 207 | const char *internal_path, | ||
| 208 | acpi_status lookup_status) | ||
| 209 | { | ||
| 210 | char *full_path; | ||
| 211 | const char *message; | ||
| 212 | |||
| 213 | /* | ||
| 214 | * Main cases: | ||
| 215 | * 1) Object creation, object must not already exist | ||
| 216 | * 2) Object lookup, object must exist | ||
| 217 | */ | ||
| 218 | switch (lookup_status) { | ||
| 219 | case AE_ALREADY_EXISTS: | ||
| 220 | |||
| 221 | acpi_os_printf(ACPI_MSG_BIOS_ERROR); | ||
| 222 | message = "Failure creating"; | ||
| 223 | break; | ||
| 224 | |||
| 225 | case AE_NOT_FOUND: | ||
| 226 | |||
| 227 | acpi_os_printf(ACPI_MSG_BIOS_ERROR); | ||
| 228 | message = "Failure looking up"; | ||
| 229 | break; | ||
| 230 | |||
| 231 | default: | ||
| 232 | |||
| 233 | acpi_os_printf(ACPI_MSG_ERROR); | ||
| 234 | message = "Failure looking up"; | ||
| 235 | break; | ||
| 236 | } | ||
| 237 | |||
| 238 | /* Concatenate the prefix path and the internal path */ | ||
| 239 | |||
| 240 | full_path = | ||
| 241 | acpi_ns_build_prefixed_pathname(prefix_scope, internal_path); | ||
| 242 | |||
| 243 | acpi_os_printf("%s [%s], %s", message, | ||
| 244 | full_path ? full_path : "Could not get pathname", | ||
| 245 | acpi_format_exception(lookup_status)); | ||
| 246 | |||
| 247 | if (full_path) { | ||
| 248 | ACPI_FREE(full_path); | ||
| 249 | } | ||
| 250 | |||
| 251 | ACPI_MSG_SUFFIX; | ||
| 252 | } | ||
| 253 | |||
| 254 | #ifdef __OBSOLETE_FUNCTION | ||
| 255 | /******************************************************************************* | ||
| 256 | * | ||
| 185 | * FUNCTION: acpi_ut_namespace_error | 257 | * FUNCTION: acpi_ut_namespace_error |
| 186 | * | 258 | * |
| 187 | * PARAMETERS: module_name - Caller's module name (for error output) | 259 | * PARAMETERS: module_name - Caller's module name (for error output) |
| @@ -240,6 +312,7 @@ acpi_ut_namespace_error(const char *module_name, | |||
| 240 | ACPI_MSG_SUFFIX; | 312 | ACPI_MSG_SUFFIX; |
| 241 | ACPI_MSG_REDIRECT_END; | 313 | ACPI_MSG_REDIRECT_END; |
| 242 | } | 314 | } |
| 315 | #endif | ||
| 243 | 316 | ||
| 244 | /******************************************************************************* | 317 | /******************************************************************************* |
| 245 | * | 318 | * |
diff --git a/drivers/acpi/acpica/utinit.c b/drivers/acpi/acpica/utinit.c index 23e766d1691d..45eeb0dcf283 100644 --- a/drivers/acpi/acpica/utinit.c +++ b/drivers/acpi/acpica/utinit.c | |||
| @@ -206,7 +206,6 @@ acpi_status acpi_ut_init_globals(void) | |||
| 206 | acpi_gbl_next_owner_id_offset = 0; | 206 | acpi_gbl_next_owner_id_offset = 0; |
| 207 | acpi_gbl_debugger_configuration = DEBUGGER_THREADING; | 207 | acpi_gbl_debugger_configuration = DEBUGGER_THREADING; |
| 208 | acpi_gbl_osi_mutex = NULL; | 208 | acpi_gbl_osi_mutex = NULL; |
| 209 | acpi_gbl_max_loop_iterations = ACPI_MAX_LOOP_COUNT; | ||
| 210 | 209 | ||
| 211 | /* Hardware oriented */ | 210 | /* Hardware oriented */ |
| 212 | 211 | ||
diff --git a/drivers/acpi/acpica/utmath.c b/drivers/acpi/acpica/utmath.c index 5f9c680076c4..2055a858e5f5 100644 --- a/drivers/acpi/acpica/utmath.c +++ b/drivers/acpi/acpica/utmath.c | |||
| @@ -134,7 +134,7 @@ acpi_status acpi_ut_short_shift_left(u64 operand, u32 count, u64 *out_result) | |||
| 134 | 134 | ||
| 135 | if ((count & 63) >= 32) { | 135 | if ((count & 63) >= 32) { |
| 136 | operand_ovl.part.hi = operand_ovl.part.lo; | 136 | operand_ovl.part.hi = operand_ovl.part.lo; |
| 137 | operand_ovl.part.lo ^= operand_ovl.part.lo; | 137 | operand_ovl.part.lo = 0; |
| 138 | count = (count & 63) - 32; | 138 | count = (count & 63) - 32; |
| 139 | } | 139 | } |
| 140 | ACPI_SHIFT_LEFT_64_BY_32(operand_ovl.part.hi, | 140 | ACPI_SHIFT_LEFT_64_BY_32(operand_ovl.part.hi, |
| @@ -171,7 +171,7 @@ acpi_status acpi_ut_short_shift_right(u64 operand, u32 count, u64 *out_result) | |||
| 171 | 171 | ||
| 172 | if ((count & 63) >= 32) { | 172 | if ((count & 63) >= 32) { |
| 173 | operand_ovl.part.lo = operand_ovl.part.hi; | 173 | operand_ovl.part.lo = operand_ovl.part.hi; |
| 174 | operand_ovl.part.hi ^= operand_ovl.part.hi; | 174 | operand_ovl.part.hi = 0; |
| 175 | count = (count & 63) - 32; | 175 | count = (count & 63) - 32; |
| 176 | } | 176 | } |
| 177 | ACPI_SHIFT_RIGHT_64_BY_32(operand_ovl.part.hi, | 177 | ACPI_SHIFT_RIGHT_64_BY_32(operand_ovl.part.hi, |
diff --git a/drivers/acpi/acpica/utmutex.c b/drivers/acpi/acpica/utmutex.c index 586354788018..524ba931d5e8 100644 --- a/drivers/acpi/acpica/utmutex.c +++ b/drivers/acpi/acpica/utmutex.c | |||
| @@ -286,8 +286,9 @@ acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) | |||
| 286 | acpi_gbl_mutex_info[mutex_id].thread_id = this_thread_id; | 286 | acpi_gbl_mutex_info[mutex_id].thread_id = this_thread_id; |
| 287 | } else { | 287 | } else { |
| 288 | ACPI_EXCEPTION((AE_INFO, status, | 288 | ACPI_EXCEPTION((AE_INFO, status, |
| 289 | "Thread %u could not acquire Mutex [0x%X]", | 289 | "Thread %u could not acquire Mutex [%s] (0x%X)", |
| 290 | (u32)this_thread_id, mutex_id)); | 290 | (u32)this_thread_id, |
| 291 | acpi_ut_get_mutex_name(mutex_id), mutex_id)); | ||
| 291 | } | 292 | } |
| 292 | 293 | ||
| 293 | return (status); | 294 | return (status); |
| @@ -322,8 +323,8 @@ acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id) | |||
| 322 | */ | 323 | */ |
| 323 | if (acpi_gbl_mutex_info[mutex_id].thread_id == ACPI_MUTEX_NOT_ACQUIRED) { | 324 | if (acpi_gbl_mutex_info[mutex_id].thread_id == ACPI_MUTEX_NOT_ACQUIRED) { |
| 324 | ACPI_ERROR((AE_INFO, | 325 | ACPI_ERROR((AE_INFO, |
| 325 | "Mutex [0x%X] is not acquired, cannot release", | 326 | "Mutex [%s] (0x%X) is not acquired, cannot release", |
| 326 | mutex_id)); | 327 | acpi_ut_get_mutex_name(mutex_id), mutex_id)); |
| 327 | 328 | ||
| 328 | return (AE_NOT_ACQUIRED); | 329 | return (AE_NOT_ACQUIRED); |
| 329 | } | 330 | } |
diff --git a/drivers/acpi/acpica/utnonansi.c b/drivers/acpi/acpica/utnonansi.c index 792664982ea3..33a0970646df 100644 --- a/drivers/acpi/acpica/utnonansi.c +++ b/drivers/acpi/acpica/utnonansi.c | |||
| @@ -140,7 +140,7 @@ int acpi_ut_stricmp(char *string1, char *string2) | |||
| 140 | return (c1 - c2); | 140 | return (c1 - c2); |
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) | 143 | #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) |
| 144 | /******************************************************************************* | 144 | /******************************************************************************* |
| 145 | * | 145 | * |
| 146 | * FUNCTION: acpi_ut_safe_strcpy, acpi_ut_safe_strcat, acpi_ut_safe_strncat | 146 | * FUNCTION: acpi_ut_safe_strcpy, acpi_ut_safe_strcat, acpi_ut_safe_strncat |
| @@ -199,4 +199,13 @@ acpi_ut_safe_strncat(char *dest, | |||
| 199 | strncat(dest, source, max_transfer_length); | 199 | strncat(dest, source, max_transfer_length); |
| 200 | return (FALSE); | 200 | return (FALSE); |
| 201 | } | 201 | } |
| 202 | |||
| 203 | void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size) | ||
| 204 | { | ||
| 205 | /* Always terminate destination string */ | ||
| 206 | |||
| 207 | strncpy(dest, source, dest_size); | ||
| 208 | dest[dest_size - 1] = 0; | ||
| 209 | } | ||
| 210 | |||
| 202 | #endif | 211 | #endif |
diff --git a/drivers/acpi/acpica/utosi.c b/drivers/acpi/acpica/utosi.c index 3175b133c0e4..f6b8dd24b006 100644 --- a/drivers/acpi/acpica/utosi.c +++ b/drivers/acpi/acpica/utosi.c | |||
| @@ -101,6 +101,8 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = { | |||
| 101 | {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ | 101 | {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ |
| 102 | {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ | 102 | {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ |
| 103 | {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ | 103 | {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ |
| 104 | {"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */ | ||
| 105 | {"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */ | ||
| 104 | 106 | ||
| 105 | /* Feature Group Strings */ | 107 | /* Feature Group Strings */ |
| 106 | 108 | ||
diff --git a/drivers/acpi/acpica/utstrsuppt.c b/drivers/acpi/acpica/utstrsuppt.c index 965fb5cec94f..97f48d71f9e6 100644 --- a/drivers/acpi/acpica/utstrsuppt.c +++ b/drivers/acpi/acpica/utstrsuppt.c | |||
| @@ -52,10 +52,9 @@ static acpi_status | |||
| 52 | acpi_ut_insert_digit(u64 *accumulated_value, u32 base, int ascii_digit); | 52 | acpi_ut_insert_digit(u64 *accumulated_value, u32 base, int ascii_digit); |
| 53 | 53 | ||
| 54 | static acpi_status | 54 | static acpi_status |
| 55 | acpi_ut_strtoul_multiply64(u64 multiplicand, u64 multiplier, u64 *out_product); | 55 | acpi_ut_strtoul_multiply64(u64 multiplicand, u32 base, u64 *out_product); |
| 56 | 56 | ||
| 57 | static acpi_status | 57 | static acpi_status acpi_ut_strtoul_add64(u64 addend1, u32 digit, u64 *out_sum); |
| 58 | acpi_ut_strtoul_add64(u64 addend1, u64 addend2, u64 *out_sum); | ||
| 59 | 58 | ||
| 60 | /******************************************************************************* | 59 | /******************************************************************************* |
| 61 | * | 60 | * |
| @@ -357,7 +356,7 @@ acpi_ut_insert_digit(u64 *accumulated_value, u32 base, int ascii_digit) | |||
| 357 | * FUNCTION: acpi_ut_strtoul_multiply64 | 356 | * FUNCTION: acpi_ut_strtoul_multiply64 |
| 358 | * | 357 | * |
| 359 | * PARAMETERS: multiplicand - Current accumulated converted integer | 358 | * PARAMETERS: multiplicand - Current accumulated converted integer |
| 360 | * multiplier - Base/Radix | 359 | * base - Base/Radix |
| 361 | * out_product - Where the product is returned | 360 | * out_product - Where the product is returned |
| 362 | * | 361 | * |
| 363 | * RETURN: Status and 64-bit product | 362 | * RETURN: Status and 64-bit product |
| @@ -369,33 +368,40 @@ acpi_ut_insert_digit(u64 *accumulated_value, u32 base, int ascii_digit) | |||
| 369 | ******************************************************************************/ | 368 | ******************************************************************************/ |
| 370 | 369 | ||
| 371 | static acpi_status | 370 | static acpi_status |
| 372 | acpi_ut_strtoul_multiply64(u64 multiplicand, u64 multiplier, u64 *out_product) | 371 | acpi_ut_strtoul_multiply64(u64 multiplicand, u32 base, u64 *out_product) |
| 373 | { | 372 | { |
| 374 | u64 val; | 373 | u64 product; |
| 374 | u64 quotient; | ||
| 375 | 375 | ||
| 376 | /* Exit if either operand is zero */ | 376 | /* Exit if either operand is zero */ |
| 377 | 377 | ||
| 378 | *out_product = 0; | 378 | *out_product = 0; |
| 379 | if (!multiplicand || !multiplier) { | 379 | if (!multiplicand || !base) { |
| 380 | return (AE_OK); | 380 | return (AE_OK); |
| 381 | } | 381 | } |
| 382 | 382 | ||
| 383 | /* Check for 64-bit overflow before the actual multiplication */ | 383 | /* |
| 384 | 384 | * Check for 64-bit overflow before the actual multiplication. | |
| 385 | acpi_ut_short_divide(ACPI_UINT64_MAX, (u32)multiplier, &val, NULL); | 385 | * |
| 386 | if (multiplicand > val) { | 386 | * Notes: 64-bit division is often not supported on 32-bit platforms |
| 387 | * (it requires a library function), Therefore ACPICA has a local | ||
| 388 | * 64-bit divide function. Also, Multiplier is currently only used | ||
| 389 | * as the radix (8/10/16), to the 64/32 divide will always work. | ||
| 390 | */ | ||
| 391 | acpi_ut_short_divide(ACPI_UINT64_MAX, base, "ient, NULL); | ||
| 392 | if (multiplicand > quotient) { | ||
| 387 | return (AE_NUMERIC_OVERFLOW); | 393 | return (AE_NUMERIC_OVERFLOW); |
| 388 | } | 394 | } |
| 389 | 395 | ||
| 390 | val = multiplicand * multiplier; | 396 | product = multiplicand * base; |
| 391 | 397 | ||
| 392 | /* Check for 32-bit overflow if necessary */ | 398 | /* Check for 32-bit overflow if necessary */ |
| 393 | 399 | ||
| 394 | if ((acpi_gbl_integer_bit_width == 32) && (val > ACPI_UINT32_MAX)) { | 400 | if ((acpi_gbl_integer_bit_width == 32) && (product > ACPI_UINT32_MAX)) { |
| 395 | return (AE_NUMERIC_OVERFLOW); | 401 | return (AE_NUMERIC_OVERFLOW); |
| 396 | } | 402 | } |
| 397 | 403 | ||
| 398 | *out_product = val; | 404 | *out_product = product; |
| 399 | return (AE_OK); | 405 | return (AE_OK); |
| 400 | } | 406 | } |
| 401 | 407 | ||
| @@ -404,7 +410,7 @@ acpi_ut_strtoul_multiply64(u64 multiplicand, u64 multiplier, u64 *out_product) | |||
| 404 | * FUNCTION: acpi_ut_strtoul_add64 | 410 | * FUNCTION: acpi_ut_strtoul_add64 |
| 405 | * | 411 | * |
| 406 | * PARAMETERS: addend1 - Current accumulated converted integer | 412 | * PARAMETERS: addend1 - Current accumulated converted integer |
| 407 | * addend2 - New hex value/char | 413 | * digit - New hex value/char |
| 408 | * out_sum - Where sum is returned (Accumulator) | 414 | * out_sum - Where sum is returned (Accumulator) |
| 409 | * | 415 | * |
| 410 | * RETURN: Status and 64-bit sum | 416 | * RETURN: Status and 64-bit sum |
| @@ -415,17 +421,17 @@ acpi_ut_strtoul_multiply64(u64 multiplicand, u64 multiplier, u64 *out_product) | |||
| 415 | * | 421 | * |
| 416 | ******************************************************************************/ | 422 | ******************************************************************************/ |
| 417 | 423 | ||
| 418 | static acpi_status acpi_ut_strtoul_add64(u64 addend1, u64 addend2, u64 *out_sum) | 424 | static acpi_status acpi_ut_strtoul_add64(u64 addend1, u32 digit, u64 *out_sum) |
| 419 | { | 425 | { |
| 420 | u64 sum; | 426 | u64 sum; |
| 421 | 427 | ||
| 422 | /* Check for 64-bit overflow before the actual addition */ | 428 | /* Check for 64-bit overflow before the actual addition */ |
| 423 | 429 | ||
| 424 | if ((addend1 > 0) && (addend2 > (ACPI_UINT64_MAX - addend1))) { | 430 | if ((addend1 > 0) && (digit > (ACPI_UINT64_MAX - addend1))) { |
| 425 | return (AE_NUMERIC_OVERFLOW); | 431 | return (AE_NUMERIC_OVERFLOW); |
| 426 | } | 432 | } |
| 427 | 433 | ||
| 428 | sum = addend1 + addend2; | 434 | sum = addend1 + digit; |
| 429 | 435 | ||
| 430 | /* Check for 32-bit overflow if necessary */ | 436 | /* Check for 32-bit overflow if necessary */ |
| 431 | 437 | ||
diff --git a/drivers/acpi/acpica/uttrack.c b/drivers/acpi/acpica/uttrack.c index 3c8de88ecbd5..633b4e2c669f 100644 --- a/drivers/acpi/acpica/uttrack.c +++ b/drivers/acpi/acpica/uttrack.c | |||
| @@ -402,8 +402,8 @@ acpi_ut_track_allocation(struct acpi_debug_mem_block *allocation, | |||
| 402 | allocation->component = component; | 402 | allocation->component = component; |
| 403 | allocation->line = line; | 403 | allocation->line = line; |
| 404 | 404 | ||
| 405 | strncpy(allocation->module, module, ACPI_MAX_MODULE_NAME); | 405 | acpi_ut_safe_strncpy(allocation->module, (char *)module, |
| 406 | allocation->module[ACPI_MAX_MODULE_NAME - 1] = 0; | 406 | ACPI_MAX_MODULE_NAME); |
| 407 | 407 | ||
| 408 | if (!element) { | 408 | if (!element) { |
| 409 | 409 | ||
| @@ -717,7 +717,7 @@ exit: | |||
| 717 | if (!num_outstanding) { | 717 | if (!num_outstanding) { |
| 718 | ACPI_INFO(("No outstanding allocations")); | 718 | ACPI_INFO(("No outstanding allocations")); |
| 719 | } else { | 719 | } else { |
| 720 | ACPI_ERROR((AE_INFO, "%u(0x%X) Outstanding allocations", | 720 | ACPI_ERROR((AE_INFO, "%u (0x%X) Outstanding cache allocations", |
| 721 | num_outstanding, num_outstanding)); | 721 | num_outstanding, num_outstanding)); |
| 722 | } | 722 | } |
| 723 | 723 | ||
diff --git a/drivers/acpi/acpica/utxferror.c b/drivers/acpi/acpica/utxferror.c index 950a1e500bfa..9da4f8ef2e77 100644 --- a/drivers/acpi/acpica/utxferror.c +++ b/drivers/acpi/acpica/utxferror.c | |||
| @@ -96,8 +96,8 @@ ACPI_EXPORT_SYMBOL(acpi_error) | |||
| 96 | * | 96 | * |
| 97 | * RETURN: None | 97 | * RETURN: None |
| 98 | * | 98 | * |
| 99 | * DESCRIPTION: Print "ACPI Exception" message with module/line/version info | 99 | * DESCRIPTION: Print an "ACPI Error" message with module/line/version |
| 100 | * and decoded acpi_status. | 100 | * info as well as decoded acpi_status. |
| 101 | * | 101 | * |
| 102 | ******************************************************************************/ | 102 | ******************************************************************************/ |
| 103 | void ACPI_INTERNAL_VAR_XFACE | 103 | void ACPI_INTERNAL_VAR_XFACE |
| @@ -111,10 +111,10 @@ acpi_exception(const char *module_name, | |||
| 111 | /* For AE_OK, just print the message */ | 111 | /* For AE_OK, just print the message */ |
| 112 | 112 | ||
| 113 | if (ACPI_SUCCESS(status)) { | 113 | if (ACPI_SUCCESS(status)) { |
| 114 | acpi_os_printf(ACPI_MSG_EXCEPTION); | 114 | acpi_os_printf(ACPI_MSG_ERROR); |
| 115 | 115 | ||
| 116 | } else { | 116 | } else { |
| 117 | acpi_os_printf(ACPI_MSG_EXCEPTION "%s, ", | 117 | acpi_os_printf(ACPI_MSG_ERROR "%s, ", |
| 118 | acpi_format_exception(status)); | 118 | acpi_format_exception(status)); |
| 119 | } | 119 | } |
| 120 | 120 | ||
