Commit 6d153f52 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

thermal: core: Introduce thermal_instance_add()



To reduce the number of redundant result checks in
thermal_bind_cdev_to_trip() and make the code in it easier to
follow, move some of it to a new function called thermal_instance_add()
and make thermal_bind_cdev_to_trip() invoke that function.

No intentional functional impact.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/3618899.iIbC2pHGDl@rjwysocki.net


Reviewed-by: default avatarLukasz Luba <lukasz.luba@arm.com>
parent 33eab804
Loading
Loading
Loading
Loading
+30 −16
Original line number Diff line number Diff line
@@ -745,6 +745,28 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id)
 *				     binding, and unbinding.
 */

static int thermal_instance_add(struct thermal_instance *new_instance,
				struct thermal_cooling_device *cdev,
				struct thermal_trip_desc *td)
{
	struct thermal_instance *instance;

	list_for_each_entry(instance, &td->thermal_instances, trip_node) {
		if (instance->cdev == cdev)
			return -EEXIST;
	}

	list_add_tail(&new_instance->trip_node, &td->thermal_instances);

	mutex_lock(&cdev->lock);

	list_add_tail(&new_instance->cdev_node, &cdev->thermal_instances);

	mutex_unlock(&cdev->lock);

	return 0;
}

/**
 * thermal_bind_cdev_to_trip - bind a cooling device to a thermal zone
 * @tz:		pointer to struct thermal_zone_device
@@ -763,7 +785,7 @@ static int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz,
				     struct thermal_cooling_device *cdev,
				     struct cooling_spec *cool_spec)
{
	struct thermal_instance *dev, *instance;
	struct thermal_instance *dev;
	bool upper_no_limit;
	int result;

@@ -825,23 +847,15 @@ static int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz,
	if (result)
		goto remove_trip_file;

	mutex_lock(&cdev->lock);
	list_for_each_entry(instance, &td->thermal_instances, trip_node)
		if (instance->cdev == cdev) {
			result = -EEXIST;
			break;
		}
	if (!result) {
		list_add_tail(&dev->trip_node, &td->thermal_instances);
		list_add_tail(&dev->cdev_node, &cdev->thermal_instances);
	}
	mutex_unlock(&cdev->lock);
	result = thermal_instance_add(dev, cdev, td);
	if (result)
		goto remove_weight_file;

	if (!result) {
	thermal_governor_update_tz(tz, THERMAL_TZ_BIND_CDEV);

	return 0;
	}

remove_weight_file:
	device_remove_file(&tz->device, &dev->weight_attr);
remove_trip_file:
	device_remove_file(&tz->device, &dev->attr);