Skip to content

Commit

Permalink
ACPICA: Fix for Device/Thermal objects with ObjectType and DerefOf
Browse files Browse the repository at this point in the history
ACPICA commit 89565151aa4db7b546d4935b187bf2c4a86885ee

These types must be special cased because the namespace node
does not contain a subobject as do all other types.

Link: https://github.com/acpica/acpica/commit/89565151
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Bob Moore authored and Rafael J. Wysocki committed Jun 27, 2017
1 parent c6915b3 commit 1d6e9cf
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 11 deletions.
25 changes: 19 additions & 6 deletions drivers/acpi/acpica/exoparg1.c
Original file line number Diff line number Diff line change
Expand Up @@ -921,13 +921,26 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
* This is a deref_of (object_reference)
* Get the actual object from the Node (This is the dereference).
* This case may only happen when a local_x or arg_x is
* dereferenced above.
* dereferenced above, or for references to device and
* thermal objects.
*/
return_desc = acpi_ns_get_attached_object((struct
acpi_namespace_node
*)
operand[0]);
acpi_ut_add_reference(return_desc);
switch (((struct acpi_namespace_node *)operand[0])->
type) {
case ACPI_TYPE_DEVICE:
case ACPI_TYPE_THERMAL:

/* These types have no node subobject, return the NS node */

return_desc = operand[0];
break;

default:
/* For most types, get the object attached to the node */

return_desc = acpi_ns_get_attached_object((struct acpi_namespace_node *)operand[0]);
acpi_ut_add_reference(return_desc);
break;
}
} else {
/*
* This must be a reference object produced by either the
Expand Down
23 changes: 18 additions & 5 deletions drivers/acpi/acpica/exresolv.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,11 +368,24 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
*)obj_desc);
}

if (!obj_desc) {
ACPI_ERROR((AE_INFO,
"[%4.4s] Node is unresolved or uninitialized",
acpi_ut_get_node_name(node)));
return_ACPI_STATUS(AE_AML_UNINITIALIZED_NODE);
switch (type) {
case ACPI_TYPE_DEVICE:
case ACPI_TYPE_THERMAL:

/* These types have no attached subobject */
break;

default:

/* All other types require a subobject */

if (!obj_desc) {
ACPI_ERROR((AE_INFO,
"[%4.4s] Node is unresolved or uninitialized",
acpi_ut_get_node_name(node)));
return_ACPI_STATUS(AE_AML_UNINITIALIZED_NODE);
}
break;
}
break;

Expand Down

0 comments on commit 1d6e9cf

Please sign in to comment.