static void xnsynch_renice_thread(struct xnthread *thread, struct xnthread *target) { /* Apply the scheduling policy of "target" to "thread" */ xnsched_track_policy(thread, target); if (thread->wchan) xnsynch_requeue_sleeper(thread); #ifdef CONFIG_XENO_OPT_PERVASIVE if (xnthread_test_state(thread, XNRELAX)) xnshadow_renice(thread); else if (xnthread_test_state(thread, XNSHADOW)) xnthread_set_info(thread, XNPRIOSET); #endif /* CONFIG_XENO_OPT_PERVASIVE */ }
/*! * @internal * \fn void xnsched_renice_root(struct xnsched *sched, struct xnthread *target) * \brief Change the root thread priority. * * xnsched_renice_root() updates the current priority of the root * thread for the given scheduler slot. This may lead to changing the * scheduling class of the root thread. */ void xnsched_renice_root(struct xnsched *sched, struct xnthread *target) { struct xnthread *root = &sched->rootcb; spl_t s; xnlock_get_irqsave(&nklock, s); if (target == NULL) target = root; xnsched_track_policy(root, target); trace_mark(xn_nucleus, sched_reniceroot, MARK_NOARGS); xnarch_trace_pid(xnarch_user_pid(xnthread_archtcb(root)), root->cprio); xnlock_put_irqrestore(&nklock, s); }