lkml.org 
[lkml]   [2008]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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.



    \
     
     \ /
      Last update: 2008-12-08 23:47    [W:0.026 / U:0.656 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site