soc/tegra: pmc: fix child-node lookup

Message ID 20171115094458.31666-1-johan@kernel.org
State New
Headers show
Series
  • soc/tegra: pmc: fix child-node lookup
Related show

Commit Message

Johan Hovold Nov. 15, 2017, 9:44 a.m.
Fix child-node lookup during probe, which ended up searching the whole
device tree depth-first starting at the parent rather than just matching
on its children.

To make things worse, the parent pmc node could end up being prematurely
freed as of_find_node_by_name() drops a reference to its first argument.

Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
Cc: stable <stable@vger.kernel.org>     # 4.0
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/soc/tegra/pmc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Mikko Perttunen Nov. 16, 2017, 11:40 a.m. | #1
On 15.11.2017 11:44, Johan Hovold wrote:
> Fix child-node lookup during probe, which ended up searching the whole
> device tree depth-first starting at the parent rather than just matching
> on its children.
>
> To make things worse, the parent pmc node could end up being prematurely
> freed as of_find_node_by_name() drops a reference to its first argument.
>
> Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> Cc: stable <stable@vger.kernel.org>     # 4.0
> Cc: Mikko Perttunen <mperttunen@nvidia.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
>  drivers/soc/tegra/pmc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
> index 0453ff6839a7..7e9ef3431bea 100644
> --- a/drivers/soc/tegra/pmc.c
> +++ b/drivers/soc/tegra/pmc.c
> @@ -1321,7 +1321,7 @@ static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
>  	if (!pmc->soc->has_tsense_reset)
>  		return;
>
> -	np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
> +	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
>  	if (!np) {
>  		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
>  		return;
>

Good find!

Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index 0453ff6839a7..7e9ef3431bea 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -1321,7 +1321,7 @@  static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
 	if (!pmc->soc->has_tsense_reset)
 		return;
 
-	np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
+	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
 	if (!np) {
 		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
 		return;