From d02e5ed8d55e2a2b2735232ea1da40ffbf4c0932 Mon Sep 17 00:00:00 2001 From: Dmitry Adamushko Date: Mon, 15 Oct 2007 17:00:07 +0200 Subject: [PATCH] sched: sched_setscheduler() fix Fix a problem in the 'sched-group' patch for !CONFIG_FAIR_GROUP_SCHED. description: sched_setscheduler() { ... if (task_running()) p->sched_class->put_prev_entity(); [ this one sets up cfs_rq->curr to NULL ] ... if (task_running) p->sched_class->set_curr_task(); [ and this one is a _NOP_ (empty) for !CONFIG_FAIR_GROUP_SCHED ] As a result, the task continues to run with cfs_rq->curr == NULL... no crashes (due to checks for !NULL in place) but e.g. update_curr() effectively becomes a NOP... i.e. runtime statistics for this task is not accounted untill it's rescheduled anew. Signed-off-by: Dmitry Adamushko Signed-off-by: Ingo Molnar Signed-off-by: Peter Zijlstra Reviewed-by: Thomas Gleixner --- kernel/sched_fair.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 12ab9338d563..144f3ef97380 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -984,6 +984,10 @@ static void set_curr_task_fair(struct rq *rq) #else static void set_curr_task_fair(struct rq *rq) { + struct sched_entity *se = &rq->curr->se; + struct cfs_rq *cfs_rq = cfs_rq_of(se); + + cfs_rq->curr = se; } #endif -- 2.30.2