diff options
Diffstat (limited to 'arch/x86/xen/spinlock.c')
| -rw-r--r-- | arch/x86/xen/spinlock.c | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c index 799f4eba0a62..043c73dfd2c9 100644 --- a/arch/x86/xen/spinlock.c +++ b/arch/x86/xen/spinlock.c @@ -93,10 +93,20 @@ void xen_init_lock_cpu(int cpu)  void xen_uninit_lock_cpu(int cpu)  { +	int irq; +  	if (!xen_pvspin)  		return; -	unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL); +	/* +	 * When booting the kernel with 'mitigations=auto,nosmt', the secondary +	 * CPUs are not activated, and lock_kicker_irq is not initialized. +	 */ +	irq = per_cpu(lock_kicker_irq, cpu); +	if (irq == -1) +		return; + +	unbind_from_irqhandler(irq, NULL);  	per_cpu(lock_kicker_irq, cpu) = -1;  	kfree(per_cpu(irq_name, cpu));  	per_cpu(irq_name, cpu) = NULL; | 
