smp_call_function() deadlock during boot

From: William Lee Irwin III (wli@holomorphy.com)
Date: Fri Jun 21 2002 - 21:41:40 EST


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/



This archive was generated by hypermail 2b29 : Sun Jun 23 2002 - 22:00:25 EST