Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1437469 > unrolled thread
| Started by | Jisheng Zhang <jszhang@marvell.com> |
|---|---|
| First post | 2016-07-06 08:30 +0200 |
| Last post | 2016-07-07 15:50 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v4 1/2] ARM: cpuidle: fix !cpuidle_ops[cpu].init case during init Jisheng Zhang <jszhang@marvell.com> - 2016-07-06 08:30 +0200
Re: [PATCH v4 1/2] ARM: cpuidle: fix !cpuidle_ops[cpu].init case during init Daniel Lezcano <daniel.lezcano@linaro.org> - 2016-07-07 15:50 +0200
| From | Jisheng Zhang <jszhang@marvell.com> |
|---|---|
| Date | 2016-07-06 08:30 +0200 |
| Subject | [PATCH v4 1/2] ARM: cpuidle: fix !cpuidle_ops[cpu].init case during init |
| Message-ID | <rROvo-5Cf-39@gated-at.bofh.it> |
Let's assume cpuidle_ops exists but it doesn't implement the according
init callback, current arm_cpuidle_init() will return success to its
caller, but in fact it should return -EOPNOTSUPP.
Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
---
arch/arm/kernel/cpuidle.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/arch/arm/kernel/cpuidle.c b/arch/arm/kernel/cpuidle.c
index a44b268e..2129b29 100644
--- a/arch/arm/kernel/cpuidle.c
+++ b/arch/arm/kernel/cpuidle.c
@@ -92,7 +92,8 @@ static const struct cpuidle_ops *__init arm_cpuidle_get_ops(const char *method)
* process.
*
* Return 0 on sucess, -ENOENT if no 'enable-method' is defined, -EOPNOTSUPP if
- * no cpuidle_ops is registered for the 'enable-method'.
+ * no cpuidle_ops is registered for the 'enable-method', or if no init callback
+ * is defined.
*/
static int __init arm_cpuidle_read_ops(struct device_node *dn, int cpu)
{
@@ -110,6 +111,12 @@ static int __init arm_cpuidle_read_ops(struct device_node *dn, int cpu)
return -EOPNOTSUPP;
}
+ if (!ops->init) {
+ pr_warn("cpuidle_ops '%s': no init callback\n",
+ enable_method);
+ return -EOPNOTSUPP;
+ }
+
cpuidle_ops[cpu] = *ops; /* structure copy */
pr_notice("cpuidle: enable-method property '%s'"
@@ -129,7 +136,8 @@ static int __init arm_cpuidle_read_ops(struct device_node *dn, int cpu)
* Returns:
* 0 on success,
* -ENODEV if it fails to find the cpu node in the device tree,
- * -EOPNOTSUPP if it does not find a registered cpuidle_ops for this cpu,
+ * -EOPNOTSUPP if it does not find a registered and valid cpuidle_ops for
+ * this cpu,
* -ENOENT if it fails to find an 'enable-method' property,
* -ENXIO if the HW reports a failure or a misconfiguration,
* -ENOMEM if the HW report an memory allocation failure
@@ -143,7 +151,7 @@ int __init arm_cpuidle_init(int cpu)
return -ENODEV;
ret = arm_cpuidle_read_ops(cpu_node, cpu);
- if (!ret && cpuidle_ops[cpu].init)
+ if (!ret)
ret = cpuidle_ops[cpu].init(cpu_node, cpu);
of_node_put(cpu_node);
--
2.8.1
[toc] | [next] | [standalone]
| From | Daniel Lezcano <daniel.lezcano@linaro.org> |
|---|---|
| Date | 2016-07-07 15:50 +0200 |
| Subject | Re: [PATCH v4 1/2] ARM: cpuidle: fix !cpuidle_ops[cpu].init case during init |
| Message-ID | <rShQK-7yA-19@gated-at.bofh.it> |
| In reply to | #1437469 |
On Wed, Jul 06, 2016 at 02:15:54PM +0800, Jisheng Zhang wrote: > Let's assume cpuidle_ops exists but it doesn't implement the according > init callback, current arm_cpuidle_init() will return success to its > caller, but in fact it should return -EOPNOTSUPP. > > Signed-off-by: Jisheng Zhang <jszhang@marvell.com> > --- Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web