[PATCH] explicitly bind idle tasks

Zwane Mwaikambo 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.

Thanks,
	Zwane




More information about the Linuxppc64-dev mailing list