sched/core: Simplify sched_class::pick_next_task()
Now that the indirect class call never uses the last two arguments of pick_next_task(), remove them. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: bsegall@google.com Cc: dietmar.eggemann@arm.com Cc: juri.lelli@redhat.com Cc: ktkhai@virtuozzo.com Cc: mgorman@suse.de Cc: qais.yousef@arm.com Cc: qperret@google.com Cc: rostedt@goodmis.org Cc: valentin.schneider@arm.com Cc: vincent.guittot@linaro.org Link: https://lkml.kernel.org/r/20191108131909.660595546@infradead.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
5d7d605642
commit
98c2f700ed
|
@ -3924,7 +3924,7 @@ pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
|
|||
/* Assumes fair_sched_class->next == idle_sched_class */
|
||||
if (!p) {
|
||||
put_prev_task(rq, prev);
|
||||
p = pick_next_task_idle(rq, NULL, NULL);
|
||||
p = pick_next_task_idle(rq);
|
||||
}
|
||||
|
||||
return p;
|
||||
|
@ -3949,7 +3949,7 @@ restart:
|
|||
put_prev_task(rq, prev);
|
||||
|
||||
for_each_class(class) {
|
||||
p = class->pick_next_task(rq, NULL, NULL);
|
||||
p = class->pick_next_task(rq);
|
||||
if (p)
|
||||
return p;
|
||||
}
|
||||
|
@ -6210,7 +6210,7 @@ static struct task_struct *__pick_migrate_task(struct rq *rq)
|
|||
struct task_struct *next;
|
||||
|
||||
for_each_class(class) {
|
||||
next = class->pick_next_task(rq, NULL, NULL);
|
||||
next = class->pick_next_task(rq);
|
||||
if (next) {
|
||||
next->sched_class->put_prev_task(rq, next);
|
||||
return next;
|
||||
|
|
|
@ -1770,15 +1770,12 @@ static struct sched_dl_entity *pick_next_dl_entity(struct rq *rq,
|
|||
return rb_entry(left, struct sched_dl_entity, rb_node);
|
||||
}
|
||||
|
||||
static struct task_struct *
|
||||
pick_next_task_dl(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
|
||||
static struct task_struct *pick_next_task_dl(struct rq *rq)
|
||||
{
|
||||
struct sched_dl_entity *dl_se;
|
||||
struct dl_rq *dl_rq = &rq->dl;
|
||||
struct task_struct *p;
|
||||
|
||||
WARN_ON_ONCE(prev || rf);
|
||||
|
||||
if (!sched_dl_runnable(rq))
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -6755,6 +6755,11 @@ idle:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct task_struct *__pick_next_task_fair(struct rq *rq)
|
||||
{
|
||||
return pick_next_task_fair(rq, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Account for a descheduled task:
|
||||
*/
|
||||
|
@ -10622,7 +10627,7 @@ const struct sched_class fair_sched_class = {
|
|||
|
||||
.check_preempt_curr = check_preempt_wakeup,
|
||||
|
||||
.pick_next_task = pick_next_task_fair,
|
||||
.pick_next_task = __pick_next_task_fair,
|
||||
.put_prev_task = put_prev_task_fair,
|
||||
.set_next_task = set_next_task_fair,
|
||||
|
||||
|
|
|
@ -391,13 +391,10 @@ static void set_next_task_idle(struct rq *rq, struct task_struct *next)
|
|||
schedstat_inc(rq->sched_goidle);
|
||||
}
|
||||
|
||||
struct task_struct *
|
||||
pick_next_task_idle(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
|
||||
struct task_struct *pick_next_task_idle(struct rq *rq)
|
||||
{
|
||||
struct task_struct *next = rq->idle;
|
||||
|
||||
WARN_ON_ONCE(prev || rf);
|
||||
|
||||
set_next_task_idle(rq, next);
|
||||
|
||||
return next;
|
||||
|
|
|
@ -1564,13 +1564,10 @@ static struct task_struct *_pick_next_task_rt(struct rq *rq)
|
|||
return rt_task_of(rt_se);
|
||||
}
|
||||
|
||||
static struct task_struct *
|
||||
pick_next_task_rt(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
|
||||
static struct task_struct *pick_next_task_rt(struct rq *rq)
|
||||
{
|
||||
struct task_struct *p;
|
||||
|
||||
WARN_ON_ONCE(prev || rf);
|
||||
|
||||
if (!sched_rt_runnable(rq))
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -1713,20 +1713,8 @@ struct sched_class {
|
|||
|
||||
void (*check_preempt_curr)(struct rq *rq, struct task_struct *p, int flags);
|
||||
|
||||
/*
|
||||
* Both @prev and @rf are optional and may be NULL, in which case the
|
||||
* caller must already have invoked put_prev_task(rq, prev, rf).
|
||||
*
|
||||
* Otherwise it is the responsibility of the pick_next_task() to call
|
||||
* put_prev_task() on the @prev task or something equivalent, IFF it
|
||||
* returns a next task.
|
||||
*
|
||||
* In that case (@rf != NULL) it may return RETRY_TASK when it finds a
|
||||
* higher prio class has runnable tasks.
|
||||
*/
|
||||
struct task_struct * (*pick_next_task)(struct rq *rq,
|
||||
struct task_struct *prev,
|
||||
struct rq_flags *rf);
|
||||
struct task_struct *(*pick_next_task)(struct rq *rq);
|
||||
|
||||
void (*put_prev_task)(struct rq *rq, struct task_struct *p);
|
||||
void (*set_next_task)(struct rq *rq, struct task_struct *p);
|
||||
|
||||
|
@ -1822,7 +1810,7 @@ static inline bool sched_fair_runnable(struct rq *rq)
|
|||
}
|
||||
|
||||
extern struct task_struct *pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf);
|
||||
extern struct task_struct *pick_next_task_idle(struct rq *rq, struct task_struct *prev, struct rq_flags *rf);
|
||||
extern struct task_struct *pick_next_task_idle(struct rq *rq);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
|
|
|
@ -34,11 +34,8 @@ static void set_next_task_stop(struct rq *rq, struct task_struct *stop)
|
|||
stop->se.exec_start = rq_clock_task(rq);
|
||||
}
|
||||
|
||||
static struct task_struct *
|
||||
pick_next_task_stop(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
|
||||
static struct task_struct *pick_next_task_stop(struct rq *rq)
|
||||
{
|
||||
WARN_ON_ONCE(prev || rf);
|
||||
|
||||
if (!sched_stop_runnable(rq))
|
||||
return NULL;
|
||||
|
||||
|
|
Loading…
Reference in New Issue