kernel/sched.c uses task_set_cpu() and task_release_cpu() to modify the
cpus_runnable flag. On UP, task_set_cpu() is called but
task_release_cpu() is not, it is wrapped in #ifdef CONFIG_SMP. The
result is that all tasks have cpus_runnable=1 and task_has_cpu()
reports true for all tasks.
How to confuse a debugger in one easy lesson :(