Re: [PATCH] 2.5.21 Nonlinear CPU support

From: Rusty Russell (
Date: Wed Jun 12 2002 - 21:42:13 EST

In message <> you write:
> This means keeping a logical->physical map and iterating like this:
> for(i = 0; i < nr_online_cpus; ++i)
> do_something_with(cpu_logical_map(i));
> (I care because my performance-monitoring counters driver by necessity
> is closely tied to CPU identities and the set of online CPUs.)

I disagreed, so I measured, and you are right 8( I hate that.

Simply reading the performance monitors across all CPUs is a case
where the extra loop overhead is significant (although cache effects
may still dominate): 9 times slower on PPC if there are only 2 CPUs
and NR_CPUS is 32.

I'd definitely prefer a per-arch for_each_cpu() implementation to
exposing a mapping, eg:

        /* No hotplug cpus on this arch. */
        extern int max_cpu_num;
        #define for_each_cpu(__i) for (__i = 0; __i < max_cpu_num; __i++)

        extern int cpu_next_map[NR_CPUS];
        #define for_each_cpu(__i) \
                for (__i = 0; __i < NR_CPUS; __i = cpu_next_map[__i])

[ Soapbox mode: cut here ]

My philosophy is that parts of infrastructure which is not used by >
90% of people tends to get misused. Two recent concrete examples:

        cpu_logical_map() is currently a noop on x86
                => Ingo fucked it up in his initial scheduler impl.
        copy_from_user() returns POSTIVE on failure
                => 7% of uses of copy_from_user were buggy in 2.5.19.

My feeling is that kernel coding is becoming more challenging (SMP,
preemption, portability), and our bug count and time-to-kernel-mastery
is climbing as a result. One method of countering this is by
carefully designing infrastructure to make the simplest method for
writing common operations also the correct one.

Sometimes old-timers don't see infrastructure they are used to as a
problem, but even they make mistakes.


  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
More majordomo info at
Please read the FAQ at

This archive was generated by hypermail 2b29 : Sat Jun 15 2002 - 22:00:27 EST