Commit 112a04f6 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'pm-domains' into pm

* pm-domains:
  PM / Domains: Avoid a potential deadlock
parents 2a954966 2071ac98
Loading
Loading
Loading
Loading
+6 −7
Original line number Original line Diff line number Diff line
@@ -1469,12 +1469,12 @@ static int genpd_add_device(struct generic_pm_domain *genpd, struct device *dev,
	if (IS_ERR(gpd_data))
	if (IS_ERR(gpd_data))
		return PTR_ERR(gpd_data);
		return PTR_ERR(gpd_data);


	genpd_lock(genpd);

	ret = genpd->attach_dev ? genpd->attach_dev(genpd, dev) : 0;
	ret = genpd->attach_dev ? genpd->attach_dev(genpd, dev) : 0;
	if (ret)
	if (ret)
		goto out;
		goto out;


	genpd_lock(genpd);

	dev_pm_domain_set(dev, &genpd->domain);
	dev_pm_domain_set(dev, &genpd->domain);


	genpd->device_count++;
	genpd->device_count++;
@@ -1482,9 +1482,8 @@ static int genpd_add_device(struct generic_pm_domain *genpd, struct device *dev,


	list_add_tail(&gpd_data->base.list_node, &genpd->dev_list);
	list_add_tail(&gpd_data->base.list_node, &genpd->dev_list);


 out:
	genpd_unlock(genpd);
	genpd_unlock(genpd);

 out:
	if (ret)
	if (ret)
		genpd_free_dev_data(dev, gpd_data);
		genpd_free_dev_data(dev, gpd_data);
	else
	else
@@ -1533,15 +1532,15 @@ static int genpd_remove_device(struct generic_pm_domain *genpd,
	genpd->device_count--;
	genpd->device_count--;
	genpd->max_off_time_changed = true;
	genpd->max_off_time_changed = true;


	if (genpd->detach_dev)
		genpd->detach_dev(genpd, dev);

	dev_pm_domain_set(dev, NULL);
	dev_pm_domain_set(dev, NULL);


	list_del_init(&pdd->list_node);
	list_del_init(&pdd->list_node);


	genpd_unlock(genpd);
	genpd_unlock(genpd);


	if (genpd->detach_dev)
		genpd->detach_dev(genpd, dev);

	genpd_free_dev_data(dev, gpd_data);
	genpd_free_dev_data(dev, gpd_data);


	return 0;
	return 0;