aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dispatcher/dswexec.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/dispatcher/dswexec.c')
-rw-r--r--drivers/acpi/dispatcher/dswexec.c33
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}