diff options
Diffstat (limited to 'arch/powerpc/sysdev/xive')
| -rw-r--r-- | arch/powerpc/sysdev/xive/Kconfig | 1 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/xive/common.c | 8 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/xive/spapr.c | 4 | 
3 files changed, 13 insertions, 0 deletions
| diff --git a/arch/powerpc/sysdev/xive/Kconfig b/arch/powerpc/sysdev/xive/Kconfig index 3e3e25b5e30d..70ee976e1de0 100644 --- a/arch/powerpc/sysdev/xive/Kconfig +++ b/arch/powerpc/sysdev/xive/Kconfig @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  config PPC_XIVE  	bool  	default n diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c index f387318678b9..a3b8d7d1316e 100644 --- a/arch/powerpc/sysdev/xive/common.c +++ b/arch/powerpc/sysdev/xive/common.c @@ -1402,6 +1402,14 @@ void xive_teardown_cpu(void)  	if (xive_ops->teardown_cpu)  		xive_ops->teardown_cpu(cpu, xc); + +#ifdef CONFIG_SMP +	/* Get rid of IPI */ +	xive_cleanup_cpu_ipi(cpu, xc); +#endif + +	/* Disable and free the queues */ +	xive_cleanup_cpu_queues(cpu, xc);  }  void xive_kexec_teardown_cpu(int secondary) diff --git a/arch/powerpc/sysdev/xive/spapr.c b/arch/powerpc/sysdev/xive/spapr.c index f24a70bc6855..d9c4c9366049 100644 --- a/arch/powerpc/sysdev/xive/spapr.c +++ b/arch/powerpc/sysdev/xive/spapr.c @@ -431,7 +431,11 @@ static int xive_spapr_get_ipi(unsigned int cpu, struct xive_cpu *xc)  static void xive_spapr_put_ipi(unsigned int cpu, struct xive_cpu *xc)  { +	if (!xc->hw_ipi) +		return; +  	xive_irq_bitmap_free(xc->hw_ipi); +	xc->hw_ipi = 0;  }  #endif /* CONFIG_SMP */ |