Skip to content

Commit

Permalink
ACPICA: Report error if method creates 2 objects with the same name
Browse files Browse the repository at this point in the history
Fixed a regression where an error was no
longer emitted if a control method attempts to create 2
objects of the same name. This previously and now returns
AE_ALREADY_EXISTS. When this exception occurs, it invokes
the mechanism that will dynamically serialize the control
method to possible prevent future errors. (BZ 440)

Signed-off-by: Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Bob Moore authored and Len Brown committed Feb 3, 2007
1 parent ea5d8eb commit 13b572a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
15 changes: 12 additions & 3 deletions drivers/acpi/dispatcher/dswload.c
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
acpi_status status;
acpi_object_type object_type;
char *buffer_ptr;
u32 flags;

ACPI_FUNCTION_TRACE(ds_load2_begin_op);

Expand Down Expand Up @@ -752,12 +753,20 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
break;
}

/* Add new entry into namespace */
flags = ACPI_NS_NO_UPSEARCH;
if (walk_state->pass_number == 3) {

/* Execution mode, node cannot already exist */

flags |= ACPI_NS_ERROR_IF_FOUND;
}

/* Add new entry or lookup existing entry */

status =
acpi_ns_lookup(walk_state->scope_info, buffer_ptr,
object_type, ACPI_IMODE_LOAD_PASS2,
ACPI_NS_NO_UPSEARCH, walk_state, &(node));
object_type, ACPI_IMODE_LOAD_PASS2, flags,
walk_state, &node);
break;
}

Expand Down
5 changes: 5 additions & 0 deletions drivers/acpi/parser/psparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,11 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)

if ((status == AE_ALREADY_EXISTS) &&
(!walk_state->method_desc->method.mutex)) {
ACPI_INFO((AE_INFO,
"Marking method %4.4s as Serialized",
walk_state->method_node->name.
ascii));

/*
* Method tried to create an object twice. The probable cause is
* that the method cannot handle reentrancy.
Expand Down

0 comments on commit 13b572a

Please sign in to comment.