Index: kernel/generic/src/smp/smp_call.c
===================================================================
--- kernel/generic/src/smp/smp_call.c	(revision d71331bea5345927ef31fc1551b6db3ae620837f)
+++ kernel/generic/src/smp/smp_call.c	(revision 8a64e81e7083acc3dc69cd56c21cca72dd37ca13)
@@ -54,10 +54,11 @@
  * 
  * If @a cpu_id is the local CPU, the function will be invoked
- * directly.
+ * directly. If the destination cpu id @a cpu_id is invalid
+ * or denotes an inactive cpu, the call is discarded immediately.
  * 
  * Interrupts must be enabled. Otherwise you run the risk
  * of a deadlock.
  * 
- * @param cpu_id Destination CPU's logical id (eg CPU->id)
+ * @param cpu_id Destination CPU's logical id (eg CPU->id).
  * @param func Function to call.
  * @param arg Argument to pass to the user supplied function @a func.
@@ -73,5 +74,5 @@
 	
 	/* Discard invalid calls. */
-	if (config.cpu_count <= cpu_id) {
+	if (config.cpu_count <= cpu_id || !cpus[cpu_id].active) {
 		call_start(call_info, func, arg);
 		call_done(call_info);
@@ -81,5 +82,5 @@
 	/* Protect cpu->id against migration. */
 	preemption_disable();
-	
+
 	call_start(call_info, func, arg);
 	
@@ -89,5 +90,15 @@
 		list_append(&call_info->calls_link, &cpus[cpu_id].smp_pending_calls);
 		spinlock_unlock(&cpus[cpu_id].smp_calls_lock);
-				
+
+		/*
+		 * If a platform supports SMP it must implement arch_smp_call_ipi().
+		 * It should issue an IPI an cpu_id and invoke smp_call_ipi_recv()
+		 * on cpu_id in turn. 
+		 * 
+		 * Do not implement as just an empty dummy function. Instead
+		 * consider providing a full implementation or at least a version 
+		 * that panics if invoked. Note that smp_call_async() never
+		 * calls arch_smp_call_ipi() on uniprocessors even if CONFIG_SMP.
+		 */
 		arch_smp_call_ipi(cpu_id);
 #endif
@@ -131,5 +142,5 @@
 /** Architecture independent smp call IPI handler.
  * 
- * Interrupts must be disabled.
+ * Interrupts must be disabled. Tolerates spurious calls.
  */
 void smp_call_ipi_recv(void)
