Module Name: src
Committed By: mrg
Date: Sun Feb 20 11:41:20 UTC 2011
Modified Files:
src/sys/arch/sparc/sparc: cpu.c
Log Message:
add some #if 0'ed code to turn the xcall() timeout into a hard panic.
probably put this under DIAGNOSTIC when it is later properly working.
To generate a diff of this commit:
cvs rdiff -u -r1.231 -r1.232 src/sys/arch/sparc/sparc/cpu.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sparc/sparc/cpu.c
diff -u src/sys/arch/sparc/sparc/cpu.c:1.231 src/sys/arch/sparc/sparc/cpu.c:1.232
--- src/sys/arch/sparc/sparc/cpu.c:1.231 Sun Feb 20 10:02:01 2011
+++ src/sys/arch/sparc/sparc/cpu.c Sun Feb 20 11:41:20 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.231 2011/02/20 10:02:01 mrg Exp $ */
+/* $NetBSD: cpu.c,v 1.232 2011/02/20 11:41:20 mrg Exp $ */
/*
* Copyright (c) 1996
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.231 2011/02/20 10:02:01 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.232 2011/02/20 11:41:20 mrg Exp $");
#include "opt_multiprocessor.h"
#include "opt_lockdebug.h"
@@ -742,6 +742,30 @@
if (i < 0)
printf_nolog("%s\n", errbuf);
mutex_spin_exit(&xpmsg_mutex);
+
+#if 0
+ if (!timeout)
+ return;
+
+ /*
+ * Let's make this a hard panic for now, and figure out why it happens.
+ *
+ * We call mp_pause_cpus() so we can capture their state *now* as opposed
+ * to after we've written all the below to the console.
+ */
+#ifdef DDB
+ mp_pause_cpus_ddb();
+#else
+ mp_pause_cpus();
+#endif
+ printf_nolog("xcall(cpu%d,%p) from %p: couldn't ping cpus:",
+ cpu_number(), fasttrap ? trap : func, __builtin_return_address(0));
+ for (CPU_INFO_FOREACH(n, cpi))
+ if ((failed_cpuset & (1 << n)) == 0)
+ printf_nolog(" cpu%d", cpi->ci_cpuid);
+ printf_nolog("%s\n", i == 10000000 ? " [hard 10M timeout]" : "");
+ panic("failed to ping cpus");
+#endif
}
/*