Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Jun 2011 10:28:16 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r223531 - head/sys/kern
Message-ID:  <201106251028.p5PASHbS093701@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106251028.p5PASHbS093701>