Moves proc runnable list to the ksched
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 23 Feb 2012 05:02:02 +0000 (21:02 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 27 Feb 2012 21:27:59 +0000 (13:27 -0800)
And changes the (totally unused) old procinfo option.  One minorly
ghetto thing is that whatever embedded structure the ksched wants to use
will need to be in the proc struct (TAILQ now, but later...).

kern/include/process.h
kern/include/schedule.h
kern/src/monitor.c
kern/src/process.c
kern/src/schedule.c

index 6cef6ac..34d8001 100644 (file)
 
 #include <env.h>
 
-TAILQ_HEAD(proc_list, proc);           // Declares 'struct proc_list'
-
-extern spinlock_t runnablelist_lock;
-extern struct proc_list LCKD(&runnablelist_lock) proc_runnablelist;
+TAILQ_HEAD(proc_list, proc);           /* Declares 'struct proc_list' */
 
 /* Can use a htable iterator to iterate through all active procs */
 extern struct hashtable *pid_hash;
index 8e226e6..d7676f1 100644 (file)
@@ -42,7 +42,7 @@ uint32_t max_vcores(struct proc *p);
 uint32_t proc_wants_cores(struct proc *p, uint32_t *pc_arr, uint32_t amt_new);
 
 /* Debugging */
-void dump_proclist(struct proc_list *list);
+void sched_diag(void);
 void print_idlecoremap(void);
 
 #endif /* ROS_KERN_SCHEDULE_H */
index b6d4903..92b892c 100644 (file)
@@ -321,7 +321,7 @@ int mon_procinfo(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf)
                printk("Usage: procinfo OPTION\n");
                printk("\tidlecores: show idle core map\n");
                printk("\tall: show all active pids\n");
-               printk("\trunnable: show proc_runnablelist\n");
+               printk("\tsched: scheduler diagnostic report\n");
                printk("\tresources: show resources wanted/granted for all procs\n");
                printk("\tpid NUM: show a lot of info for proc NUM\n");
                printk("\tunlock: unlock the lock for the ADDR (OMG!!!)\n");
@@ -332,8 +332,8 @@ int mon_procinfo(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf)
                print_idlecoremap();
        } else if (!strcmp(argv[1], "all")) {
                print_allpids();
-       } else if (!strcmp(argv[1], "runnable")) {
-               dump_proclist(&proc_runnablelist);
+       } else if (!strcmp(argv[1], "sched")) {
+               sched_diag();
        } else if (!strcmp(argv[1], "resources")) {
                print_all_resources();
        } else if (!strcmp(argv[1], "pid")) {
index e68edb2..fd1e5fa 100644 (file)
@@ -30,9 +30,6 @@
 #include <arsc_server.h>
 #include <devfs.h>
 
-/* Process Lists */
-struct proc_list proc_runnablelist = TAILQ_HEAD_INITIALIZER(proc_runnablelist);
-spinlock_t runnablelist_lock = SPINLOCK_INITIALIZER;
 struct kmem_cache *proc_cache;
 
 /* Other helpers, implemented later. */
index d91f2c4..bebae8e 100644 (file)
 #include <smp.h>
 #include <sys/queue.h>
 
+/* Process Lists */
+struct proc_list proc_runnablelist = TAILQ_HEAD_INITIALIZER(proc_runnablelist);
+spinlock_t runnablelist_lock = SPINLOCK_INITIALIZER;
+
 // This could be useful for making scheduling decisions.  
 /* Physical coremap: each index is a physical core id, with a proc ptr for
  * whoever *should be or is* running.  Very similar to current, which is what
@@ -212,10 +216,11 @@ uint32_t proc_wants_cores(struct proc *p, uint32_t *pc_arr, uint32_t amt_new)
 }
 
 /************** Debugging **************/
-void dump_proclist(struct proc_list *list)
+void sched_diag(void)
 {
        struct proc *p;
-       TAILQ_FOREACH(p, list, proc_link)
+       /* just print the runnables for now */
+       TAILQ_FOREACH(p, &proc_runnablelist, proc_link)
                printk("PID: %d\n", p->pid);
        return;
 }