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

Commit d5e1670a authored by Shuah Khan's avatar Shuah Khan Committed by Rafael J. Wysocki
Browse files

PM: Avoid calling kfree() under spinlock in dev_pm_put_subsys_data()



Fix dev_pm_put_subsys_data() so that it doesn't call kfree() under
a spinlock and make it return 1 whenever it leaves NULL
power.subsys_data (regardless of the reason).

Signed-off-by: default avatarShuah Khan <shuah.kh@samsung.com>
Reviewed-by: default avatarPavel Machek <pavel@ucw.cz>
Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent f722406f
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -61,24 +61,24 @@ EXPORT_SYMBOL_GPL(dev_pm_get_subsys_data);
int dev_pm_put_subsys_data(struct device *dev)
{
	struct pm_subsys_data *psd;
	int ret = 0;
	int ret = 1;

	spin_lock_irq(&dev->power.lock);

	psd = dev_to_psd(dev);
	if (!psd) {
		ret = -EINVAL;
	if (!psd)
		goto out;
	}

	if (--psd->refcount == 0) {
		dev->power.subsys_data = NULL;
		kfree(psd);
		ret = 1;
	} else {
		psd = NULL;
		ret = 0;
	}

 out:
	spin_unlock_irq(&dev->power.lock);
	kfree(psd);

	return ret;
}