diff options
Diffstat (limited to 'drivers/acpi/acpica/utdelete.c')
| -rw-r--r-- | drivers/acpi/acpica/utdelete.c | 38 | 
1 files changed, 24 insertions, 14 deletions
diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c index 2a6c3e18369..798105443d0 100644 --- a/drivers/acpi/acpica/utdelete.c +++ b/drivers/acpi/acpica/utdelete.c @@ -60,7 +60,7 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action);   *   * FUNCTION:    acpi_ut_delete_internal_obj   * - * PARAMETERS:  Object         - Object to be deleted + * PARAMETERS:  object         - Object to be deleted   *   * RETURN:      None   * @@ -152,7 +152,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)  	case ACPI_TYPE_PROCESSOR:  	case ACPI_TYPE_THERMAL: -		/* Walk the notify handler list for this object */ +		/* Walk the address handler list for this object */  		handler_desc = object->common_notify.handler;  		while (handler_desc) { @@ -358,8 +358,8 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list)   *   * FUNCTION:    acpi_ut_update_ref_count   * - * PARAMETERS:  Object          - Object whose ref count is to be updated - *              Action          - What to do + * PARAMETERS:  object          - Object whose ref count is to be updated + *              action          - What to do   *   * RETURN:      New ref count   * @@ -456,9 +456,9 @@ acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)   *   * FUNCTION:    acpi_ut_update_object_reference   * - * PARAMETERS:  Object              - Increment ref count for this object + * PARAMETERS:  object              - Increment ref count for this object   *                                    and all sub-objects - *              Action              - Either REF_INCREMENT or REF_DECREMENT or + *              action              - Either REF_INCREMENT or REF_DECREMENT or   *                                    REF_FORCE_DELETE   *   * RETURN:      Status @@ -480,6 +480,7 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)  	acpi_status status = AE_OK;  	union acpi_generic_state *state_list = NULL;  	union acpi_operand_object *next_object = NULL; +	union acpi_operand_object *prev_object;  	union acpi_generic_state *state;  	u32 i; @@ -505,12 +506,21 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)  		case ACPI_TYPE_POWER:  		case ACPI_TYPE_THERMAL: -			/* Update the notify objects for these types (if present) */ - -			acpi_ut_update_ref_count(object->common_notify. -						 system_notify, action); -			acpi_ut_update_ref_count(object->common_notify. -						 device_notify, action); +			/* +			 * Update the notify objects for these types (if present) +			 * Two lists, system and device notify handlers. +			 */ +			for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++) { +				prev_object = +				    object->common_notify.notify_list[i]; +				while (prev_object) { +					next_object = +					    prev_object->notify.next[i]; +					acpi_ut_update_ref_count(prev_object, +								 action); +					prev_object = next_object; +				} +			}  			break;  		case ACPI_TYPE_PACKAGE: @@ -630,7 +640,7 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)   *   * FUNCTION:    acpi_ut_add_reference   * - * PARAMETERS:  Object          - Object whose reference count is to be + * PARAMETERS:  object          - Object whose reference count is to be   *                                incremented   *   * RETURN:      None @@ -664,7 +674,7 @@ void acpi_ut_add_reference(union acpi_operand_object *object)   *   * FUNCTION:    acpi_ut_remove_reference   * - * PARAMETERS:  Object         - Object whose ref count will be decremented + * PARAMETERS:  object         - Object whose ref count will be decremented   *   * RETURN:      None   *  |