kernel - All lwkt thread now start out mpsafe part 1/2
[dragonfly.git] / sys / kern / usched_dummy.c
index 68cd3b3..fb22eb8 100644 (file)
@@ -50,6 +50,7 @@
 
 #include <sys/thread2.h>
 #include <sys/spinlock2.h>
+#include <sys/mplock2.h>
 
 #define MAXPRI                 128
 #define PRIBASE_REALTIME       0
@@ -364,6 +365,9 @@ dummy_recalculate_estcpu(struct lwp *lp)
 {
 }
 
+/*
+ * MPSAFE
+ */
 static
 void
 dummy_yield(struct lwp *lp)
@@ -451,6 +455,8 @@ dummy_exiting(struct lwp *plp, struct lwp *lp)
  * is possible to deschedule an LWKT thread and then do some work before
  * switching away.  The thread can be rescheduled at any time, even before
  * we switch away.
+ *
+ * MPSAFE
  */
 #ifdef SMP
 
@@ -470,11 +476,6 @@ dummy_sched_thread(void *dummy)
     dd = &dummy_pcpu[cpuid];
     cpumask = 1 << cpuid;
 
-    /*
-     * Our Scheduler helper thread does not need to hold the MP lock
-     */
-    rel_mplock();
-
     for (;;) {
        lwkt_deschedule_self(gd->gd_curthread);         /* interlock */
        atomic_set_int(&dummy_rdyprocmask, cpumask);
@@ -536,7 +537,7 @@ dummy_sched_thread_cpu_init(void)
            kprintf(" %d", i);
 
        lwkt_create(dummy_sched_thread, NULL, NULL, &dd->helper_thread, 
-                   TDF_STOPREQ, i, "dsched %d", i);
+                   TDF_STOPREQ | TDF_MPSAFE, i, "dsched %d", i);
 
        /*
         * Allow user scheduling on the target cpu.  cpu #0 has already