Messages in this thread | | | Date | Thu, 30 Oct 2014 06:57:21 +0800 | From | Wanpeng Li <> | Subject | Re: [PATCH 1/6] sched/rt: check if curr can be pushed/pulled somewhere else in advance |
| |
Cc Kirill, 2014/10/27 9:41, Wanpeng Li: > This patch checks if current can be pushed/pulled somewhere else > in advance to make logic clear. > > - If current can't be migrated, useless to reschedule, let's hope > task can move out. > - If task is migratable, so let's not schedule it and see if it > can be pushed or pulled somewhere else. > > Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com> > --- > kernel/sched/rt.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c > index 87ea5bf..ca1b7c7 100644 > --- a/kernel/sched/rt.c > +++ b/kernel/sched/rt.c > @@ -1351,16 +1351,22 @@ out: > > static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p) > { > - if (rq->curr->nr_cpus_allowed == 1) > + /* > + * Current can't be migrated, useless to reschedule, > + * let's hope p can move out. > + */ > + if (rq->curr->nr_cpus_allowed == 1 || > + !cpupri_find(&rq->rd->cpupri, rq->curr, NULL)) > return; > > + /* > + * p is migratable, so let's not schedule it and > + * see if it is pushed or pulled somewhere else. > + */ > if (p->nr_cpus_allowed != 1 > && cpupri_find(&rq->rd->cpupri, p, NULL)) > return; > > - if (!cpupri_find(&rq->rd->cpupri, rq->curr, NULL)) > - return; > - > /* > * There appears to be other cpus that can accept > * current and none to run 'p', so lets reschedule
| |