ppc64: Fix CPU hot unplug deadlock
PATCH 1/1 ppc64: Fix CPU hot unplug deadlock
Hi !
My RTAS locking fixes incorrectly added a spinlock around the function used to stop a CPU, that function never returns, thus the lock becomes stale. The correct fix is to disable interrupts instead (the RTAS params beeing per-CPU, this should be safe enough)
Ben.
arch/ppc64/kernel/rtas.c +2 -3
@@ -504,9 +504,9 @@void rtas_stop_self (void ) {struct rtas_args *rtas_args = &(get_paca ()->xRtas); -unsigned long s; -spin_lock_irqsave (&rtas.lock, s); +local_irq_disable (s); + rtas_args->token =rtas_token ("stop-self" );BUG_ON (rtas_args->token ==RTAS_UNKNOWN_SERVICE ); rtas_args->nargs =0 ;
@@ -516,7 +516,6 @@printk ("%u %u Ready to die...\n" ,smp_processor_id (),hard_smp_processor_id ());enter_rtas ((void *)__pa (rtas_args)); -spin_unlock_irqrestore (&rtas.lock, s);panic ("Alas, I survived.\n" ); }