Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76140
b: refs/heads/master
c: 06f90db
h: refs/heads/master
v: v3
  • Loading branch information
Gregory Haskins authored and Ingo Molnar committed Jan 25, 2008
1 parent 4a8f23b commit dad0400
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 17b3279b48835eb522d842eae16f541da3729c8a
refs/heads/master: 06f90dbd7610d51549004ea9c2ada337831eb292
25 changes: 18 additions & 7 deletions trunk/kernel/sched_rt.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ static int find_lowest_cpus(struct task_struct *task, cpumask_t *lowest_mask)
int cpu;
cpumask_t *valid_mask = &__get_cpu_var(valid_cpu_mask);
int lowest_prio = -1;
int ret = 0;
int count = 0;

cpus_clear(*lowest_mask);
cpus_and(*valid_mask, cpu_online_map, task->cpus_allowed);
Expand All @@ -316,7 +316,7 @@ static int find_lowest_cpus(struct task_struct *task, cpumask_t *lowest_mask)

/* We look for lowest RT prio or non-rt CPU */
if (rq->rt.highest_prio >= MAX_RT_PRIO) {
if (ret)
if (count)
cpus_clear(*lowest_mask);
cpu_set(rq->cpu, *lowest_mask);
return 1;
Expand All @@ -328,14 +328,17 @@ static int find_lowest_cpus(struct task_struct *task, cpumask_t *lowest_mask)
if (rq->rt.highest_prio > lowest_prio) {
/* new low - clear old data */
lowest_prio = rq->rt.highest_prio;
cpus_clear(*lowest_mask);
if (count) {
cpus_clear(*lowest_mask);
count = 0;
}
}
cpu_set(rq->cpu, *lowest_mask);
ret = 1;
count++;
}
}

return ret;
return count;
}

static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask)
Expand All @@ -359,9 +362,17 @@ static int find_lowest_rq(struct task_struct *task)
cpumask_t *lowest_mask = &__get_cpu_var(local_cpu_mask);
int this_cpu = smp_processor_id();
int cpu = task_cpu(task);
int count = find_lowest_cpus(task, lowest_mask);

if (!find_lowest_cpus(task, lowest_mask))
return -1;
if (!count)
return -1; /* No targets found */

/*
* There is no sense in performing an optimal search if only one
* target is found.
*/
if (count == 1)
return first_cpu(*lowest_mask);

/*
* At this point we have built a mask of cpus representing the
Expand Down

0 comments on commit dad0400

Please sign in to comment.