[PATCH 3/20] powerpc/mm: Add HW threads support to no_hash TLB management
Dave Kleikamp
shaggy at linux.vnet.ibm.com
Tue Aug 4 03:57:45 EST 2009
On Mon, 2009-08-03 at 12:06 -0500, Dave Kleikamp wrote:
> On Mon, 2009-08-03 at 11:21 -0500, Kumar Gala wrote:
> > On Aug 2, 2009, at 9:03 PM, Michael Ellerman wrote:
> >
> > > for (cpu = cpu_first_thread_in_core(cpu);
> > > cpu <= cpu_last_thread_in_core(cpu); cpu++)
> > > __clear_bit(id, stale_map[cpu]);
> > >
> > > ==
> > >
> > > cpu = cpu_first_thread_in_core(cpu);
> > > while (cpu <= cpu_last_thread_in_core(cpu)) {
> > > __clear_bit(id, stale_map[cpu]);
> > > cpu++;
> > > }
>
> cpu_last_thread_in_core(cpu) is a moving target. You want something
> like:
>
> cpu = cpu_first_thread_in_core(cpu);
> last = cpu_last_thread_in_core(cpu);
> while (cpu <= last) {
> __clear_bit(id, stale_map[cpu]);
> cpu++;
> }
Or, keeping the for loop:
for (cpu = cpu_first_thread_in_core(cpu), last =
cpu_last_thread_in_core(cpu);
cpu <= last; cpu++)
cpu++;
>
> > >
> > > cpu = 0
> > > cpu <= 1
> > > cpu++ (1)
> > > cpu <= 1
> > > cpu++ (2)
> > > cpu <= 3
> > > ...
> >
> > Which is pretty much what I see, in a dual core setup, I get an oops
> > because we are trying to clear cpu #2 (which clearly doesn't exist)
> >
> > cpu = 1
> > (in loop)
> > clearing 1
> > clearing 2
> > OOPS
> >
> > - k
>
--
David Kleikamp
IBM Linux Technology Center
More information about the Linuxppc-dev
mailing list