mirror of
https://github.com/torvalds/linux
synced 2024-09-06 09:51:23 +00:00
sched/cpupri: Remap CPUPRI_NORMAL to MAX_RT_PRIO-1
This makes the mapping continuous and frees up 100 for other usage. Prev mapping: p->rt_priority p->prio newpri cpupri -1 -1 (CPUPRI_INVALID) 100 0 (CPUPRI_NORMAL) 1 98 98 1 ... 49 50 50 49 50 49 49 50 ... 99 0 0 99 New mapping: p->rt_priority p->prio newpri cpupri -1 -1 (CPUPRI_INVALID) 99 0 (CPUPRI_NORMAL) 1 98 98 1 ... 49 50 50 49 50 49 49 50 ... 99 0 0 99 Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
This commit is contained in:
parent
1b08782ce3
commit
934fc3314b
|
@ -24,17 +24,37 @@
|
|||
*/
|
||||
#include "sched.h"
|
||||
|
||||
/* Convert between a 140 based task->prio, and our 100 based cpupri */
|
||||
/*
|
||||
* p->rt_priority p->prio newpri cpupri
|
||||
*
|
||||
* -1 -1 (CPUPRI_INVALID)
|
||||
*
|
||||
* 99 0 (CPUPRI_NORMAL)
|
||||
*
|
||||
* 1 98 98 1
|
||||
* ...
|
||||
* 49 50 50 49
|
||||
* 50 49 49 50
|
||||
* ...
|
||||
* 99 0 0 99
|
||||
*/
|
||||
static int convert_prio(int prio)
|
||||
{
|
||||
int cpupri;
|
||||
|
||||
if (prio == CPUPRI_INVALID)
|
||||
cpupri = CPUPRI_INVALID;
|
||||
else if (prio >= MAX_RT_PRIO)
|
||||
cpupri = CPUPRI_NORMAL;
|
||||
else
|
||||
cpupri = MAX_RT_PRIO - prio - 1;
|
||||
switch (prio) {
|
||||
case CPUPRI_INVALID:
|
||||
cpupri = CPUPRI_INVALID; /* -1 */
|
||||
break;
|
||||
|
||||
case 0 ... 98:
|
||||
cpupri = MAX_RT_PRIO-1 - prio; /* 1 ... 99 */
|
||||
break;
|
||||
|
||||
case MAX_RT_PRIO-1:
|
||||
cpupri = CPUPRI_NORMAL; /* 0 */
|
||||
break;
|
||||
}
|
||||
|
||||
return cpupri;
|
||||
}
|
||||
|
|
|
@ -89,8 +89,8 @@ void init_rt_rq(struct rt_rq *rt_rq)
|
|||
__set_bit(MAX_RT_PRIO, array->bitmap);
|
||||
|
||||
#if defined CONFIG_SMP
|
||||
rt_rq->highest_prio.curr = MAX_RT_PRIO;
|
||||
rt_rq->highest_prio.next = MAX_RT_PRIO;
|
||||
rt_rq->highest_prio.curr = MAX_RT_PRIO-1;
|
||||
rt_rq->highest_prio.next = MAX_RT_PRIO-1;
|
||||
rt_rq->rt_nr_migratory = 0;
|
||||
rt_rq->overloaded = 0;
|
||||
plist_head_init(&rt_rq->pushable_tasks);
|
||||
|
@ -161,7 +161,7 @@ void init_tg_rt_entry(struct task_group *tg, struct rt_rq *rt_rq,
|
|||
{
|
||||
struct rq *rq = cpu_rq(cpu);
|
||||
|
||||
rt_rq->highest_prio.curr = MAX_RT_PRIO;
|
||||
rt_rq->highest_prio.curr = MAX_RT_PRIO-1;
|
||||
rt_rq->rt_nr_boosted = 0;
|
||||
rt_rq->rq = rq;
|
||||
rt_rq->tg = tg;
|
||||
|
@ -393,8 +393,9 @@ static void dequeue_pushable_task(struct rq *rq, struct task_struct *p)
|
|||
p = plist_first_entry(&rq->rt.pushable_tasks,
|
||||
struct task_struct, pushable_tasks);
|
||||
rq->rt.highest_prio.next = p->prio;
|
||||
} else
|
||||
rq->rt.highest_prio.next = MAX_RT_PRIO;
|
||||
} else {
|
||||
rq->rt.highest_prio.next = MAX_RT_PRIO-1;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -1147,8 +1148,9 @@ dec_rt_prio(struct rt_rq *rt_rq, int prio)
|
|||
sched_find_first_bit(array->bitmap);
|
||||
}
|
||||
|
||||
} else
|
||||
rt_rq->highest_prio.curr = MAX_RT_PRIO;
|
||||
} else {
|
||||
rt_rq->highest_prio.curr = MAX_RT_PRIO-1;
|
||||
}
|
||||
|
||||
dec_rt_prio_smp(rt_rq, prio, prev_prio);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue