Commit 8ea5648c authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] x86_64: Don't wait on panic

Don't wait for a response from other CPUs on panic
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7574828b
...@@ -305,13 +305,15 @@ static void __smp_call_function (void (*func) (void *info), void *info, ...@@ -305,13 +305,15 @@ static void __smp_call_function (void (*func) (void *info), void *info,
/* Send a message to all other CPUs and wait for them to respond */ /* Send a message to all other CPUs and wait for them to respond */
send_IPI_allbutself(CALL_FUNCTION_VECTOR); send_IPI_allbutself(CALL_FUNCTION_VECTOR);
if (!wait)
return;
/* Wait for response */ /* Wait for response */
while (atomic_read(&data.started) != cpus) while (atomic_read(&data.started) != cpus)
barrier(); barrier();
if (wait) while (atomic_read(&data.finished) != cpus)
while (atomic_read(&data.finished) != cpus) barrier();
barrier();
} }
/* /*
...@@ -361,11 +363,10 @@ void smp_send_stop(void) ...@@ -361,11 +363,10 @@ void smp_send_stop(void)
int nolock = 0; int nolock = 0;
/* Don't deadlock on the call lock in panic */ /* Don't deadlock on the call lock in panic */
if (!spin_trylock(&call_lock)) { if (!spin_trylock(&call_lock)) {
udelay(100);
/* ignore locking because we have paniced anyways */ /* ignore locking because we have paniced anyways */
nolock = 1; nolock = 1;
} }
__smp_call_function(smp_really_stop_cpu, NULL, 1, 0); __smp_call_function(smp_really_stop_cpu, NULL, 0, 0);
if (!nolock) if (!nolock)
spin_unlock(&call_lock); spin_unlock(&call_lock);
smp_stop_cpu(); smp_stop_cpu();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment