Re: [PATCH v3 4/5] powerpc/xive: defer setting cause_ipi until IPI init succeeds
Cédric Le Goater <[email protected]> Wed, 29 Jul 2026 19:34:59 +0200
| Newsgroups | org.ozlabs.lists.linuxppc-dev,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/27/26 12:42, Gou Hao wrote: > xive_smp_probe() currently assigns smp_ops->cause_ipi = xive_cause_ipi > before calling xive_init_ipis() and xive_setup_cpu_ipi(). If either > call fails, the platform probe handler returns early but cause_ipi > remains pointing to xive_cause_ipi -- which accesses per-cpu IPI data > (xc->ipi_data) that was never properly initialized, leading to > a WARN and a crash. > > Move the cause_ipi assignment to after both calls succeed, so that > smp_ops->cause_ipi is only set when the IPI subsystem is fully > initialized. > > Signed-off-by: Gou Hao <[email protected]> > Suggested-by: Cédric Le Goater <[email protected]> > Reviewed-by: jiazhenyuan <[email protected]> > --- > arch/powerpc/sysdev/xive/common.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c > index bbe7c85274ea..8ae088632337 100644 > --- a/arch/powerpc/sysdev/xive/common.c > +++ b/arch/powerpc/sysdev/xive/common.c > @@ -1269,15 +1269,19 @@ int __init xive_smp_probe(void) > { > int ret; > > - smp_ops->cause_ipi = xive_cause_ipi; > - > /* Register the IPI */ > ret = xive_init_ipis(); > if (ret < 0) > return ret; > > /* Allocate and setup IPI for the boot CPU */ > - return xive_setup_cpu_ipi(smp_processor_id()); > + ret = xive_setup_cpu_ipi(smp_processor_id()); > + if (ret < 0) > + return ret; > + > + smp_ops->cause_ipi = xive_cause_ipi; > + > + return 0; > } > > #endif /* CONFIG_SMP */ Reviewed-by: Cédric Le Goater <[email protected]> Thanks, C.