linux/arch/powerpc/platforms
Tyrel Datwyler 087ff6a5ae powerpc/pseries: Fix "OF: ERROR: Bad of_node_put() on /cpus" during DLPAR
Commit 215ee763f8 ("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 215ee763f8 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: 215ee763f8 ("powerpc: pseries: remove dlpar_attach_node dependency on full path")
Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
Reported-by: Abdul Haleem <abdhalee@linux.vnet.ibm.com>
[mpe: Add a comment in the code and frob the change log slightly]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2017-09-21 19:30:53 +10:00
..
4xx powerpc/4xx: Constify cpm_suspend_ops 2017-08-31 19:56:33 +10:00
8xx powerpc/8xx: Fix two CONFIG_8xx left behind 2017-08-14 21:57:33 +10:00
40x powerpc updates for 4.10 2016-12-16 09:26:42 -08:00
44x powerpc/44x: Move 44x machine check handlers into platforms/44x 2017-08-10 23:31:24 +10:00
52xx powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
82xx powerpc/e8248e: Select PHYLIB only if NETDEVICES is enabled 2016-09-24 23:59:47 -05:00
83xx powerpc/83xx: Use sizeof correct type when ioremapping 2017-08-31 14:26:05 +10:00
85xx powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
86xx powerpc: Add struct smp_ops_t.cause_nmi_ipi operation 2017-04-28 21:02:25 +10:00
512x powerpc/512x: Constify clk_div_tables 2017-08-31 14:26:06 +10:00
amigaone powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
cell powerpc updates for 4.14 2017-09-07 10:15:40 -07:00
chrp powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
embedded6xx powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
maple powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
pasemi powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
powermac powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
powernv powerpc/powernv: Clear LPCR[PECE1] via stop-api only for deep state offline 2017-09-20 13:30:09 +10:00
ps3 powerpc: Squash lines for simple wrapper functions 2017-08-31 14:26:42 +10:00
pseries powerpc/pseries: Fix "OF: ERROR: Bad of_node_put() on /cpus" during DLPAR 2017-09-21 19:30:53 +10:00
fsl_uli1575.c of/irq: Refactor interrupt-map parsing 2013-10-24 11:43:04 +01:00
Kconfig powerpc/book3s64: Move PPC_DT_CPU_FTRs and enable it by default 2017-06-08 20:42:57 +10:00
Kconfig.cputype powerpc/8xx: remove CONFIG_8xx 2017-08-10 23:32:17 +10:00
Makefile powerpc/4xx: Create 4xx pseudo-platform in platforms/4xx 2017-08-10 23:31:30 +10:00