Loading kernel/sched_rt.c +22 −14 Original line number Diff line number Diff line Loading @@ -960,16 +960,17 @@ static struct task_struct *pick_next_highest_task_rt(struct rq *rq, int cpu) static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask); static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask) static inline int pick_optimal_cpu(int this_cpu, const struct cpumask *mask) { int first; /* "this_cpu" is cheaper to preempt than a remote processor */ if ((this_cpu != -1) && cpu_isset(this_cpu, *mask)) if ((this_cpu != -1) && cpumask_test_cpu(this_cpu, mask)) return this_cpu; first = first_cpu(*mask); if (first != NR_CPUS) first = cpumask_first(mask); if (first < nr_cpu_ids) return first; return -1; Loading @@ -981,6 +982,7 @@ static int find_lowest_rq(struct task_struct *task) struct cpumask *lowest_mask = __get_cpu_var(local_cpu_mask); int this_cpu = smp_processor_id(); int cpu = task_cpu(task); cpumask_var_t domain_mask; if (task->rt.nr_cpus_allowed == 1) return -1; /* No other targets possible */ Loading Loading @@ -1013,20 +1015,26 @@ static int find_lowest_rq(struct task_struct *task) if (this_cpu == cpu) this_cpu = -1; /* Skip this_cpu opt if the same */ if (alloc_cpumask_var(&domain_mask, GFP_ATOMIC)) { for_each_domain(cpu, sd) { if (sd->flags & SD_WAKE_AFFINE) { cpumask_t domain_mask; int best_cpu; cpumask_and(&domain_mask, sched_domain_span(sd), cpumask_and(domain_mask, sched_domain_span(sd), lowest_mask); best_cpu = pick_optimal_cpu(this_cpu, &domain_mask); if (best_cpu != -1) domain_mask); if (best_cpu != -1) { free_cpumask_var(domain_mask); return best_cpu; } } } free_cpumask_var(domain_mask); } /* * And finally, if there were no matches within the domains Loading Loading
kernel/sched_rt.c +22 −14 Original line number Diff line number Diff line Loading @@ -960,16 +960,17 @@ static struct task_struct *pick_next_highest_task_rt(struct rq *rq, int cpu) static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask); static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask) static inline int pick_optimal_cpu(int this_cpu, const struct cpumask *mask) { int first; /* "this_cpu" is cheaper to preempt than a remote processor */ if ((this_cpu != -1) && cpu_isset(this_cpu, *mask)) if ((this_cpu != -1) && cpumask_test_cpu(this_cpu, mask)) return this_cpu; first = first_cpu(*mask); if (first != NR_CPUS) first = cpumask_first(mask); if (first < nr_cpu_ids) return first; return -1; Loading @@ -981,6 +982,7 @@ static int find_lowest_rq(struct task_struct *task) struct cpumask *lowest_mask = __get_cpu_var(local_cpu_mask); int this_cpu = smp_processor_id(); int cpu = task_cpu(task); cpumask_var_t domain_mask; if (task->rt.nr_cpus_allowed == 1) return -1; /* No other targets possible */ Loading Loading @@ -1013,20 +1015,26 @@ static int find_lowest_rq(struct task_struct *task) if (this_cpu == cpu) this_cpu = -1; /* Skip this_cpu opt if the same */ if (alloc_cpumask_var(&domain_mask, GFP_ATOMIC)) { for_each_domain(cpu, sd) { if (sd->flags & SD_WAKE_AFFINE) { cpumask_t domain_mask; int best_cpu; cpumask_and(&domain_mask, sched_domain_span(sd), cpumask_and(domain_mask, sched_domain_span(sd), lowest_mask); best_cpu = pick_optimal_cpu(this_cpu, &domain_mask); if (best_cpu != -1) domain_mask); if (best_cpu != -1) { free_cpumask_var(domain_mask); return best_cpu; } } } free_cpumask_var(domain_mask); } /* * And finally, if there were no matches within the domains Loading