lkml.org 
[lkml]   [2002]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subjectsmp_call_function() deadlock during boot
smp_call_function() gets called before cpu_online_map is initialized.
In order to tolerate this behavior the following appears to be necessary.
This method of resolving the issue has a precedent in smp_IPI_allbutself().

Cheers,
Bill


===== arch/i386/kernel/smp.c 1.17 vs edited =====
--- 1.17/arch/i386/kernel/smp.c Mon May 20 10:51:17 2002
+++ edited/arch/i386/kernel/smp.c Fri Jun 21 19:37:11 2002
@@ -567,9 +567,9 @@
*/
{
struct call_data_struct data;
- int cpus = num_online_cpus()-1;
+ int cpus = num_online_cpus();

- if (!cpus)
+ if (cpus <= 1)
return 0;

data.func = func;
@@ -586,11 +586,11 @@
send_IPI_allbutself(CALL_FUNCTION_VECTOR);

/* Wait for response */
- while (atomic_read(&data.started) != cpus)
+ while (atomic_read(&data.started) != cpus - 1)
barrier();

if (wait)
- while (atomic_read(&data.finished) != cpus)
+ while (atomic_read(&data.finished) != cpus - 1)
barrier();
spin_unlock(&call_lock);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:26    [W:0.024 / U:25.136 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site