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

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

PM / OPP don't match for existing OPPs when list is empty



OPP list is guaranteed to be empty when 'dev_opp' is created. And so we don't
need to run the comparison loop with existing OPPs.

Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent cd1a068a
Loading
Loading
Loading
Loading
+9 −6
Original line number Original line Diff line number Diff line
@@ -417,6 +417,12 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt)
	/* Hold our list modification lock here */
	/* Hold our list modification lock here */
	mutex_lock(&dev_opp_list_lock);
	mutex_lock(&dev_opp_list_lock);


	/* populate the opp table */
	new_opp->dev_opp = dev_opp;
	new_opp->rate = freq;
	new_opp->u_volt = u_volt;
	new_opp->available = true;

	/* 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)) {
@@ -441,14 +447,10 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt)


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


	/* populate the opp table */
	new_opp->dev_opp = dev_opp;
	new_opp->rate = freq;
	new_opp->u_volt = u_volt;
	new_opp->available = true;

	/*
	/*
	 * Insert new OPP in order of increasing frequency
	 * Insert new OPP in order of increasing frequency
	 * and discard if already present
	 * and discard if already present
@@ -474,6 +476,7 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt)
		return ret;
		return ret;
	}
	}


list_add:
	list_add_rcu(&new_opp->node, head);
	list_add_rcu(&new_opp->node, head);
	mutex_unlock(&dev_opp_list_lock);
	mutex_unlock(&dev_opp_list_lock);