dsched - Periph.: call dsched_exit on thread exit
authorAlex Hornung <ahornung@gmail.com>
Mon, 19 Apr 2010 16:39:16 +0000 (16:39 +0000)
committerAlex Hornung <ahornung@gmail.com>
Mon, 19 Apr 2010 19:01:23 +0000 (19:01 +0000)
* The previous location of the call to dsched_exit was not right and did
  not allow the use of lockmgr.

* We now call dsched_exit before the thread is completely killed and
  descheduled as to avoid any problems.

sys/kern/lwkt_thread.c
sys/platform/pc32/i386/vm_machdep.c
sys/platform/pc64/x86_64/vm_machdep.c
sys/platform/vkernel/i386/vm_machdep.c
sys/platform/vkernel64/x86_64/vm_machdep.c

index a8282e2..97d8d74 100644 (file)
@@ -1476,6 +1476,7 @@ lwkt_exit(void)
     if (td->td_flags & TDF_TSLEEPQ)
        tsleep_remove(td);
     biosched_done(td);
+    dsched_exit_thread(td);
     lwkt_deschedule_self(td);
     lwkt_remove_tdallq(td);
     if (td->td_flags & TDF_ALLOCATED_THREAD)
@@ -1488,7 +1489,6 @@ lwkt_remove_tdallq(thread_t td)
 {
     KKASSERT(td->td_gd == mycpu);
     TAILQ_REMOVE(&td->td_gd->gd_tdallq, td, td_allq);
-    dsched_exit_thread(td);
 }
 
 void
index 80d5d14..5c35ba2 100644 (file)
@@ -57,6 +57,7 @@
 #include <sys/kernel.h>
 #include <sys/sysctl.h>
 #include <sys/unistd.h>
+#include <sys/dsched.h>
 
 #include <machine/clock.h>
 #include <machine/cpu.h>
@@ -300,6 +301,7 @@ cpu_lwp_exit(void)
         }
        td->td_gd->gd_cnt.v_swtch++;
 
+       dsched_exit_thread(td);
        crit_enter_quick(td);
        if (td->td_flags & TDF_TSLEEPQ)
                tsleep_remove(td);
index c02cb2d..c74edb6 100644 (file)
@@ -53,6 +53,7 @@
 #include <sys/kernel.h>
 #include <sys/sysctl.h>
 #include <sys/unistd.h>
+#include <sys/dsched.h>
 
 #include <machine/clock.h>
 #include <machine/cpu.h>
@@ -264,6 +265,7 @@ cpu_lwp_exit(void)
         }
        td->td_gd->gd_cnt.v_swtch++;
 
+       dsched_exit_thread(td);
        crit_enter_quick(td);
        if (td->td_flags & TDF_TSLEEPQ)
                tsleep_remove(td);
index 54df1b5..9bcca60 100644 (file)
@@ -56,6 +56,7 @@
 #include <sys/kernel.h>
 #include <sys/sysctl.h>
 #include <sys/unistd.h>
+#include <sys/dsched.h>
 
 #include <machine/clock.h>
 #include <machine/cpu.h>
@@ -301,6 +302,7 @@ cpu_lwp_exit(void)
         }
        td->td_gd->gd_cnt.v_swtch++;
 
+       dsched_exit_thread(td);
        crit_enter_quick(td);
        if (td->td_flags & TDF_TSLEEPQ)
                tsleep_remove(td);
index 8673ebc..b348472 100644 (file)
@@ -54,6 +54,7 @@
 #include <sys/kernel.h>
 #include <sys/sysctl.h>
 #include <sys/unistd.h>
+#include <sys/dsched.h>
 
 #include <machine/clock.h>
 #include <machine/cpu.h>
@@ -266,6 +267,7 @@ cpu_lwp_exit(void)
         }
        td->td_gd->gd_cnt.v_swtch++;
 
+       dsched_exit_thread(td);
        crit_enter_quick(td);
        lwkt_deschedule_self(td);
        lwkt_remove_tdallq(td);