kernel - Make interrupt thread preemption programmable
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 16 Sep 2010 07:44:10 +0000 (00:44 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 16 Sep 2010 07:44:10 +0000 (00:44 -0700)
* Add sysctl lwkt.preempt_enable (default on) to allow interrupt thread
  preemption to be controlled for debugging purposes.

sys/kern/lwkt_thread.c

index 666220c..31a5fcd 100644 (file)
@@ -153,6 +153,9 @@ static int fairq_enable = 1;
 SYSCTL_INT(_lwkt, OID_AUTO, fairq_enable, CTLFLAG_RW, &fairq_enable, 0, "");
 static int user_pri_sched = 0;
 SYSCTL_INT(_lwkt, OID_AUTO, user_pri_sched, CTLFLAG_RW, &user_pri_sched, 0, "");
+static int preempt_enable = 1;
+SYSCTL_INT(_lwkt, OID_AUTO, preempt_enable, CTLFLAG_RW, &preempt_enable, 0, "");
+
 
 /*
  * These helper procedures handle the runq, they can only be called from
@@ -964,6 +967,11 @@ lwkt_preempt(thread_t ntd, int critcount)
      */
     KASSERT(ntd->td_critcount, ("BADCRIT0 %d", ntd->td_pri));
 
+    if (preempt_enable == 0) {
+       ++preempt_miss;
+       return;
+    }
+
     td = gd->gd_curthread;
     if (ntd->td_pri <= td->td_pri) {
        ++preempt_miss;