@ -172,7 +172,19 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
switch ( op - > common . node - > type ) {
/*
* For these types , we need the actual node , not the subobject .
* However , the subobject got an extra reference count above .
* However , the subobject did not get an extra reference count above .
*
* TBD : should ex_resolve_node_to_value be changed to fix this ?
*/
case ACPI_TYPE_DEVICE :
case ACPI_TYPE_THERMAL :
acpi_ut_add_reference ( op - > common . node - > object ) ;
/*lint -fallthrough */
/*
* For these types , we need the actual node , not the subobject .
* The subobject got an extra reference count in ex_resolve_node_to_value .
*/
case ACPI_TYPE_MUTEX :
case ACPI_TYPE_METHOD :
@ -180,25 +192,15 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
case ACPI_TYPE_PROCESSOR :
case ACPI_TYPE_EVENT :
case ACPI_TYPE_REGION :
case ACPI_TYPE_DEVICE :
case ACPI_TYPE_THERMAL :
obj_desc =
( union acpi_operand_object * ) op - > common .
node ;
/* We will create a reference object for these types below */
break ;
default :
break ;
}
/*
* If above resolved to an operand object , we are done . Otherwise ,
* we have a NS node , we must create the package entry as a named
* reference .
*/
if ( ACPI_GET_DESCRIPTOR_TYPE ( obj_desc ) ! =
ACPI_DESC_TYPE_NAMED ) {
/*
* All other types - the node was resolved to an actual
* object , we are done .
*/
goto exit ;
}
}
@ -223,7 +225,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
exit :
* obj_desc_ptr = obj_desc ;
return_ACPI_STATUS ( AE_OK ) ;
return_ACPI_STATUS ( status ) ;
}
/*******************************************************************************
@ -743,6 +745,8 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
/* Node was saved in Op */
obj_desc - > reference . node = op - > common . node ;
obj_desc - > reference . object =
op - > common . node - > object ;
}
obj_desc - > reference . opcode = opcode ;