Re: Patch "powerpc/pseries: Make RAS IRQ explicitly dependent on DLPAR WQ" has been added to the 4.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



<gregkh@xxxxxxxxxxxxxxxxxxx> writes:

> This is a note to let you know that I've just added the patch titled
>
>     powerpc/pseries: Make RAS IRQ explicitly dependent on DLPAR WQ
>
> to the 4.14-stable tree which can be found at:
>     http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
>
> The filename of the patch is:
>      powerpc-pseries-make-ras-irq-explicitly-dependent-on-dlpar-wq.patch
> and it can be found in the queue-4.14 subdirectory.
>
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <stable@xxxxxxxxxxxxxxx> know about it.

Did someone request this one?

I didn't Cc it to stable because I wasn't confident of the testing it'd
had, and in fact we found another related bug recently.

So if you take this you probably also want:

  c9dccf1d074a ("powerpc/pseries: Enable RAS hotplug events later")


But note that commit is only ~2-3 weeks old, so again I can't vouch 100%
for it's bullet-proof-ness.

cheers

> From foo@baz Wed Feb 28 16:23:28 CET 2018
> From: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
> Date: Mon, 8 Jan 2018 14:54:32 +1100
> Subject: powerpc/pseries: Make RAS IRQ explicitly dependent on DLPAR WQ
>
> From: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
>
>
> [ Upstream commit e2d5915293ffdff977ddcfc12b817b08c53ffa7a ]
>
> The hotplug code uses its own workqueue to handle IRQ requests
> (pseries_hp_wq), however that workqueue is initialized after
> init_ras_IRQ(). That can lead to a kernel panic if any hotplug
> interrupts fire after init_ras_IRQ() but before pseries_hp_wq is
> initialised. eg:
>
>   UDP-Lite hash table entries: 2048 (order: 0, 65536 bytes)
>   NET: Registered protocol family 1
>   Unpacking initramfs...
>   (qemu) object_add memory-backend-ram,id=mem1,size=10G
>   (qemu) device_add pc-dimm,id=dimm1,memdev=mem1
>   Unable to handle kernel paging request for data at address 0xf94d03007c421378
>   Faulting instruction address: 0xc00000000012d744
>   Oops: Kernel access of bad area, sig: 11 [#1]
>   LE SMP NR_CPUS=2048 NUMA pSeries
>   Modules linked in:
>   CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.15.0-rc2-ziviani+ #26
>   task:         (ptrval) task.stack:         (ptrval)
>   NIP:  c00000000012d744 LR: c00000000012d744 CTR: 0000000000000000
>   REGS:         (ptrval) TRAP: 0380   Not tainted  (4.15.0-rc2-ziviani+)
>   MSR:  8000000000009033 <SF,EE,ME,IR,DR,RI,LE>  CR: 28088042  XER: 20040000
>   CFAR: c00000000012d3c4 SOFTE: 0
>   ...
>   NIP [c00000000012d744] __queue_work+0xd4/0x5c0
>   LR [c00000000012d744] __queue_work+0xd4/0x5c0
>   Call Trace:
>   [c0000000fffefb90] [c00000000012d744] __queue_work+0xd4/0x5c0 (unreliable)
>   [c0000000fffefc70] [c00000000012dce4] queue_work_on+0xb4/0xf0
>
> This commit makes the RAS IRQ registration explicitly dependent on the
> creation of the pseries_hp_wq.
>
> Reported-by: Min Deng <mdeng@xxxxxxxxxx>
> Reported-by: Daniel Henrique Barboza <danielhb@xxxxxxxxxxxxxxxxxx>
> Tested-by: Jose Ricardo Ziviani <joserz@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
> Reviewed-by: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Sasha Levin <alexander.levin@xxxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> ---
>  arch/powerpc/platforms/pseries/dlpar.c   |   21 ++++++++++++++++++---
>  arch/powerpc/platforms/pseries/pseries.h |    2 ++
>  arch/powerpc/platforms/pseries/ras.c     |    3 ++-
>  3 files changed, 22 insertions(+), 4 deletions(-)
>
> --- a/arch/powerpc/platforms/pseries/dlpar.c
> +++ b/arch/powerpc/platforms/pseries/dlpar.c
> @@ -586,11 +586,26 @@ static ssize_t dlpar_show(struct class *
>  
>  static CLASS_ATTR_RW(dlpar);
>  
> -static int __init pseries_dlpar_init(void)
> +int __init dlpar_workqueue_init(void)
>  {
> +	if (pseries_hp_wq)
> +		return 0;
> +
>  	pseries_hp_wq = alloc_workqueue("pseries hotplug workqueue",
> -					WQ_UNBOUND, 1);
> +			WQ_UNBOUND, 1);
> +
> +	return pseries_hp_wq ? 0 : -ENOMEM;
> +}
> +
> +static int __init dlpar_sysfs_init(void)
> +{
> +	int rc;
> +
> +	rc = dlpar_workqueue_init();
> +	if (rc)
> +		return rc;
> +
>  	return sysfs_create_file(kernel_kobj, &class_attr_dlpar.attr);
>  }
> -machine_device_initcall(pseries, pseries_dlpar_init);
> +machine_device_initcall(pseries, dlpar_sysfs_init);
>  
> --- a/arch/powerpc/platforms/pseries/pseries.h
> +++ b/arch/powerpc/platforms/pseries/pseries.h
> @@ -98,4 +98,6 @@ static inline unsigned long cmo_get_page
>  	return CMO_PageSize;
>  }
>  
> +int dlpar_workqueue_init(void);
> +
>  #endif /* _PSERIES_PSERIES_H */
> --- a/arch/powerpc/platforms/pseries/ras.c
> +++ b/arch/powerpc/platforms/pseries/ras.c
> @@ -69,7 +69,8 @@ static int __init init_ras_IRQ(void)
>  	/* Hotplug Events */
>  	np = of_find_node_by_path("/event-sources/hot-plug-events");
>  	if (np != NULL) {
> -		request_event_sources_irqs(np, ras_hotplug_interrupt,
> +		if (dlpar_workqueue_init() == 0)
> +			request_event_sources_irqs(np, ras_hotplug_interrupt,
>  					   "RAS_HOTPLUG");
>  		of_node_put(np);
>  	}
>
>
> Patches currently in stable-queue which might be from mpe@xxxxxxxxxxxxxx are
>
> queue-4.14/powerpc-pseries-make-ras-irq-explicitly-dependent-on-dlpar-wq.patch



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]