static inline int goodness(struct task_struct * p, int this_cpu,
struct mm_struct *this_mm)
{
int weight;
weight = -1;
if (p->policy & SCHED_YIELD)
goto out;
if (p->policy == SCHED_OTHER) {
weight = p->counter;
if (!weight)
goto out;
if (p->mm == this_mm || !p->mm)
weight += 1;
weight += 20 - p->nice;
goto out;
}
weight = 1000 + p->rt_priority;
out:
return weight;
}
Zauważmy, że w ten sposób procesy czasu rzeczywistego otrzymują zawsze priorytet wyższy od dowolnego zwykłego procesu.
static inline int preemption_goodness(struct task_struct * prev,
struct task_struct * p, int cpu)
{
return goodness(p, cpu, prev->active_mm) -
- goodness(prev, cpu, prev->active_mm);
}