ACPICA: Fix for Device/Thermal objects with ObjectType and DerefOf
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>
This commit is contained in:
parent
c6915b3f29
commit
1d6e9cfa5a
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user