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

Commit 24600ce8 authored by Rusty Russell's avatar Rusty Russell Committed by Ingo Molnar
Browse files

sched: convert check_preempt_equal_prio to cpumask_var_t.



Impact: stack reduction for large NR_CPUS

Dynamically allocating cpumasks (when CONFIG_CPUMASK_OFFSTACK) saves
stack space.

We simply return if the allocation fails: since we don't use it we
could just pass NULL to cpupri_find and have it handle that.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 68e74568
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -805,17 +805,20 @@ static int select_task_rq_rt(struct task_struct *p, int sync)

static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
{
	cpumask_t mask;
	cpumask_var_t mask;

	if (rq->curr->rt.nr_cpus_allowed == 1)
		return;

	if (p->rt.nr_cpus_allowed != 1
	    && cpupri_find(&rq->rd->cpupri, p, &mask))
	if (!alloc_cpumask_var(&mask, GFP_ATOMIC))
		return;

	if (!cpupri_find(&rq->rd->cpupri, rq->curr, &mask))
		return;
	if (p->rt.nr_cpus_allowed != 1
	    && cpupri_find(&rq->rd->cpupri, p, mask))
		goto free;

	if (!cpupri_find(&rq->rd->cpupri, rq->curr, mask))
		goto free;

	/*
	 * There appears to be other cpus that can accept
@@ -824,6 +827,8 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
	 */
	requeue_task_rt(rq, p, 1);
	resched_task(rq->curr);
free:
	free_cpumask_var(mask);
}

#endif /* CONFIG_SMP */