Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07cce74a authored by Viresh Kumar's avatar Viresh Kumar Committed by Rafael J. Wysocki
Browse files

PM / OPP: handle allocation of device_opp in a separate routine



Get the 'device_opp' allocation code into a separate routine to keep only the
necessary part in dev_pm_opp_add_dynamic().

Also do s/sizeof(struct device_opp)/sizeof(*dev_opp) and remove the print
message on kzalloc() failure as checkpatch warns for that.

Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 29df0ee1
Loading
Loading
Loading
Loading
+22 −15
Original line number Original line Diff line number Diff line
@@ -386,6 +386,27 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
}
}
EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);


static struct device_opp *add_device_opp(struct device *dev)
{
	struct device_opp *dev_opp;

	/*
	 * Allocate a new device OPP table. In the infrequent case where a new
	 * device is needed to be added, we pay this penalty.
	 */
	dev_opp = kzalloc(sizeof(*dev_opp), GFP_KERNEL);
	if (!dev_opp)
		return NULL;

	dev_opp->dev = dev;
	srcu_init_notifier_head(&dev_opp->srcu_head);
	INIT_LIST_HEAD(&dev_opp->opp_list);

	/* Secure the device list modification */
	list_add_rcu(&dev_opp->node, &dev_opp_list);
	return dev_opp;
}

static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
				  unsigned long u_volt, bool dynamic)
				  unsigned long u_volt, bool dynamic)
{
{
@@ -412,27 +433,13 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
	/* Check for existing list for 'dev' */
	/* Check for existing list for 'dev' */
	dev_opp = find_device_opp(dev);
	dev_opp = find_device_opp(dev);
	if (IS_ERR(dev_opp)) {
	if (IS_ERR(dev_opp)) {
		/*
		dev_opp = add_device_opp(dev);
		 * Allocate a new device OPP table. In the infrequent case
		 * where a new device is needed to be added, we pay this
		 * penalty.
		 */
		dev_opp = kzalloc(sizeof(struct device_opp), GFP_KERNEL);
		if (!dev_opp) {
		if (!dev_opp) {
			mutex_unlock(&dev_opp_list_lock);
			mutex_unlock(&dev_opp_list_lock);
			kfree(new_opp);
			kfree(new_opp);
			dev_warn(dev,
				"%s: Unable to create device OPP structure\n",
				__func__);
			return -ENOMEM;
			return -ENOMEM;
		}
		}


		dev_opp->dev = dev;
		srcu_init_notifier_head(&dev_opp->srcu_head);
		INIT_LIST_HEAD(&dev_opp->opp_list);

		/* Secure the device list modification */
		list_add_rcu(&dev_opp->node, &dev_opp_list);
		head = &dev_opp->opp_list;
		head = &dev_opp->opp_list;
		goto list_add;
		goto list_add;
	}
	}