From: Erik van der Kouwe Date: Fri, 16 Jul 2010 14:56:05 +0000 (+0000) Subject: Fix RS warning at start-up by inheriting scdeduling properties from init for unprivil... X-Git-Tag: v3.1.8~210 X-Git-Url: http://zhaoyanbai.com/repos/Bv9ARM.ch02.html?a=commitdiff_plain;h=98725c443e25ab31679cdb55aec8e00ed4434752;p=minix.git Fix RS warning at start-up by inheriting scdeduling properties from init for unprivileged children of system processes --- diff --git a/servers/pm/schedule.c b/servers/pm/schedule.c index 107e1c13a..aa0d0bdf8 100644 --- a/servers/pm/schedule.c +++ b/servers/pm/schedule.c @@ -54,6 +54,7 @@ PUBLIC void sched_init(void) PUBLIC int sched_start_user(endpoint_t ep, struct mproc *rmp) { unsigned maxprio; + endpoint_t inherit_from; int rv; /* convert nice to priority */ @@ -61,10 +62,22 @@ PUBLIC int sched_start_user(endpoint_t ep, struct mproc *rmp) return rv; } + /* scheduler must know the parent, which is not the case for a child + * of a system process created by a regular fork; in this case the + * scheduler should inherit settings from init rather than the real + * parent + */ + if (mproc[rmp->mp_parent].mp_flags & PRIV_PROC) { + assert(mproc[rmp->mp_parent].mp_scheduler == NONE); + inherit_from = INIT_PROC_NR; + } else { + inherit_from = mproc[rmp->mp_parent].mp_endpoint; + } + /* inherit quantum */ return sched_inherit(ep, /* scheduler_e */ rmp->mp_endpoint, /* schedulee_e */ - mproc[rmp->mp_parent].mp_endpoint, /* parent_e */ + inherit_from, /* parent_e */ maxprio, /* maxprio */ &rmp->mp_scheduler); /* *newsched_e */ }