[PATCH v2] powerpc/pseries: dynamically added OF nodes need to call of_node_init

Nathan Fontenot nfont at linux.vnet.ibm.com
Fri Jul 11 05:59:21 EST 2014


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: stable at vger.kernel.org
> Signed-off-by: Tyrel Datwyler <tyreld at linux.vnet.ibm.com>

Acked-by: Nathan Fontenot <nfont at 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)) {
> 



More information about the Linuxppc-dev mailing list