Message ID | 20240812-cleanup-h-of-node-put-memory-v1-4-5065a8f361d2@linaro.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 48ec68281d40ee566c2f38d36357ee7d493000c8 |
Headers | show |
Series | memory: simplify with scoped/cleanup.h for device nodes | expand |
On Mon, 12 Aug 2024 15:33:58 +0200 Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote: > Use scoped for_each_available_child_of_node_scoped() when iterating over > device nodes to make code a bit simpler. > > Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Might be worth using dev_err_probe() in here. Otherwise LGTM Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > drivers/memory/stm32-fmc2-ebi.c | 8 +------- > 1 file changed, 1 insertion(+), 7 deletions(-) > > diff --git a/drivers/memory/stm32-fmc2-ebi.c b/drivers/memory/stm32-fmc2-ebi.c > index 1c63eeacd071..7167e1da56d3 100644 > --- a/drivers/memory/stm32-fmc2-ebi.c > +++ b/drivers/memory/stm32-fmc2-ebi.c > @@ -1573,29 +1573,25 @@ static int stm32_fmc2_ebi_setup_cs(struct stm32_fmc2_ebi *ebi, > static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) > { > struct device *dev = ebi->dev; > - struct device_node *child; > bool child_found = false; > u32 bank; > int ret; > > - for_each_available_child_of_node(dev->of_node, child) { > + for_each_available_child_of_node_scoped(dev->of_node, child) { > ret = of_property_read_u32(child, "reg", &bank); > if (ret) { > dev_err(dev, "could not retrieve reg property: %d\n", > ret); > - of_node_put(child); > return ret; return dev_err_probe(dev, "could not retrieve reg property\n"); perhaps? > } > > if (bank >= FMC2_MAX_BANKS) { > dev_err(dev, "invalid reg value: %d\n", bank); > - of_node_put(child); > return -EINVAL; > } > > if (ebi->bank_assigned & BIT(bank)) { > dev_err(dev, "bank already assigned: %d\n", bank); > - of_node_put(child); > return -EINVAL; > } > > @@ -1603,7 +1599,6 @@ static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) > ret = ebi->data->check_rif(ebi, bank + 1); > if (ret) { > dev_err(dev, "bank access failed: %d\n", bank); > - of_node_put(child); > return ret; > } > } > @@ -1613,7 +1608,6 @@ static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) > if (ret) { > dev_err(dev, "setup chip select %d failed: %d\n", > bank, ret); > - of_node_put(child); > return ret; > } > } >
On 14/08/2024 18:45, Jonathan Cameron wrote: > On Mon, 12 Aug 2024 15:33:58 +0200 > Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote: > >> Use scoped for_each_available_child_of_node_scoped() when iterating over >> device nodes to make code a bit simpler. >> >> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > Might be worth using dev_err_probe() in here. Otherwise LGTM > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > >> --- >> drivers/memory/stm32-fmc2-ebi.c | 8 +------- >> 1 file changed, 1 insertion(+), 7 deletions(-) >> >> diff --git a/drivers/memory/stm32-fmc2-ebi.c b/drivers/memory/stm32-fmc2-ebi.c >> index 1c63eeacd071..7167e1da56d3 100644 >> --- a/drivers/memory/stm32-fmc2-ebi.c >> +++ b/drivers/memory/stm32-fmc2-ebi.c >> @@ -1573,29 +1573,25 @@ static int stm32_fmc2_ebi_setup_cs(struct stm32_fmc2_ebi *ebi, >> static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) >> { >> struct device *dev = ebi->dev; >> - struct device_node *child; >> bool child_found = false; >> u32 bank; >> int ret; >> >> - for_each_available_child_of_node(dev->of_node, child) { >> + for_each_available_child_of_node_scoped(dev->of_node, child) { >> ret = of_property_read_u32(child, "reg", &bank); >> if (ret) { >> dev_err(dev, "could not retrieve reg property: %d\n", >> ret); >> - of_node_put(child); >> return ret; > return dev_err_probe(dev, "could not retrieve reg property\n"); > perhaps? New patch for that... but just mind that deferred probe cannot happen here, so only part of dev_err_probe() benefits would be used. Best regards, Krzysztof
diff --git a/drivers/memory/stm32-fmc2-ebi.c b/drivers/memory/stm32-fmc2-ebi.c index 1c63eeacd071..7167e1da56d3 100644 --- a/drivers/memory/stm32-fmc2-ebi.c +++ b/drivers/memory/stm32-fmc2-ebi.c @@ -1573,29 +1573,25 @@ static int stm32_fmc2_ebi_setup_cs(struct stm32_fmc2_ebi *ebi, static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) { struct device *dev = ebi->dev; - struct device_node *child; bool child_found = false; u32 bank; int ret; - for_each_available_child_of_node(dev->of_node, child) { + for_each_available_child_of_node_scoped(dev->of_node, child) { ret = of_property_read_u32(child, "reg", &bank); if (ret) { dev_err(dev, "could not retrieve reg property: %d\n", ret); - of_node_put(child); return ret; } if (bank >= FMC2_MAX_BANKS) { dev_err(dev, "invalid reg value: %d\n", bank); - of_node_put(child); return -EINVAL; } if (ebi->bank_assigned & BIT(bank)) { dev_err(dev, "bank already assigned: %d\n", bank); - of_node_put(child); return -EINVAL; } @@ -1603,7 +1599,6 @@ static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) ret = ebi->data->check_rif(ebi, bank + 1); if (ret) { dev_err(dev, "bank access failed: %d\n", bank); - of_node_put(child); return ret; } } @@ -1613,7 +1608,6 @@ static int stm32_fmc2_ebi_parse_dt(struct stm32_fmc2_ebi *ebi) if (ret) { dev_err(dev, "setup chip select %d failed: %d\n", bank, ret); - of_node_put(child); return ret; } }
Use scoped for_each_available_child_of_node_scoped() when iterating over device nodes to make code a bit simpler. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- drivers/memory/stm32-fmc2-ebi.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)