• Tyrel Datwyler's avatar
    powerpc/pseries: Fix "OF: ERROR: Bad of_node_put() on /cpus" during DLPAR · 087ff6a5
    Tyrel Datwyler authored
    Commit 215ee763 ("powerpc: pseries: remove dlpar_attach_node
    dependency on full path") reworked dlpar_attach_node() to no longer
    look up the parent node "/cpus", but instead to have the parent node
    passed by the caller in the function parameter list.
    
    As a result dlpar_attach_node() is no longer responsible for freeing
    the reference to the parent node. However, commit 215ee763 failed
    to remove the of_node_put(parent) call in dlpar_attach_node(), or to
    take into account that the reference to the parent in the caller
    dlpar_cpu_add() needs to be held until after dlpar_attach_node()
    returns.
    
    As a result doing repeated cpu add/remove dlpar operations will
    eventually result in the following error:
    
      OF: ERROR: Bad of_node_put() on /cpus
      CPU: 0 PID: 10896 Comm: drmgr Not tainted 4.13.0-autotest #1
      Call Trace:
       dump_stack+0x15c/0x1f8 (unreliable)
       of_node_release+0x1a4/0x1c0
       kobject_put+0x1a8/0x310
       kobject_del+0xbc/0xf0
       __of_detach_node_sysfs+0x144/0x210
       of_detach_node+0xf0/0x180
       dlpar_detach_node+0xc4/0x120
       dlpar_cpu_remove+0x280/0x560
       dlpar_cpu_release+0xbc/0x1b0
       arch_cpu_release+0x6c/0xb0
       cpu_release_store+0xa0/0x100
       dev_attr_store+0x68/0xa0
       sysfs_kf_write+0xa8/0xf0
       kernfs_fop_write+0x2cc/0x400
       __vfs_write+0x5c/0x340
       vfs_write+0x1a8/0x3d0
       SyS_write+0xa8/0x1a0
       system_call+0x58/0x6c
    
    Fix the issue by removing the of_node_put(parent) call from
    dlpar_attach_node(), and ensuring that the reference to the parent
    node is properly held and released by the caller dlpar_cpu_add().
    
    Fixes: 215ee763 ("powerpc: pseries: remove dlpar_attach_node dependency on full path")
    Signed-off-by: default avatarTyrel Datwyler <tyreld@linux.vnet.ibm.com>
    Reported-by: default avatarAbdul Haleem <abdhalee@linux.vnet.ibm.com>
    [mpe: Add a comment in the code and frob the change log slightly]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    087ff6a5
dlpar.c 12.6 KB