We have already enabled interrupt sources and enabled hvpipe to received interrupts, if misc_register() fails, we will destroy the workqueue, but the HMC might send us a msg via hvpipe which will call, queue work on the workqueue which might be destroyed.
So instead, let's reverse the order of enabling set_hvpipe_sys_param(1) and in case of an error let's remove the misc dev by calling misc_deregister(). Signed-off-by: Ritesh Harjani (IBM) <[email protected]> --- arch/powerpc/platforms/pseries/papr-hvpipe.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/platforms/pseries/papr-hvpipe.c b/arch/powerpc/platforms/pseries/papr-hvpipe.c index c708869ca732..b6d0b36915c6 100644 --- a/arch/powerpc/platforms/pseries/papr-hvpipe.c +++ b/arch/powerpc/platforms/pseries/papr-hvpipe.c @@ -785,18 +785,20 @@ static int __init papr_hvpipe_init(void) if (ret) goto out_wq; - ret = set_hvpipe_sys_param(1); + ret = misc_register(&papr_hvpipe_dev); if (ret) goto out_wq; - ret = misc_register(&papr_hvpipe_dev); + ret = set_hvpipe_sys_param(1); if (ret) - goto out_wq; + goto out_misc; pr_info("hvpipe feature is enabled\n"); hvpipe_feature = true; return 0; +out_misc: + misc_deregister(&papr_hvpipe_dev); out_wq: destroy_workqueue(papr_hvpipe_wq); out: -- 2.39.5
