Re: sched: WARNING: at include/linux/cpumask.h:108 select_fallback_rq+0x241/0x280()

Peter Zijlstra
2012-03-30T14:45:44Z

On Fri, 2012-03-30 at 19:40 +0530, Srivatsa S. Bhat wrote:

> From: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
> Subject: sched: Fix incorrect usage of for_each_cpu_mask() in select_fallback_rq()
>
> The function for_each_cpu_mask() expects a *pointer* to struct cpumask
> as its second argument, whereas select_fallback_rq() passes the value
> itself. And moreover, for_each_cpu_mask() has been marked as obselete
> in include/linux/cpumask.h. So move to the more appropriate for_each_cpu()
> variant.

Gah.. so why did it compile to begin with!?

> Reported-by: Sasha Levin <levinsasha928@gmail.com>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
> ---
>
> kernel/sched/core.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index e3ed0ec..e85046d 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -1270,7 +1270,7 @@ static int select_fallback_rq(int cpu, struct task_struct *p)
> int dest_cpu;
>
> /* Look for allowed, online CPU in same node. */
> - for_each_cpu_mask(dest_cpu, *nodemask) {
> + for_each_cpu(dest_cpu, nodemask) {
> if (!cpu_online(dest_cpu))
> continue;
> if (!cpu_active(dest_cpu))
> @@ -1281,7 +1281,7 @@ static int select_fallback_rq(int cpu, struct task_struct *p)
>
> for (;;) {
> /* Any allowed, online CPU? */
> - for_each_cpu_mask(dest_cpu, *tsk_cpus_allowed(p)) {
> + for_each_cpu(dest_cpu, tsk_cpus_allowed(p)) {
> if (!cpu_online(dest_cpu))
> continue;
> if (!cpu_active(dest_cpu))
>
>