Message type for SYS_SCHEDCTL
Change-Id: Iaccbac1ef99124bc494b835e0d0cf999ea2e3f5a
This commit is contained in:
parent
b90d99dab3
commit
8ba159d242
4 changed files with 27 additions and 21 deletions
|
@ -581,15 +581,10 @@
|
|||
#define SYS_STATE_CLEAR_IPC_REFS 1 /* clear IPC references */
|
||||
|
||||
/* Subfunctions for SYS_SCHEDCTL */
|
||||
#define SCHEDCTL_FLAGS m9_l1 /* flags for setting the scheduler */
|
||||
# define SCHEDCTL_FLAG_KERNEL 1 /* mark kernel scheduler and remove
|
||||
* RTS_NO_QUANTUM; otherwise caller is
|
||||
* marked scheduler
|
||||
*/
|
||||
#define SCHEDCTL_ENDPOINT m9_l2 /* endpt of process to be scheduled */
|
||||
#define SCHEDCTL_QUANTUM m9_l3 /* current scheduling quantum */
|
||||
#define SCHEDCTL_PRIORITY m9_s4 /* current scheduling priority */
|
||||
#define SCHEDCTL_CPU m9_l5 /* where to place this process */
|
||||
|
||||
/* Field names for SYS_PADCONF */
|
||||
#define PADCONF_PADCONF m2_i1 /* pad to configure */
|
||||
|
|
|
@ -563,6 +563,17 @@ typedef struct {
|
|||
} mess_pm_lexec_exec_new;
|
||||
_ASSERT_MSG_SIZE(mess_pm_lexec_exec_new);
|
||||
|
||||
typedef struct {
|
||||
uint32_t flags;
|
||||
endpoint_t endpoint;
|
||||
int priority;
|
||||
int quantum;
|
||||
int cpu;
|
||||
|
||||
uint8_t padding[36];
|
||||
} mess_lsys_krn_schedctl;
|
||||
_ASSERT_MSG_SIZE(mess_lsys_krn_schedctl);
|
||||
|
||||
typedef struct {
|
||||
endpoint_t endpt;
|
||||
|
||||
|
@ -1161,6 +1172,8 @@ typedef struct {
|
|||
|
||||
mess_lexec_pm_exec_new m_lexec_pm_exec_new;
|
||||
|
||||
mess_lsys_krn_schedctl m_lsys_krn_schedctl;
|
||||
|
||||
mess_lsys_pm_getepinfo m_lsys_pm_getepinfo;
|
||||
mess_lsys_pm_getprocnr m_lsys_pm_getprocnr;
|
||||
mess_lsys_pm_srv_fork m_lsys_pm_srv_fork;
|
||||
|
|
|
@ -7,20 +7,20 @@
|
|||
int do_schedctl(struct proc * caller, message * m_ptr)
|
||||
{
|
||||
struct proc *p;
|
||||
unsigned flags;
|
||||
uint32_t flags;
|
||||
int priority, quantum, cpu;
|
||||
int proc_nr;
|
||||
int r;
|
||||
|
||||
/* check parameter validity */
|
||||
flags = (unsigned) m_ptr->SCHEDCTL_FLAGS;
|
||||
flags = m_ptr->m_lsys_krn_schedctl.flags;
|
||||
if (flags & ~SCHEDCTL_FLAG_KERNEL) {
|
||||
printf("do_schedctl: flags 0x%x invalid, caller=%d\n",
|
||||
flags, caller - proc);
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
if (!isokendpt(m_ptr->SCHEDCTL_ENDPOINT, &proc_nr))
|
||||
if (!isokendpt(m_ptr->m_lsys_krn_schedctl.endpoint, &proc_nr))
|
||||
return EINVAL;
|
||||
|
||||
p = proc_addr(proc_nr);
|
||||
|
@ -29,9 +29,9 @@ int do_schedctl(struct proc * caller, message * m_ptr)
|
|||
/* the kernel becomes the scheduler and starts
|
||||
* scheduling the process.
|
||||
*/
|
||||
priority = (int) m_ptr->SCHEDCTL_PRIORITY;
|
||||
quantum = (int) m_ptr->SCHEDCTL_QUANTUM;
|
||||
cpu = (int) m_ptr->SCHEDCTL_CPU;
|
||||
priority = m_ptr->m_lsys_krn_schedctl.priority;
|
||||
quantum = m_ptr->m_lsys_krn_schedctl.quantum;
|
||||
cpu = m_ptr->m_lsys_krn_schedctl.cpu;
|
||||
|
||||
/* Try to schedule the process. */
|
||||
if((r = sched_proc(p, priority, quantum, cpu) != OK))
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
#include "syslib.h"
|
||||
|
||||
int sys_schedctl(unsigned flags,
|
||||
endpoint_t proc_ep,
|
||||
int priority,
|
||||
int quantum,
|
||||
int sys_schedctl(uint32_t flags, endpoint_t proc_ep, int priority, int quantum,
|
||||
int cpu)
|
||||
{
|
||||
message m;
|
||||
|
||||
m.SCHEDCTL_FLAGS = (int) flags;
|
||||
m.SCHEDCTL_ENDPOINT = proc_ep;
|
||||
m.SCHEDCTL_PRIORITY = priority;
|
||||
m.SCHEDCTL_QUANTUM = quantum;
|
||||
m.SCHEDCTL_CPU = cpu;
|
||||
m.m_lsys_krn_schedctl.flags = flags;
|
||||
m.m_lsys_krn_schedctl.endpoint = proc_ep;
|
||||
m.m_lsys_krn_schedctl.priority = priority;
|
||||
m.m_lsys_krn_schedctl.quantum = quantum;
|
||||
m.m_lsys_krn_schedctl.cpu = cpu;
|
||||
|
||||
return(_kernel_call(SYS_SCHEDCTL, &m));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue