From: Lionel Sambuc Date: Wed, 14 May 2014 14:39:00 +0000 (+0200) Subject: Message type for SYS_SCHEDCTL X-Git-Tag: v3.3.0~250 X-Git-Url: http://zhaoyanbai.com/repos/man.genrandom.html?a=commitdiff_plain;h=8ba159d242915ce594fcb9b79d14cf9d54d96d7c;p=minix.git Message type for SYS_SCHEDCTL Change-Id: Iaccbac1ef99124bc494b835e0d0cf999ea2e3f5a --- diff --git a/include/minix/com.h b/include/minix/com.h index 6377c6845..d20922569 100644 --- a/include/minix/com.h +++ b/include/minix/com.h @@ -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 */ diff --git a/include/minix/ipc.h b/include/minix/ipc.h index d0e94f07c..1d3194020 100644 --- a/include/minix/ipc.h +++ b/include/minix/ipc.h @@ -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; diff --git a/kernel/system/do_schedctl.c b/kernel/system/do_schedctl.c index 498d0d04f..f8b95b435 100644 --- a/kernel/system/do_schedctl.c +++ b/kernel/system/do_schedctl.c @@ -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)) diff --git a/lib/libsys/sys_schedctl.c b/lib/libsys/sys_schedctl.c index 97ff4832c..689193b1a 100644 --- a/lib/libsys/sys_schedctl.c +++ b/lib/libsys/sys_schedctl.c @@ -1,17 +1,15 @@ #include "syslib.h" -int sys_schedctl(unsigned flags, - endpoint_t proc_ep, - int priority, - int quantum, - int cpu) +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)); }