void __pthread_manager_adjust_prio(int thread_prio) { struct sched_param param; if (thread_prio <= manager_thread->p_priority) return; param.sched_priority = thread_prio < __sched_get_priority_max(SCHED_FIFO) ? thread_prio + 1 : thread_prio; __sched_setscheduler(manager_thread->p_pid, SCHED_FIFO, ¶m); manager_thread->p_priority = thread_prio; }
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param) { int max_prio = __sched_get_priority_max(attr->__schedpolicy); int min_prio = __sched_get_priority_min(attr->__schedpolicy); if (param->sched_priority < min_prio || param->sched_priority > max_prio) return EINVAL; memcpy (&attr->__schedparam, param, sizeof (struct sched_param)); return 0; }