Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cbb6214 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge branch 'tip/sched/core' of...

Merge branch 'tip/sched/core' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

 into sched/core

Pull a scheduler optimization commit from Steven Rostedt.

Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 668ce0ac 8d3d5ada
Loading
Loading
Loading
Loading
+26 −30
Original line number Original line Diff line number Diff line
@@ -1803,45 +1803,41 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p)
static void set_cpus_allowed_rt(struct task_struct *p,
static void set_cpus_allowed_rt(struct task_struct *p,
				const struct cpumask *new_mask)
				const struct cpumask *new_mask)
{
{
	int weight = cpumask_weight(new_mask);
	struct rq *rq;
	int weight;


	BUG_ON(!rt_task(p));
	BUG_ON(!rt_task(p));


	/*
	if (!p->on_rq)
	 * Update the migration status of the RQ if we have an RT task
		return;
	 * which is running AND changing its weight value.
	 */
	if (p->on_rq && (weight != p->rt.nr_cpus_allowed)) {
		struct rq *rq = task_rq(p);


		if (!task_current(rq, p)) {
	weight = cpumask_weight(new_mask);
			/*
			 * Make sure we dequeue this task from the pushable list
			 * before going further.  It will either remain off of
			 * the list because we are no longer pushable, or it
			 * will be requeued.
			 */
			if (p->rt.nr_cpus_allowed > 1)
				dequeue_pushable_task(rq, p);


	/*
	/*
			 * Requeue if our weight is changing and still > 1
	 * Only update if the process changes its state from whether it
	 * can migrate or not.
	 */
	 */
			if (weight > 1)
	if ((p->rt.nr_cpus_allowed > 1) == (weight > 1))
				enqueue_pushable_task(rq, p);
		return;


		}
	rq = task_rq(p);


		if ((p->rt.nr_cpus_allowed <= 1) && (weight > 1)) {
	/*
			rq->rt.rt_nr_migratory++;
	 * The process used to be able to migrate OR it can now migrate
		} else if ((p->rt.nr_cpus_allowed > 1) && (weight <= 1)) {
	 */
	if (weight <= 1) {
		if (!task_current(rq, p))
			dequeue_pushable_task(rq, p);
		BUG_ON(!rq->rt.rt_nr_migratory);
		BUG_ON(!rq->rt.rt_nr_migratory);
		rq->rt.rt_nr_migratory--;
		rq->rt.rt_nr_migratory--;
	} else {
		if (!task_current(rq, p))
			enqueue_pushable_task(rq, p);
		rq->rt.rt_nr_migratory++;
	}
	}


	update_rt_migration(&rq->rt);
	update_rt_migration(&rq->rt);
}
}
}


/* Assumes rq->lock is held */
/* Assumes rq->lock is held */
static void rq_online_rt(struct rq *rq)
static void rq_online_rt(struct rq *rq)