lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 27 Oct 2015 18:40:54 +0100
From:	Marc Titinger <mtitinger@...libre.com>
To:	lina.iyer@...aro.org
Cc:	rjw@...ysocki.net, khilman@...nel.org, ahaslam@...libre.com,
	bcousson@...libre.com, linux-pm@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	Marc Titinger <mtitinger@...libre.com>,
	Marc Titinger <mtitinger+renesas@...libre.com>
Subject: [RFC v3 5/7] drivers: cpu-pd: allow calling of_cpu_pd_init from platform code.

From: Marc Titinger <mtitinger@...libre.com>

re-instate a two step init, first register the CPU-power domains, then
attach the CPUs, because CPU ordering does not match cluster/PD boundaries.

Signed-off-by: Marc Titinger <mtitinger+renesas@...libre.com>
---
 drivers/base/power/cpu-pd.c | 29 ++++++++++++-----------------
 include/linux/cpu-pd.h      |  2 ++
 2 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/drivers/base/power/cpu-pd.c b/drivers/base/power/cpu-pd.c
index eddee98..701a68f 100644
--- a/drivers/base/power/cpu-pd.c
+++ b/drivers/base/power/cpu-pd.c
@@ -8,8 +8,6 @@
  * published by the Free Software Foundation.
  */
 
-#define DEBUG
-
 #include <linux/kernel.h>
 #include <linux/export.h>
 #include <linux/cpu.h>
@@ -160,8 +158,6 @@ static int cpu_hotplug(struct notifier_block *nb,
 int of_register_cpu_pm_domain(struct device_node *dn,
 		struct cpu_pm_domain *pd)
 {
-	int ret;
-
 	if (!pd || !pd->genpd)
 		return -EINVAL;
 
@@ -187,14 +183,6 @@ int of_register_cpu_pm_domain(struct device_node *dn,
 	pm_genpd_init_simple(pd->genpd, &simple_qos_governor, false);
 	of_genpd_add_provider_simple(dn, pd->genpd);
 
-	/* Attach the CPUs to the CPU PM domain */
-	ret = of_pm_domain_attach_cpus();
-	if (ret) {
-		of_genpd_del_provider(dn);
-		return ret;
-	}
-
-	hotcpu_notifier(cpu_hotplug, 0)
 	return 0;
 }
 EXPORT_SYMBOL(of_register_cpu_pm_domain);
@@ -245,21 +233,28 @@ int of_init_cpu_pm_domain(struct device_node *dn, struct cpu_pm_ops *ops)
 EXPORT_SYMBOL(of_init_cpu_pm_domain);
 
 
-static int __init of_cpu_pd_init(void)
+int __init of_cpu_pd_init(const char *compatible)
 {
 	struct device_node *dn;
 	int ret;
 
-	for_each_compatible_node(dn, NULL, "cpu,pd") {
+	if (!compatible)
+		return -EINVAL;
+
+	for_each_compatible_node(dn, NULL, compatible) {
 
 		if (!of_device_is_available(dn))
 			continue;
 
 		ret = of_init_cpu_pm_domain(dn, NULL);
-		if (!ret)
+		if (ret)
 			return ret;
 
 	}
-	return 0;
+
+	ret = of_pm_domain_attach_cpus();
+	if (!ret)
+		hotcpu_notifier(cpu_hotplug, 0);
+
+	return ret;
 }
-device_initcall(of_cpu_pd_init);
diff --git a/include/linux/cpu-pd.h b/include/linux/cpu-pd.h
index 9ae6f5b..f3066d0 100644
--- a/include/linux/cpu-pd.h
+++ b/include/linux/cpu-pd.h
@@ -32,4 +32,6 @@ extern int of_register_cpu_pm_domain(struct device_node *dn,
 extern int of_init_cpu_pm_domain(struct device_node *dn,
 		struct cpu_pm_ops *ops);
 
+extern int __init of_cpu_pd_init(const char *compatible);
+
 #endif /* __CPU_PD_H__ */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists