Skip to content

Commit fffe7f5

Browse files
Niklas Casselbroonie
authored andcommitted
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: 0caecaa ("regulator: qcom_spmi: Add support for SAW") Signed-off-by: Niklas Cassel <[email protected]> Signed-off-by: Mark Brown <[email protected]>
1 parent cf18fd0 commit fffe7f5

1 file changed

Lines changed: 20 additions & 12 deletions

File tree

drivers/regulator/qcom_spmi-regulator.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1752,7 +1752,8 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
17521752
const char *name;
17531753
struct device *dev = &pdev->dev;
17541754
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;
17561757
int ret, lenp;
17571758
struct list_head *vreg_list;
17581759

@@ -1780,10 +1781,13 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
17801781

17811782
for (reg = match->data; reg->name; reg++) {
17821783

1783-
if (saw_regmap && \
1784-
of_find_property(of_find_node_by_name(node, reg->name), \
1785-
"qcom,saw-slave", &lenp)) {
1786-
continue;
1784+
if (saw_regmap) {
1785+
reg_node = of_get_child_by_name(node, reg->name);
1786+
reg_prop = of_find_property(reg_node, "qcom,saw-slave",
1787+
&lenp);
1788+
of_node_put(reg_node);
1789+
if (reg_prop)
1790+
continue;
17871791
}
17881792

17891793
vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
@@ -1816,13 +1820,17 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
18161820
if (ret)
18171821
continue;
18181822

1819-
if (saw_regmap && \
1820-
of_find_property(of_find_node_by_name(node, reg->name), \
1821-
"qcom,saw-leader", &lenp)) {
1822-
spmi_saw_ops = *(vreg->desc.ops);
1823-
spmi_saw_ops.set_voltage_sel = \
1824-
spmi_regulator_saw_set_voltage;
1825-
vreg->desc.ops = &spmi_saw_ops;
1823+
if (saw_regmap) {
1824+
reg_node = of_get_child_by_name(node, reg->name);
1825+
reg_prop = of_find_property(reg_node, "qcom,saw-leader",
1826+
&lenp);
1827+
of_node_put(reg_node);
1828+
if (reg_prop) {
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+
}
18261834
}
18271835

18281836
config.dev = dev;

0 commit comments

Comments
 (0)