svn commit: r223531 - head/sys/kern
Andriy Gapon
avg at FreeBSD.org
Sat Jun 25 10:28:17 UTC 2011
Author: avg
Date: Sat Jun 25 10:28:16 2011
New Revision: 223531
URL: http://svn.freebsd.org/changeset/base/223531
Log:
unconditionally stop other cpus when entering kdb in smp system
... and thus retire debug.kdb.stop_cpus tunable/sysctl.
The knob was to work around CPU stopping issues, which since have been
either fixed or greatly reduced. kdb should really operate in a special
environment with scheduler stopped and interrupts disabled to provide
deterministic debugging.
Discussed with: attilio, rwatson
X-MFC after: 2 months or never
Modified:
head/sys/kern/subr_kdb.c
Modified: head/sys/kern/subr_kdb.c
==============================================================================
--- head/sys/kern/subr_kdb.c Sat Jun 25 10:01:43 2011 (r223530)
+++ head/sys/kern/subr_kdb.c Sat Jun 25 10:28:16 2011 (r223531)
@@ -88,20 +88,6 @@ SYSCTL_PROC(_debug_kdb, OID_AUTO, trap_c
kdb_sysctl_trap_code, "I", "set to cause a page fault via code access");
/*
- * Flag indicating whether or not to IPI the other CPUs to stop them on
- * entering the debugger. Sometimes, this will result in a deadlock as
- * stop_cpus() waits for the other cpus to stop, so we allow it to be
- * disabled. In order to maximize the chances of success, use a hard
- * stop for that.
- */
-#ifdef SMP
-static int kdb_stop_cpus = 1;
-SYSCTL_INT(_debug_kdb, OID_AUTO, stop_cpus, CTLFLAG_RW | CTLFLAG_TUN,
- &kdb_stop_cpus, 0, "stop other CPUs when entering the debugger");
-TUNABLE_INT("debug.kdb.stop_cpus", &kdb_stop_cpus);
-#endif
-
-/*
* Flag to indicate to debuggers why the debugger was entered.
*/
const char * volatile kdb_why = KDB_WHY_UNSET;
@@ -515,9 +501,6 @@ kdb_trap(int type, int code, struct trap
{
struct kdb_dbbe *be;
register_t intr;
-#ifdef SMP
- int did_stop_cpus;
-#endif
int handled;
be = kdb_dbbe;
@@ -531,8 +514,7 @@ kdb_trap(int type, int code, struct trap
intr = intr_disable();
#ifdef SMP
- if ((did_stop_cpus = kdb_stop_cpus) != 0)
- stop_cpus_hard(PCPU_GET(other_cpus));
+ stop_cpus_hard(PCPU_GET(other_cpus));
#endif
kdb_active++;
@@ -558,8 +540,7 @@ kdb_trap(int type, int code, struct trap
kdb_active--;
#ifdef SMP
- if (did_stop_cpus)
- restart_cpus(stopped_cpus);
+ restart_cpus(stopped_cpus);
#endif
intr_restore(intr);
More information about the svn-src-all
mailing list