Messages in this thread Patch in this message | | | Date | Tue, 27 Jan 2015 13:48:15 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH 3/5] sched/deadline: Fix wrong cpudl_find() in check_preempt_equal_dl() |
| |
On Mon, Jan 19, 2015 at 04:49:38AM +0000, Xunlei Pang wrote: > +++ b/kernel/sched/deadline.c > @@ -943,14 +943,23 @@ out: > return cpu; > } > > +static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask_dl); > + > static void check_preempt_equal_dl(struct rq *rq, struct task_struct *p) > { > + struct cpumask *later_mask = > + this_cpu_cpumask_var_ptr(local_cpu_mask_dl); > + > + /* Make sure the mask is initialized first */ > + if (unlikely(!later_mask)) > + return; > + > /* > * Current can't be migrated, useless to reschedule, > * let's hope p can move out. > */ > if (rq->curr->nr_cpus_allowed == 1 || > - cpudl_find(&rq->rd->cpudl, rq->curr, NULL) == -1) > + cpudl_find(&rq->rd->cpudl, rq->curr, later_mask) == -1) > return; > > /*
But but, should you not put something in that mask before you use it?
| |