[PATCH] explicitly bind idle tasks
zwane at arm.linux.org.uk
Wed Mar 2 14:13:26 EST 2005
On Tue, 1 Mar 2005, Nathan Lynch wrote:
> On Sun, Feb 27, 2005 at 02:49:28PM -0800, Andrew Morton wrote:
> > Benjamin Herrenschmidt <benh at kernel.crashing.org> wrote:
> > >
> > > > - if (cpu_is_offline(smp_processor_id()) &&
> > > > + if (cpu_is_offline(_smp_processor_id()) &&
> > > > system_state == SYSTEM_RUNNING)
> > > > cpu_die();
> > > > }
> > > > _
> > >
> > > This is the idle loop. Is that ever supposed to be preempted ?
> > Nope, it's a false positive. We had to do the same in x86's idle loop and
> > probably others will hit it.
> Perhaps I'm missing something, but is there any reason we can't do
> the following? I've tested it on ppc64, doesn't seem to break anything.
> With hotplug cpu and preempt, we tend to see smp_processor_id warnings
> from idle loop code because it's always checking whether its cpu has
> gone offline. Replacing every use of smp_processor_id with
> _smp_processor_id in all idle loop code is one solution; another way
> is explicitly binding idle threads to their cpus (the smp_processor_id
> warning does not fire if the caller is bound only to the calling cpu).
> This has the (admittedly slight) advantage of letting us know if an
> idle thread ever runs on the wrong cpu.
Makes sense to me, for some reason i thought the smp_processor_id()
function did a cpu_rq->idle check of some sort.
More information about the Linuxppc64-dev