[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