mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08: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"
|
#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)
|
static int convert_prio(int prio)
|
||||||
{
|
{
|
||||||
int cpupri;
|
int cpupri;
|
||||||
|
|
||||||
if (prio == CPUPRI_INVALID)
|
switch (prio) {
|
||||||
cpupri = CPUPRI_INVALID;
|
case CPUPRI_INVALID:
|
||||||
else if (prio >= MAX_RT_PRIO)
|
cpupri = CPUPRI_INVALID; /* -1 */
|
||||||
cpupri = CPUPRI_NORMAL;
|
break;
|
||||||
else
|
|
||||||
cpupri = MAX_RT_PRIO - prio - 1;
|
case 0 ... 98:
|
||||||
|
cpupri = MAX_RT_PRIO-1 - prio; /* 1 ... 99 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAX_RT_PRIO-1:
|
||||||
|
cpupri = CPUPRI_NORMAL; /* 0 */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return cpupri;
|
return cpupri;
|
||||||
}
|
}
|
||||||
|
@ -89,8 +89,8 @@ void init_rt_rq(struct rt_rq *rt_rq)
|
|||||||
__set_bit(MAX_RT_PRIO, array->bitmap);
|
__set_bit(MAX_RT_PRIO, array->bitmap);
|
||||||
|
|
||||||
#if defined CONFIG_SMP
|
#if defined CONFIG_SMP
|
||||||
rt_rq->highest_prio.curr = MAX_RT_PRIO;
|
rt_rq->highest_prio.curr = MAX_RT_PRIO-1;
|
||||||
rt_rq->highest_prio.next = MAX_RT_PRIO;
|
rt_rq->highest_prio.next = MAX_RT_PRIO-1;
|
||||||
rt_rq->rt_nr_migratory = 0;
|
rt_rq->rt_nr_migratory = 0;
|
||||||
rt_rq->overloaded = 0;
|
rt_rq->overloaded = 0;
|
||||||
plist_head_init(&rt_rq->pushable_tasks);
|
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);
|
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->rt_nr_boosted = 0;
|
||||||
rt_rq->rq = rq;
|
rt_rq->rq = rq;
|
||||||
rt_rq->tg = tg;
|
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,
|
p = plist_first_entry(&rq->rt.pushable_tasks,
|
||||||
struct task_struct, pushable_tasks);
|
struct task_struct, pushable_tasks);
|
||||||
rq->rt.highest_prio.next = p->prio;
|
rq->rt.highest_prio.next = p->prio;
|
||||||
} else
|
} else {
|
||||||
rq->rt.highest_prio.next = MAX_RT_PRIO;
|
rq->rt.highest_prio.next = MAX_RT_PRIO-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -1147,8 +1148,9 @@ dec_rt_prio(struct rt_rq *rt_rq, int prio)
|
|||||||
sched_find_first_bit(array->bitmap);
|
sched_find_first_bit(array->bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
rt_rq->highest_prio.curr = MAX_RT_PRIO;
|
rt_rq->highest_prio.curr = MAX_RT_PRIO-1;
|
||||||
|
}
|
||||||
|
|
||||||
dec_rt_prio_smp(rt_rq, prio, prev_prio);
|
dec_rt_prio_smp(rt_rq, prio, prev_prio);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user