diff options
Diffstat (limited to 'drivers/acpi/dispatcher/dswexec.c')
-rw-r--r-- | drivers/acpi/dispatcher/dswexec.c | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/drivers/acpi/dispatcher/dswexec.c b/drivers/acpi/dispatcher/dswexec.c index e522763bb692..74f6996db2d7 100644 --- a/drivers/acpi/dispatcher/dswexec.c +++ b/drivers/acpi/dispatcher/dswexec.c | |||
@@ -314,12 +314,13 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state, | |||
314 | 314 | ||
315 | case AML_CLASS_EXECUTE: | 315 | case AML_CLASS_EXECUTE: |
316 | case AML_CLASS_CREATE: | 316 | case AML_CLASS_CREATE: |
317 | |||
318 | /* | 317 | /* |
319 | * Most operators with arguments. | 318 | * Most operators with arguments. |
320 | * Start a new result/operand state | 319 | * Start a new result/operand state |
321 | */ | 320 | */ |
322 | status = acpi_ds_result_stack_push(walk_state); | 321 | if (walk_state->opcode != AML_CREATE_FIELD_OP) { |
322 | status = acpi_ds_result_stack_push(walk_state); | ||
323 | } | ||
323 | break; | 324 | break; |
324 | 325 | ||
325 | default: | 326 | default: |
@@ -723,20 +724,6 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state) | |||
723 | 724 | ||
724 | cleanup: | 725 | cleanup: |
725 | 726 | ||
726 | /* Invoke exception handler on error */ | ||
727 | |||
728 | if (ACPI_FAILURE(status) && | ||
729 | acpi_gbl_exception_handler && !(status & AE_CODE_CONTROL)) { | ||
730 | acpi_ex_exit_interpreter(); | ||
731 | status = acpi_gbl_exception_handler(status, | ||
732 | walk_state->method_node-> | ||
733 | name.integer, | ||
734 | walk_state->opcode, | ||
735 | walk_state->aml_offset, | ||
736 | NULL); | ||
737 | (void)acpi_ex_enter_interpreter(); | ||
738 | } | ||
739 | |||
740 | if (walk_state->result_obj) { | 727 | if (walk_state->result_obj) { |
741 | /* Break to debugger to display result */ | 728 | /* Break to debugger to display result */ |
742 | 729 | ||
@@ -758,18 +745,14 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state) | |||
758 | } | 745 | } |
759 | #endif | 746 | #endif |
760 | 747 | ||
761 | /* Always clear the object stack */ | 748 | /* Invoke exception handler on error */ |
762 | |||
763 | walk_state->num_operands = 0; | ||
764 | |||
765 | #ifdef ACPI_DISASSEMBLER | ||
766 | |||
767 | /* On error, display method locals/args */ | ||
768 | 749 | ||
769 | if (ACPI_FAILURE(status)) { | 750 | if (ACPI_FAILURE(status)) { |
770 | acpi_dm_dump_method_info(status, walk_state, op); | 751 | status = acpi_ds_method_error(status, walk_state); |
771 | } | 752 | } |
772 | #endif | ||
773 | 753 | ||
754 | /* Always clear the object stack */ | ||
755 | |||
756 | walk_state->num_operands = 0; | ||
774 | return_ACPI_STATUS(status); | 757 | return_ACPI_STATUS(status); |
775 | } | 758 | } |