Commit 1578cb76 authored by Tyrel Datwyler's avatar Tyrel Datwyler Committed by Benjamin Herrenschmidt

powerpc/pseries: Do all node initialization in dlpar_parse_cc_node

Currently the OF_DYNAMIC and kref initialization for a node happens in
dlpar_attach_node. However, a node passed to dlpar_attach_node may be a tree
containing child nodes, and no initialization traversal is done on the
tree. Since the children never get their kref initialized or the OF_DYNAMIC
flag set these nodes are prevented from ever being released from memory
should they become detached. This initialization step is better done at the
time each node is allocated in dlpar_parse_cc_node.
Signed-off-by: default avatarTyrel Datwyler <tyreld@linux.vnet.ibm.com>
Acked-by: default avatarNathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent c8f5a57c
...@@ -83,6 +83,9 @@ static struct device_node *dlpar_parse_cc_node(struct cc_workarea *ccwa) ...@@ -83,6 +83,9 @@ static struct device_node *dlpar_parse_cc_node(struct cc_workarea *ccwa)
return NULL; return NULL;
} }
of_node_set_flag(dn, OF_DYNAMIC);
kref_init(&dn->kref);
return dn; return dn;
} }
...@@ -256,8 +259,6 @@ int dlpar_attach_node(struct device_node *dn) ...@@ -256,8 +259,6 @@ int dlpar_attach_node(struct device_node *dn)
{ {
int rc; int rc;
of_node_set_flag(dn, OF_DYNAMIC);
kref_init(&dn->kref);
dn->parent = derive_parent(dn->full_name); dn->parent = derive_parent(dn->full_name);
if (!dn->parent) if (!dn->parent)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment