On 07/10/2014 01:50 PM, Tyrel Datwyler wrote:
> Commit 75b57ecf9 refactored device tree nodes to use kobjects such that they
> can be exposed via /sysfs. A secondary commit 0829f6d1f furthered this rework
> by moving the kobect initialization logic out of of_node_add into its own
> of_node_init function. The inital commit removed the existing kref_init calls
> in the pseries dlpar code with the assumption kobject initialization would
> occur in of_node_add. The second commit had the side effect of triggering a
> BUG_ON during DLPAR, migration and suspend/resume operations as a result of
> dynamically added nodes being uninitialized.
> 
> This patch fixes this by adding of_node_init calls in place of the previously
> removed kref_init calls.
> 
> Fixes: 0829f6d1f69e ("of: device_node kobject lifecycle fixes")
> Cc: sta...@vger.kernel.org
> Signed-off-by: Tyrel Datwyler <tyr...@linux.vnet.ibm.com>

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

> ---
> V2:
>  - included stable kernel list on Cc per comment by mpe
> 
>  arch/powerpc/platforms/pseries/dlpar.c    | 1 +
>  arch/powerpc/platforms/pseries/reconfig.c | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/arch/powerpc/platforms/pseries/dlpar.c 
> b/arch/powerpc/platforms/pseries/dlpar.c
> index 022b38e..2d0b4d6 100644
> --- a/arch/powerpc/platforms/pseries/dlpar.c
> +++ b/arch/powerpc/platforms/pseries/dlpar.c
> @@ -86,6 +86,7 @@ static struct device_node *dlpar_parse_cc_node(struct 
> cc_workarea *ccwa,
>       }
>  
>       of_node_set_flag(dn, OF_DYNAMIC);
> +     of_node_init(dn);
>  
>       return dn;
>  }
> diff --git a/arch/powerpc/platforms/pseries/reconfig.c 
> b/arch/powerpc/platforms/pseries/reconfig.c
> index 0435bb6..1c0a60d 100644
> --- a/arch/powerpc/platforms/pseries/reconfig.c
> +++ b/arch/powerpc/platforms/pseries/reconfig.c
> @@ -69,6 +69,7 @@ static int pSeries_reconfig_add_node(const char *path, 
> struct property *proplist
>  
>       np->properties = proplist;
>       of_node_set_flag(np, OF_DYNAMIC);
> +     of_node_init(np);
>  
>       np->parent = derive_parent(path);
>       if (IS_ERR(np->parent)) {
> 

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

Reply via email to