Moves proc runnable list 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 /* Take a look at proc's resource (temp interface) */
33 void poke_ksched(struct proc *p, int res_type);
34
35 /* Gets called when a pcore becomes idle (like in proc yield) */
36 void put_idle_core(uint32_t coreid);
37
38 /* How many vcores p will think it can have */
39 uint32_t max_vcores(struct proc *p);
40
41 /* P wants some cores.  Put them in pc_arr */
42 uint32_t proc_wants_cores(struct proc *p, uint32_t *pc_arr, uint32_t amt_new);
43
44 /* Debugging */
45 void sched_diag(void);
46 void print_idlecoremap(void);
47
48 #endif /* ROS_KERN_SCHEDULE_H */