diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-24 08:41:41 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-24 13:07:53 -0400 |
| commit | 816724e65c72a90a44fbad0ef0b59b186c85fa90 (patch) | |
| tree | 421fa29aedff988e392f92780637553e275d37a0 /drivers/acpi/parser/psparse.c | |
| parent | 70ac4385a13f78bc478f26d317511893741b05bd (diff) | |
| parent | d384ea691fe4ea8c2dd5b9b8d9042eb181776f18 (diff) | |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Conflicts:
fs/nfs/inode.c
fs/super.c
Fix conflicts between patch 'NFS: Split fs/nfs/inode.c' and patch
'VFS: Permit filesystem to override root dentry on mount'
Diffstat (limited to 'drivers/acpi/parser/psparse.c')
| -rw-r--r-- | drivers/acpi/parser/psparse.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/drivers/acpi/parser/psparse.c b/drivers/acpi/parser/psparse.c index a9f3229f4106..7ee2f2e77525 100644 --- a/drivers/acpi/parser/psparse.c +++ b/drivers/acpi/parser/psparse.c | |||
| @@ -106,6 +106,7 @@ u16 acpi_ps_peek_opcode(struct acpi_parse_state * parser_state) | |||
| 106 | opcode = (u16) ACPI_GET8(aml); | 106 | opcode = (u16) ACPI_GET8(aml); |
| 107 | 107 | ||
| 108 | if (opcode == AML_EXTENDED_OP_PREFIX) { | 108 | if (opcode == AML_EXTENDED_OP_PREFIX) { |
| 109 | |||
| 109 | /* Extended opcode, get the second opcode byte */ | 110 | /* Extended opcode, get the second opcode byte */ |
| 110 | 111 | ||
| 111 | aml++; | 112 | aml++; |
| @@ -137,7 +138,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state, | |||
| 137 | const struct acpi_opcode_info *parent_info; | 138 | const struct acpi_opcode_info *parent_info; |
| 138 | union acpi_parse_object *replacement_op = NULL; | 139 | union acpi_parse_object *replacement_op = NULL; |
| 139 | 140 | ||
| 140 | ACPI_FUNCTION_TRACE_PTR("ps_complete_this_op", op); | 141 | ACPI_FUNCTION_TRACE_PTR(ps_complete_this_op, op); |
| 141 | 142 | ||
| 142 | /* Check for null Op, can happen if AML code is corrupt */ | 143 | /* Check for null Op, can happen if AML code is corrupt */ |
| 143 | 144 | ||
| @@ -158,6 +159,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state, | |||
| 158 | if (op->common.parent) { | 159 | if (op->common.parent) { |
| 159 | prev = op->common.parent->common.value.arg; | 160 | prev = op->common.parent->common.value.arg; |
| 160 | if (!prev) { | 161 | if (!prev) { |
| 162 | |||
| 161 | /* Nothing more to do */ | 163 | /* Nothing more to do */ |
| 162 | 164 | ||
| 163 | goto cleanup; | 165 | goto cleanup; |
| @@ -245,6 +247,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state, | |||
| 245 | /* We must unlink this op from the parent tree */ | 247 | /* We must unlink this op from the parent tree */ |
| 246 | 248 | ||
| 247 | if (prev == op) { | 249 | if (prev == op) { |
| 250 | |||
| 248 | /* This op is the first in the list */ | 251 | /* This op is the first in the list */ |
| 249 | 252 | ||
| 250 | if (replacement_op) { | 253 | if (replacement_op) { |
| @@ -265,6 +268,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state, | |||
| 265 | 268 | ||
| 266 | else | 269 | else |
| 267 | while (prev) { | 270 | while (prev) { |
| 271 | |||
| 268 | /* Traverse all siblings in the parent's argument list */ | 272 | /* Traverse all siblings in the parent's argument list */ |
| 269 | 273 | ||
| 270 | next = prev->common.next; | 274 | next = prev->common.next; |
| @@ -329,7 +333,7 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state, | |||
| 329 | struct acpi_parse_state *parser_state = &walk_state->parser_state; | 333 | struct acpi_parse_state *parser_state = &walk_state->parser_state; |
| 330 | acpi_status status = AE_CTRL_PENDING; | 334 | acpi_status status = AE_CTRL_PENDING; |
| 331 | 335 | ||
| 332 | ACPI_FUNCTION_TRACE_PTR("ps_next_parse_state", op); | 336 | ACPI_FUNCTION_TRACE_PTR(ps_next_parse_state, op); |
| 333 | 337 | ||
| 334 | switch (callback_status) { | 338 | switch (callback_status) { |
| 335 | case AE_CTRL_TERMINATE: | 339 | case AE_CTRL_TERMINATE: |
| @@ -449,10 +453,10 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 449 | struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list; | 453 | struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list; |
| 450 | struct acpi_walk_state *previous_walk_state; | 454 | struct acpi_walk_state *previous_walk_state; |
| 451 | 455 | ||
| 452 | ACPI_FUNCTION_TRACE("ps_parse_aml"); | 456 | ACPI_FUNCTION_TRACE(ps_parse_aml); |
| 453 | 457 | ||
| 454 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, | 458 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, |
| 455 | "Entered with walk_state=%p Aml=%p size=%X\n", | 459 | "Entered with WalkState=%p Aml=%p size=%X\n", |
| 456 | walk_state, walk_state->parser_state.aml, | 460 | walk_state, walk_state->parser_state.aml, |
| 457 | walk_state->parser_state.aml_size)); | 461 | walk_state->parser_state.aml_size)); |
| 458 | 462 | ||
| @@ -460,6 +464,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 460 | 464 | ||
| 461 | thread = acpi_ut_create_thread_state(); | 465 | thread = acpi_ut_create_thread_state(); |
| 462 | if (!thread) { | 466 | if (!thread) { |
| 467 | acpi_ds_delete_walk_state(walk_state); | ||
| 463 | return_ACPI_STATUS(AE_NO_MEMORY); | 468 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 464 | } | 469 | } |
| 465 | 470 | ||
| @@ -510,6 +515,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 510 | } else if (status == AE_CTRL_TERMINATE) { | 515 | } else if (status == AE_CTRL_TERMINATE) { |
| 511 | status = AE_OK; | 516 | status = AE_OK; |
| 512 | } else if ((status != AE_OK) && (walk_state->method_desc)) { | 517 | } else if ((status != AE_OK) && (walk_state->method_desc)) { |
| 518 | |||
| 513 | /* Either the method parse or actual execution failed */ | 519 | /* Either the method parse or actual execution failed */ |
| 514 | 520 | ||
| 515 | ACPI_ERROR_METHOD("Method parse/execution failed", | 521 | ACPI_ERROR_METHOD("Method parse/execution failed", |
| @@ -550,20 +556,9 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 550 | */ | 556 | */ |
| 551 | if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == | 557 | if (((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == |
| 552 | ACPI_PARSE_EXECUTE) || (ACPI_FAILURE(status))) { | 558 | ACPI_PARSE_EXECUTE) || (ACPI_FAILURE(status))) { |
| 553 | if (walk_state->method_desc) { | 559 | acpi_ds_terminate_control_method(walk_state-> |
| 554 | /* Decrement the thread count on the method parse tree */ | 560 | method_desc, |
| 555 | 561 | walk_state); | |
| 556 | if (walk_state->method_desc->method. | ||
| 557 | thread_count) { | ||
| 558 | walk_state->method_desc->method. | ||
| 559 | thread_count--; | ||
| 560 | } else { | ||
| 561 | ACPI_ERROR((AE_INFO, | ||
| 562 | "Invalid zero thread count in method")); | ||
| 563 | } | ||
| 564 | } | ||
| 565 | |||
| 566 | acpi_ds_terminate_control_method(walk_state); | ||
| 567 | } | 562 | } |
| 568 | 563 | ||
| 569 | /* Delete this walk state and all linked control states */ | 564 | /* Delete this walk state and all linked control states */ |
| @@ -572,7 +567,7 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 572 | previous_walk_state = walk_state; | 567 | previous_walk_state = walk_state; |
| 573 | 568 | ||
| 574 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, | 569 | ACPI_DEBUG_PRINT((ACPI_DB_PARSE, |
| 575 | "return_value=%p, implicit_value=%p State=%p\n", | 570 | "ReturnValue=%p, ImplicitValue=%p State=%p\n", |
| 576 | walk_state->return_desc, | 571 | walk_state->return_desc, |
| 577 | walk_state->implicit_return_obj, walk_state)); | 572 | walk_state->implicit_return_obj, walk_state)); |
| 578 | 573 | ||
| @@ -633,12 +628,14 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 633 | } | 628 | } |
| 634 | } else { | 629 | } else { |
| 635 | if (previous_walk_state->return_desc) { | 630 | if (previous_walk_state->return_desc) { |
| 631 | |||
| 636 | /* Caller doesn't want it, must delete it */ | 632 | /* Caller doesn't want it, must delete it */ |
| 637 | 633 | ||
| 638 | acpi_ut_remove_reference(previous_walk_state-> | 634 | acpi_ut_remove_reference(previous_walk_state-> |
| 639 | return_desc); | 635 | return_desc); |
| 640 | } | 636 | } |
| 641 | if (previous_walk_state->implicit_return_obj) { | 637 | if (previous_walk_state->implicit_return_obj) { |
| 638 | |||
| 642 | /* Caller doesn't want it, must delete it */ | 639 | /* Caller doesn't want it, must delete it */ |
| 643 | 640 | ||
| 644 | acpi_ut_remove_reference(previous_walk_state-> | 641 | acpi_ut_remove_reference(previous_walk_state-> |
