ACPICA: acpiexec: enhance local signal handler
ACPICA commit ffef4ae9a1b6032ebadeab2c2b806f0e585f0006 Add support for SIGSEGV Improve/cleanup SIGINT handling Link: https://github.com/acpica/acpica/commit/ffef4ae9 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
9c0b6c49e8
commit
fd13aaa850
@ -181,6 +181,18 @@ acpi_db_execute_method(struct acpi_db_method_info *info,
|
|||||||
acpi_gbl_method_executing = FALSE;
|
acpi_gbl_method_executing = FALSE;
|
||||||
|
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
|
if ((status == AE_ABORT_METHOD) || acpi_gbl_abort_method) {
|
||||||
|
|
||||||
|
/* Clear the abort and fall back to the debugger prompt */
|
||||||
|
|
||||||
|
ACPI_EXCEPTION((AE_INFO, status,
|
||||||
|
"Aborting top-level method"));
|
||||||
|
|
||||||
|
acpi_gbl_abort_method = FALSE;
|
||||||
|
status = AE_OK;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
ACPI_EXCEPTION((AE_INFO, status,
|
ACPI_EXCEPTION((AE_INFO, status,
|
||||||
"while executing %s from debugger",
|
"while executing %s from debugger",
|
||||||
info->pathname));
|
info->pathname));
|
||||||
|
@ -212,6 +212,7 @@ acpi_status
|
|||||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
||||||
{
|
{
|
||||||
u32 aml_offset;
|
u32 aml_offset;
|
||||||
|
acpi_name name = 0;
|
||||||
|
|
||||||
ACPI_FUNCTION_ENTRY();
|
ACPI_FUNCTION_ENTRY();
|
||||||
|
|
||||||
@ -237,10 +238,13 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
|||||||
walk_state->parser_state.
|
walk_state->parser_state.
|
||||||
aml_start);
|
aml_start);
|
||||||
|
|
||||||
status = acpi_gbl_exception_handler(status,
|
if (walk_state->method_node) {
|
||||||
walk_state->method_node ?
|
name = walk_state->method_node->name.integer;
|
||||||
walk_state->method_node->
|
} else if (walk_state->deferred_node) {
|
||||||
name.integer : 0,
|
name = walk_state->deferred_node->name.integer;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = acpi_gbl_exception_handler(status, name,
|
||||||
walk_state->opcode,
|
walk_state->opcode,
|
||||||
aml_offset, NULL);
|
aml_offset, NULL);
|
||||||
acpi_ex_enter_interpreter();
|
acpi_ex_enter_interpreter();
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
#include "acdispat.h"
|
#include "acdispat.h"
|
||||||
#include "amlcode.h"
|
#include "amlcode.h"
|
||||||
#include "acinterp.h"
|
#include "acinterp.h"
|
||||||
|
#include "acnamesp.h"
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PARSER
|
#define _COMPONENT ACPI_PARSER
|
||||||
ACPI_MODULE_NAME("psparse")
|
ACPI_MODULE_NAME("psparse")
|
||||||
@ -538,9 +539,16 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
|
|||||||
/* Either the method parse or actual execution failed */
|
/* Either the method parse or actual execution failed */
|
||||||
|
|
||||||
acpi_ex_exit_interpreter();
|
acpi_ex_exit_interpreter();
|
||||||
ACPI_ERROR_METHOD("Method parse/execution failed",
|
if (status == AE_ABORT_METHOD) {
|
||||||
walk_state->method_node, NULL,
|
acpi_ns_print_node_pathname(walk_state->
|
||||||
status);
|
method_node,
|
||||||
|
"Method aborted:");
|
||||||
|
acpi_os_printf("\n");
|
||||||
|
} else {
|
||||||
|
ACPI_ERROR_METHOD
|
||||||
|
("Method parse/execution failed",
|
||||||
|
walk_state->method_node, NULL, status);
|
||||||
|
}
|
||||||
acpi_ex_enter_interpreter();
|
acpi_ex_enter_interpreter();
|
||||||
|
|
||||||
/* Check for possible multi-thread reentrancy problem */
|
/* Check for possible multi-thread reentrancy problem */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user