Messages in this thread |  | | | Date | Mon, 8 Dec 2008 14:43:31 -0800 | | From | Andrew Morton <> | | Subject | Re: [PACH] smp: uninline num_online_cpus() & num_possible_cpus() |
| |
On Fri, 05 Dec 2008 18:33:44 +0100 Eric Dumazet <dada1@cosmosbay.com> wrote:
> num_online_cpus() and num_possible_cpus() are not performance > critical and are quite large. > > Unlining them shrinks kernel text size by 7523 bytes on x86, > if NR_CPUS>32 > > Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> > --- > include/linux/cpumask.h | 4 ++-- > init/main.c | 12 ++++++++++++ > 2 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h > index 21e1dd4..f9b2b51 100644 > --- a/include/linux/cpumask.h > +++ b/include/linux/cpumask.h > @@ -507,8 +507,8 @@ extern cpumask_t cpu_present_map; > extern cpumask_t cpu_active_map; > > #if NR_CPUS > 1 > -#define num_online_cpus() cpus_weight_nr(cpu_online_map) > -#define num_possible_cpus() cpus_weight_nr(cpu_possible_map) > +extern int num_online_cpus(void); > +extern int num_possible_cpus(void); > #define num_present_cpus() cpus_weight_nr(cpu_present_map) > #define cpu_online(cpu) cpu_isset((cpu), cpu_online_map) > #define cpu_possible(cpu) cpu_isset((cpu), cpu_possible_map) > diff --git a/init/main.c b/init/main.c > index 7e117a2..a1a3e55 100644 > --- a/init/main.c > +++ b/init/main.c > @@ -376,6 +376,18 @@ EXPORT_SYMBOL(cpu_mask_all); > int nr_cpu_ids __read_mostly = NR_CPUS; > EXPORT_SYMBOL(nr_cpu_ids); > > +int num_online_cpus(void) > +{ > + return cpus_weight_nr(cpu_online_map); > +} > +EXPORT_SYMBOL(num_online_cpus); > + > +int num_possible_cpus(void) > +{ > + return cpus_weight_nr(cpu_possible_map); > +} > +EXPORT_SYMBOL(num_possible_cpus); > + > /* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */ > static void __init setup_nr_cpu_ids(void) > {
Looks OK.
That area in init/main.c is horrid - it took quite some staring through the ifdef tangle for me to convince myself that the code you added was reliably SMP-only.
Perhaps sometime a lot of this cpu masky code should be moved over to kernel/cpu.c and cleaned up.
|  |