Message ID | 20181129174700.16585-15-ulf.hansson@linaro.org (mailing list archive) |
---|---|
State | Deferred |
Headers | show |
Series | PM / Domains: Support hierarchical CPU arrangement (PSCI/ARM) | expand |
On 29/11/2018 18:46, Ulf Hansson wrote: > Instead of having each psci init function taking care of the of_node_put(), > let's deal with that from psci_dt_init(), as this enables a bit simpler > error path for each psci init function. > > Cc: Lina Iyer <ilina@codeaurora.org> > Co-developed-by: Lina Iyer <lina.iyer@linaro.org> > Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> > Acked-by: Mark Rutland <mark.rutland@arm.com> Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org> > --- > > Changes in v10: > - None. > > --- > drivers/firmware/psci/psci.c | 23 ++++++++++------------- > 1 file changed, 10 insertions(+), 13 deletions(-) > > diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c > index 631e20720a22..6bfa47cbd174 100644 > --- a/drivers/firmware/psci/psci.c > +++ b/drivers/firmware/psci/psci.c > @@ -609,9 +609,9 @@ static int __init psci_0_2_init(struct device_node *np) > int err; > > err = get_set_conduit_method(np); > - > if (err) > - goto out_put_node; > + return err; > + > /* > * Starting with v0.2, the PSCI specification introduced a call > * (PSCI_VERSION) that allows probing the firmware version, so > @@ -619,11 +619,7 @@ static int __init psci_0_2_init(struct device_node *np) > * can be carried out according to the specific version reported > * by firmware > */ > - err = psci_probe(); > - > -out_put_node: > - of_node_put(np); > - return err; > + return psci_probe(); > } > > /* > @@ -635,9 +631,8 @@ static int __init psci_0_1_init(struct device_node *np) > int err; > > err = get_set_conduit_method(np); > - > if (err) > - goto out_put_node; > + return err; > > pr_info("Using PSCI v0.1 Function IDs from DT\n"); > > @@ -661,9 +656,7 @@ static int __init psci_0_1_init(struct device_node *np) > psci_ops.migrate = psci_migrate; > } > > -out_put_node: > - of_node_put(np); > - return err; > + return 0; > } > > static const struct of_device_id psci_of_match[] __initconst = { > @@ -678,6 +671,7 @@ int __init psci_dt_init(void) > struct device_node *np; > const struct of_device_id *matched_np; > psci_initcall_t init_fn; > + int ret; > > np = of_find_matching_node_and_match(NULL, psci_of_match, &matched_np); > > @@ -685,7 +679,10 @@ int __init psci_dt_init(void) > return -ENODEV; > > init_fn = (psci_initcall_t)matched_np->data; > - return init_fn(np); > + ret = init_fn(np); > + > + of_node_put(np); > + return ret; > } > > #ifdef CONFIG_ACPI >
diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c index 631e20720a22..6bfa47cbd174 100644 --- a/drivers/firmware/psci/psci.c +++ b/drivers/firmware/psci/psci.c @@ -609,9 +609,9 @@ static int __init psci_0_2_init(struct device_node *np) int err; err = get_set_conduit_method(np); - if (err) - goto out_put_node; + return err; + /* * Starting with v0.2, the PSCI specification introduced a call * (PSCI_VERSION) that allows probing the firmware version, so @@ -619,11 +619,7 @@ static int __init psci_0_2_init(struct device_node *np) * can be carried out according to the specific version reported * by firmware */ - err = psci_probe(); - -out_put_node: - of_node_put(np); - return err; + return psci_probe(); } /* @@ -635,9 +631,8 @@ static int __init psci_0_1_init(struct device_node *np) int err; err = get_set_conduit_method(np); - if (err) - goto out_put_node; + return err; pr_info("Using PSCI v0.1 Function IDs from DT\n"); @@ -661,9 +656,7 @@ static int __init psci_0_1_init(struct device_node *np) psci_ops.migrate = psci_migrate; } -out_put_node: - of_node_put(np); - return err; + return 0; } static const struct of_device_id psci_of_match[] __initconst = { @@ -678,6 +671,7 @@ int __init psci_dt_init(void) struct device_node *np; const struct of_device_id *matched_np; psci_initcall_t init_fn; + int ret; np = of_find_matching_node_and_match(NULL, psci_of_match, &matched_np); @@ -685,7 +679,10 @@ int __init psci_dt_init(void) return -ENODEV; init_fn = (psci_initcall_t)matched_np->data; - return init_fn(np); + ret = init_fn(np); + + of_node_put(np); + return ret; } #ifdef CONFIG_ACPI