Moves the idlecoremap to the ksched
[akaros.git] / kern / include / schedule.h
1 /*
2  * Copyright (c) 2009 The Regents of the University of California
3  * Barret Rhoden <brho@cs.berkeley.edu>
4  * See LICENSE for details.
5  *
6  * Scheduling and dispatching.
7  */
8
9 #ifndef ROS_KERN_SCHEDULE_H
10 #define ROS_KERN_SCHEDULE_H
11
12 #include <process.h>
13
14 void schedule_init(void);
15
16 /*
17  * Add a process to the runnable list.  If you do this, do not manually env_run
18  * the process.  It must be selected with schedule().  This also applies to
19  * smp_call_function to indirectly call env_run.  Currently, this is always
20  * called with changing the state to RUNNABLE_S, but in the future, it might
21  * need a RUNNABLE_M instead - but one or the other should be done before
22  * calling this.
23  */
24 void schedule_proc(struct proc *p);
25
26 /* Rip a process out of the runnable list */
27 void deschedule_proc(struct proc *p);
28
29 /* Pick and run a process.  Note that this can return. */
30 void schedule(void);
31
32 /* Gets called when a pcore becomes idle (like in proc yield) */
33 void put_idle_core(uint32_t coreid);
34
35 /* How many vcores p will think it can have */
36 uint32_t max_vcores(struct proc *p);
37
38 /* P wants some cores.  Put them in pc_arr */
39 uint32_t proc_wants_cores(struct proc *p, uint32_t *pc_arr, uint32_t amt_new);
40
41 /* Debugging */
42 void dump_proclist(struct proc_list *list);
43 void print_idlecoremap(void);
44
45 #endif /* ROS_KERN_SCHEDULE_H */