]> Zhao Yanbai Git Server - minix.git/commitdiff
A simpler test whether to use kernel's default scheduling
authorTomas Hruby <tom@minix3.org>
Sat, 10 Apr 2010 15:19:25 +0000 (15:19 +0000)
committerTomas Hruby <tom@minix3.org>
Sat, 10 Apr 2010 15:19:25 +0000 (15:19 +0000)
- this is a small addition to the userspace scheduling.
  proc_kernel_scheduler() tests whether to use the default scheduling
  policy in kernel. It is true if the process' scheduler is NULL _or_
  self. Currently none of the tests was complete.

kernel/proc.c
kernel/proc.h

index 7c828d46c37ca58c565e84e7fc6bf837ac68fb6e..0053e27744768a60a9ea64f4de14e718612ddfe1 100644 (file)
@@ -129,7 +129,7 @@ not_runnable_pick_new:
         * If this process is scheduled by the kernel, we renew it's quantum
         * and remove it's RTS_NO_QUANTUM flag.
         */
-       if (proc_no_quantum(proc_ptr) && (proc_ptr->p_scheduler == NULL)) {
+       if (proc_no_quantum(proc_ptr) && proc_kernel_scheduler(proc_ptr)) {
                /* give new quantum */
                proc_ptr->p_ticks_left = proc_ptr->p_quantum_size;
                RTS_UNSET(proc_ptr, RTS_NO_QUANTUM);
@@ -1355,14 +1355,14 @@ PRIVATE void notify_scheduler(struct proc *p)
         * quantum. This is done by sending a message to the scheduler
         * on the process's behalf
         */
-       if (p->p_scheduler == p) {
+       if (proc_kernel_scheduler(p)) {
                /*
-                * If a scheduler is scheduling itself, and runs out of
-                * quantum, we don't send a message. The RTS_NO_QUANTUM
-                * flag will be removed by schedcheck in proc.c.
+                * If a scheduler is scheduling itself or has no scheduler, and
+                * runs out of quantum, we don't send a message. The
+                * RTS_NO_QUANTUM flag will be removed by schedcheck in proc.c.
                 */
        }
-       else if (p->p_scheduler != NULL) {
+       else {
                message m_no_quantum;
                int err;
 
index a059ecf70649d62b2f372a8e94de95b7a299c9f9..99e3ec3b7df339a48b522ba8e70d2c7ebced96f1 100644 (file)
@@ -148,6 +148,10 @@ struct proc {
 #define proc_no_quantum(p)     ((p)->p_rts_flags & RTS_NO_QUANTUM)
 #define proc_ptr_ok(p)         ((p)->p_magic == PMAGIC)
 
+/* test whether the process is scheduled by the kernel's default policy  */
+#define proc_kernel_scheduler(p)       ((p)->p_scheduler == NULL || \
+                                       (p)->p_scheduler == (p))
+
 /* Macro to return: on which process is a certain process blocked?
  * return endpoint number (can be ANY) or NONE. It's important to
  * check RTS_SENDING first, and then RTS_RECEIVING, as they could