On 08/15/2013 12:23 AM, Tyrel Datwyler wrote:
> 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: Tyrel Datwyler <tyr...@linux.vnet.ibm.com>

Acked-by: Nathan Fontenot <nf...@linux.vnet.ibm.com>

> ---
>  arch/powerpc/platforms/pseries/dlpar.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/pseries/dlpar.c 
> b/arch/powerpc/platforms/pseries/dlpar.c
> index a1a7b9a..c855233 100644
> --- a/arch/powerpc/platforms/pseries/dlpar.c
> +++ b/arch/powerpc/platforms/pseries/dlpar.c
> @@ -83,6 +83,9 @@ static struct device_node *dlpar_parse_cc_node(struct 
> cc_workarea *ccwa)
>               return NULL;
>       }
>  
> +     of_node_set_flag(dn, OF_DYNAMIC);
> +     kref_init(&dn->kref);
> +
>       return dn;
>  }
>  
> @@ -256,8 +259,6 @@ int dlpar_attach_node(struct device_node *dn)
>  {
>       int rc;
>  
> -     of_node_set_flag(dn, OF_DYNAMIC);
> -     kref_init(&dn->kref);
>       dn->parent = derive_parent(dn->full_name);
>       if (!dn->parent)
>               return -ENOMEM;
> 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to