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.