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);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to