提交 6ec4836f 编写于 作者: L Liang He 提交者: Michael Ellerman

powerpc/pseries: Add missing of_node_put()s in hotplug-cpu.c

In pseries_cpuhp_cache_use_count() and pseries_cpuhp_detach_nodes(),
we need carefully hold the reference returned by
of_find_next_cache_node() and use it to call of_node_put() to keep
refcount balance.
Signed-off-by: NLiang He <windhl@126.com>
Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220621111701.4082889-1-windhl@126.com
上级 d208d8c2
......@@ -619,17 +619,21 @@ static ssize_t dlpar_cpu_add(u32 drc_index)
static unsigned int pseries_cpuhp_cache_use_count(const struct device_node *cachedn)
{
unsigned int use_count = 0;
struct device_node *dn;
struct device_node *dn, *tn;
WARN_ON(!of_node_is_type(cachedn, "cache"));
for_each_of_cpu_node(dn) {
if (of_find_next_cache_node(dn) == cachedn)
tn = of_find_next_cache_node(dn);
of_node_put(tn);
if (tn == cachedn)
use_count++;
}
for_each_node_by_type(dn, "cache") {
if (of_find_next_cache_node(dn) == cachedn)
tn = of_find_next_cache_node(dn);
of_node_put(tn);
if (tn == cachedn)
use_count++;
}
......@@ -649,10 +653,13 @@ static int pseries_cpuhp_detach_nodes(struct device_node *cpudn)
dn = cpudn;
while ((dn = of_find_next_cache_node(dn))) {
if (pseries_cpuhp_cache_use_count(dn) > 1)
if (pseries_cpuhp_cache_use_count(dn) > 1) {
of_node_put(dn);
break;
}
ret = of_changeset_detach_node(&cs, dn);
of_node_put(dn);
if (ret)
goto out;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册