diff options
author | Niklas Cassel <niklas.cassel@linaro.org> | 2018-07-16 09:32:51 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-07-20 12:40:46 -0400 |
commit | fffe7f52eb5db41eedadba9a8038e982dcfaee0c (patch) | |
tree | 39b48bf3971fbcffbab345c6e8c1fd77e52e67d9 | |
parent | cf18fd01466d59263c615165341684a055206dd5 (diff) |
regulator: qcom_spmi: Fix warning Bad of_node_put()
For of_find_node_by_name(), you typically pass what the previous call
returned. Therefore, of_find_node_by_name() increases the refcount of
the returned node, and decreases the refcount of the node passed as the
first argument.
of_find_node_by_name() is incorrectly used, and produces a warning.
Fix the warning by using the more suitable function
of_get_child_by_name().
Also add a missing of_node_put() for the returned value, since this was
previously being leaked.
OF: ERROR: Bad of_node_put() on /soc/qcom,spmi@400f000/pmic@3/regulators
CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W 4.18.0-rc4-00223-gefd7b360b70e #12
Hardware name: Qualcomm Technologies, Inc. DB820c (DT)
Call trace:
dump_backtrace+0x0/0x1a8
show_stack+0x14/0x20
dump_stack+0x90/0xb4
of_node_release+0x74/0x78
kobject_put+0x90/0x1f0
of_node_put+0x14/0x20
of_find_node_by_name+0x80/0xd8
qcom_spmi_regulator_probe+0x30c/0x508
Fixes: 0caecaa87202 ("regulator: qcom_spmi: Add support for SAW")
Signed-off-by: Niklas Cassel <niklas.cassel@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/regulator/qcom_spmi-regulator.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/drivers/regulator/qcom_spmi-regulator.c b/drivers/regulator/qcom_spmi-regulator.c index 9817f1a75342..4cc14c65d86b 100644 --- a/drivers/regulator/qcom_spmi-regulator.c +++ b/drivers/regulator/qcom_spmi-regulator.c | |||
@@ -1752,7 +1752,8 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev) | |||
1752 | const char *name; | 1752 | const char *name; |
1753 | struct device *dev = &pdev->dev; | 1753 | struct device *dev = &pdev->dev; |
1754 | struct device_node *node = pdev->dev.of_node; | 1754 | struct device_node *node = pdev->dev.of_node; |
1755 | struct device_node *syscon; | 1755 | struct device_node *syscon, *reg_node; |
1756 | struct property *reg_prop; | ||
1756 | int ret, lenp; | 1757 | int ret, lenp; |
1757 | struct list_head *vreg_list; | 1758 | struct list_head *vreg_list; |
1758 | 1759 | ||
@@ -1780,10 +1781,13 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev) | |||
1780 | 1781 | ||
1781 | for (reg = match->data; reg->name; reg++) { | 1782 | for (reg = match->data; reg->name; reg++) { |
1782 | 1783 | ||
1783 | if (saw_regmap && \ | 1784 | if (saw_regmap) { |
1784 | of_find_property(of_find_node_by_name(node, reg->name), \ | 1785 | reg_node = of_get_child_by_name(node, reg->name); |
1785 | "qcom,saw-slave", &lenp)) { | 1786 | reg_prop = of_find_property(reg_node, "qcom,saw-slave", |
1786 | continue; | 1787 | &lenp); |
1788 | of_node_put(reg_node); | ||
1789 | if (reg_prop) | ||
1790 | continue; | ||
1787 | } | 1791 | } |
1788 | 1792 | ||
1789 | vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); | 1793 | vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); |
@@ -1816,13 +1820,17 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev) | |||
1816 | if (ret) | 1820 | if (ret) |
1817 | continue; | 1821 | continue; |
1818 | 1822 | ||
1819 | if (saw_regmap && \ | 1823 | if (saw_regmap) { |
1820 | of_find_property(of_find_node_by_name(node, reg->name), \ | 1824 | reg_node = of_get_child_by_name(node, reg->name); |
1821 | "qcom,saw-leader", &lenp)) { | 1825 | reg_prop = of_find_property(reg_node, "qcom,saw-leader", |
1822 | spmi_saw_ops = *(vreg->desc.ops); | 1826 | &lenp); |
1823 | spmi_saw_ops.set_voltage_sel = \ | 1827 | of_node_put(reg_node); |
1824 | spmi_regulator_saw_set_voltage; | 1828 | if (reg_prop) { |
1825 | vreg->desc.ops = &spmi_saw_ops; | 1829 | spmi_saw_ops = *(vreg->desc.ops); |
1830 | spmi_saw_ops.set_voltage_sel = | ||
1831 | spmi_regulator_saw_set_voltage; | ||
1832 | vreg->desc.ops = &spmi_saw_ops; | ||
1833 | } | ||
1826 | } | 1834 | } |
1827 | 1835 | ||
1828 | config.dev = dev; | 1836 | config.dev = dev; |