diff options
Diffstat (limited to 'drivers/acpi/dispatcher/dswload.c')
-rw-r--r-- | drivers/acpi/dispatcher/dswload.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/acpi/dispatcher/dswload.c b/drivers/acpi/dispatcher/dswload.c index e3ca7f6539c1..8ab9d1b29a4c 100644 --- a/drivers/acpi/dispatcher/dswload.c +++ b/drivers/acpi/dispatcher/dswload.c | |||
@@ -5,7 +5,7 @@ | |||
5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * Copyright (C) 2000 - 2006, R. Byron Moore | 8 | * Copyright (C) 2000 - 2007, R. Byron Moore |
9 | * All rights reserved. | 9 | * All rights reserved. |
10 | * | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -196,6 +196,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state, | |||
196 | * one of the opcodes that actually opens a scope | 196 | * one of the opcodes that actually opens a scope |
197 | */ | 197 | */ |
198 | switch (node->type) { | 198 | switch (node->type) { |
199 | case ACPI_TYPE_ANY: | ||
199 | case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ | 200 | case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ |
200 | case ACPI_TYPE_DEVICE: | 201 | case ACPI_TYPE_DEVICE: |
201 | case ACPI_TYPE_POWER: | 202 | case ACPI_TYPE_POWER: |
@@ -546,6 +547,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, | |||
546 | acpi_status status; | 547 | acpi_status status; |
547 | acpi_object_type object_type; | 548 | acpi_object_type object_type; |
548 | char *buffer_ptr; | 549 | char *buffer_ptr; |
550 | u32 flags; | ||
549 | 551 | ||
550 | ACPI_FUNCTION_TRACE(ds_load2_begin_op); | 552 | ACPI_FUNCTION_TRACE(ds_load2_begin_op); |
551 | 553 | ||
@@ -669,6 +671,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, | |||
669 | * one of the opcodes that actually opens a scope | 671 | * one of the opcodes that actually opens a scope |
670 | */ | 672 | */ |
671 | switch (node->type) { | 673 | switch (node->type) { |
674 | case ACPI_TYPE_ANY: | ||
672 | case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ | 675 | case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ |
673 | case ACPI_TYPE_DEVICE: | 676 | case ACPI_TYPE_DEVICE: |
674 | case ACPI_TYPE_POWER: | 677 | case ACPI_TYPE_POWER: |
@@ -750,12 +753,20 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, | |||
750 | break; | 753 | break; |
751 | } | 754 | } |
752 | 755 | ||
753 | /* Add new entry into namespace */ | 756 | flags = ACPI_NS_NO_UPSEARCH; |
757 | if (walk_state->pass_number == ACPI_IMODE_EXECUTE) { | ||
758 | |||
759 | /* Execution mode, node cannot already exist, node is temporary */ | ||
760 | |||
761 | flags |= (ACPI_NS_ERROR_IF_FOUND | ACPI_NS_TEMPORARY); | ||
762 | } | ||
763 | |||
764 | /* Add new entry or lookup existing entry */ | ||
754 | 765 | ||
755 | status = | 766 | status = |
756 | acpi_ns_lookup(walk_state->scope_info, buffer_ptr, | 767 | acpi_ns_lookup(walk_state->scope_info, buffer_ptr, |
757 | object_type, ACPI_IMODE_LOAD_PASS2, | 768 | object_type, ACPI_IMODE_LOAD_PASS2, flags, |
758 | ACPI_NS_NO_UPSEARCH, walk_state, &(node)); | 769 | walk_state, &node); |
759 | break; | 770 | break; |
760 | } | 771 | } |
761 | 772 | ||