To: Eric W. Biederman <ebiederm@...>, Linux Kernel <linux-kernel@...>
Cc: Rafael J. Wysocki <rjw@...>, Brown, Len <len.brown@...>, Linus Torvalds <torvalds@...>, Andrew Morton <akpm@...>, Thomas Gleixner <tglx@...>, <simon.derr@...>, Alexey Starikovskiy <astarikovskiy@...>
Reposting this.. somehow left LKML off the TO/CC list.. (thanks Andrew!)
Eric W. Biederman wrote:
..
Mmm... thanks for the tour.
The cpu hotplug code appears to take great precautions against internal races
(dunno if it succeeds or not, though), but the correspond code in native_smp_send_stop()
looks a bit iffy by comparison. I wonder if that's where it gets stuck?
static void native_smp_send_stop(void)
{
/* Don't deadlock on the call lock in panic */
int nolock = !spin_trylock(&call_lock);
unsigned long flags;
local_irq_save(flags);
__smp_call_function(stop_this_cpu, NULL, 0, 0);
if (!nolock)
spin_unlock(&call_lock);
disable_local_APIC();
local_irq_restore(flags);
}
So basically, it tries to avoid races by grabbing the call_lock,
but then ignores that lock and proceeds anyway. Recipe for a race?
-ml
-