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

Commit 7e4d6844 authored by Lan Tianyu's avatar Lan Tianyu Committed by Rafael J. Wysocki
Browse files

PM / QoS: Resume device before exposing/hiding PM QoS flags



Since dev_pm_qos_add_request(), dev_pm_qos_update_request() and
dev_pm_qos_remove_request() for PM QoS flags should not be invoked
when device in RPM_SUSPENDED, add pm_runtime_get_sync() and pm_runtime_put()
around these functions in dev_pm_qos_expose_flags() and
dev_pm_qos_hide_flags().

[rjw: Modified the subject and changelog to better reflect the code
 changes made.]

Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 436ede89
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -633,15 +633,18 @@ int dev_pm_qos_expose_flags(struct device *dev, s32 val)
	if (!req)
	if (!req)
		return -ENOMEM;
		return -ENOMEM;


	pm_runtime_get_sync(dev);
	ret = dev_pm_qos_add_request(dev, req, DEV_PM_QOS_FLAGS, val);
	ret = dev_pm_qos_add_request(dev, req, DEV_PM_QOS_FLAGS, val);
	if (ret < 0)
	if (ret < 0)
		return ret;
		goto fail;


	dev->power.qos->flags_req = req;
	dev->power.qos->flags_req = req;
	ret = pm_qos_sysfs_add_flags(dev);
	ret = pm_qos_sysfs_add_flags(dev);
	if (ret)
	if (ret)
		__dev_pm_qos_drop_user_request(dev, DEV_PM_QOS_FLAGS);
		__dev_pm_qos_drop_user_request(dev, DEV_PM_QOS_FLAGS);


fail:
	pm_runtime_put(dev);
	return ret;
	return ret;
}
}
EXPORT_SYMBOL_GPL(dev_pm_qos_expose_flags);
EXPORT_SYMBOL_GPL(dev_pm_qos_expose_flags);
@@ -654,7 +657,9 @@ void dev_pm_qos_hide_flags(struct device *dev)
{
{
	if (dev->power.qos && dev->power.qos->flags_req) {
	if (dev->power.qos && dev->power.qos->flags_req) {
		pm_qos_sysfs_remove_flags(dev);
		pm_qos_sysfs_remove_flags(dev);
		pm_runtime_get_sync(dev);
		__dev_pm_qos_drop_user_request(dev, DEV_PM_QOS_FLAGS);
		__dev_pm_qos_drop_user_request(dev, DEV_PM_QOS_FLAGS);
		pm_runtime_put(dev);
	}
	}
}
}
EXPORT_SYMBOL_GPL(dev_pm_qos_hide_flags);
EXPORT_SYMBOL_GPL(dev_pm_qos_hide_flags);