xref: /minix3/minix/kernel/system/do_schedule.c (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1 #include "kernel/system.h"
2 #include <minix/endpoint.h>
3 #include "kernel/clock.h"
4 
5 /*===========================================================================*
6  *				do_schedule				     *
7  *===========================================================================*/
8 int do_schedule(struct proc * caller, message * m_ptr)
9 {
10 	struct proc *p;
11 	int proc_nr;
12 	int priority, quantum, cpu;
13 
14 	if (!isokendpt(m_ptr->m_lsys_krn_schedule.endpoint, &proc_nr))
15 		return EINVAL;
16 
17 	p = proc_addr(proc_nr);
18 
19 	/* Only this process' scheduler can schedule it */
20 	if (caller != p->p_scheduler)
21 		return(EPERM);
22 
23 	/* Try to schedule the process. */
24 	priority = m_ptr->m_lsys_krn_schedule.priority;
25 	quantum = m_ptr->m_lsys_krn_schedule.quantum;
26 	cpu = m_ptr->m_lsys_krn_schedule.cpu;
27 
28 	return sched_proc(p, priority, quantum, cpu);
29 }
30