[PATCH 3/4] PM / Domains: Improve error handling while adding/removing devices
From: geert@linux-m68k.org (Geert Uytterhoeven)
Date: 2014-11-05 07:47:50
Also in:
linux-pm, linux-samsung-soc
On Tue, Oct 28, 2014 at 3:38 PM, Ulf Hansson [off-list ref] wrote:
quoted hunk ↗ jump to hunk
--- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c@@ -1358,25 +1358,81 @@ EXPORT_SYMBOL_GPL(pm_genpd_syscore_poweron); #endif /* CONFIG_PM_SLEEP */ -static struct generic_pm_domain_data *__pm_genpd_alloc_dev_data(struct device *dev) +static int genpd_alloc_dev_data(struct generic_pm_domain *genpd, + struct device *dev, struct gpd_timing_data *td) {
[...]
+ if (genpd->attach_dev) + genpd->attach_dev(dev);
Note that dev->pm_domain is not yet set at this point, so the callee can no longer know to which domain the device is being attached. Should we re-add the parameter, or move the attach_dev() back to __pm_genpd_add_device(), like Kevin suggested. [...]
}
quoted hunk ↗ jump to hunk
/**@@ -1388,7 +1444,7 @@ static void __pm_genpd_free_dev_data(struct device *dev, int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev, struct gpd_timing_data *td) {
[...]
- ret = dev_pm_get_subsys_data(dev); + ret = genpd_alloc_dev_data(genpd, dev, td);
[...]
dev->pm_domain = &genpd->domain;
-
+ gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
spin_unlock_irq(&dev->power.lock);
- if (genpd->attach_dev)
- genpd->attach_dev(dev);
-
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds