Re: Optimisation for smp_num_cpus loop in hotplug

From: Rusty Russell (rusty@rustcorp.com.au)
Date: Fri Jun 21 2002 - 14:17:19 EST


In message <200206211531.g5LFViZ07396@localhost.localdomain> you write:
> rusty@rustcorp.com.au said:
> > Yeah, it's simple, and none of the current ones are really critical.
> > But I think we're better off with:
> > for (i = first_cpu(); i < NR_CPUS; i = next_cpu(i)) {
>
> > Which is simple enough not to need an iterator macro, and also has the
> > bonus of giving irq-balancing et al. an efficient, portable way of
> > looking for the "next" cpu.
>
> So you're thinking that next_cpu(i) is something like
>
> __ffs((~(unsigned)((1<<i)-1) & cpu_online_map)
>
> plus an extra exception piece to take next_cpu(i) above NR_CPUS if we have no
 
> remaining CPUs (because __ffs would be undefined)? It's the exception piece
> that I don't see how to do really efficiently.

find_next_bit already does this, but the generic one would look
something like:

        unsigned long mask = ~(unsigned long)((1<<(cpu+1))-1);
        if (mask & cpu_online_map)
                return _ffs(mask & cpu_online_map);
        return NR_CPUS;

Cheers!
Rusty.

--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Jun 23 2002 - 22:00:25 EST