sched: convert check_preempt_equal_prio to cpumask_var_t.

Previous thread: sched: convert struct cpupri_vec cpumask_var_t. by Linux Kernel Mailing List on Friday, January 2, 2009 - 2:04 pm. (1 message)

Next thread: sched: convert local_cpu_mask to cpumask_var_t. by Linux Kernel Mailing List on Friday, January 2, 2009 - 2:04 pm. (1 message)
From: Linux Kernel Mailing List
Date: Friday, January 2, 2009 - 2:04 pm

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=24600c...
Commit:     24600ce89a819a8f2fb4fd69fd777218a82ade20
Parent:     68e74568fbe5854952355e942acca51f138096d9
Author:     Rusty Russell <rusty@rustcorp.com.au>
AuthorDate: Tue Nov 25 02:35:13 2008 +1030
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Mon Nov 24 17:52:28 2008 +0100

    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: Rusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 kernel/sched_rt.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
index 820fc42..1fa1362 100644
--- a/kernel/sched_rt.c
+++ b/kernel/sched_rt.c
@@ -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);
 }
 ...
Previous thread: sched: convert struct cpupri_vec cpumask_var_t. by Linux Kernel Mailing List on Friday, January 2, 2009 - 2:04 pm. (1 message)

Next thread: sched: convert local_cpu_mask to cpumask_var_t. by Linux Kernel Mailing List on Friday, January 2, 2009 - 2:04 pm. (1 message)