[lkml]   [2008]   [Sep]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [RFC] CPUMASK: proposal for replacing cpumask_t
    Rusty Russell wrote:
    > On Thursday 11 September 2008 08:47:58 Mike Travis wrote:
    >> Here's an initial proposal for abstracting cpumask_t to be either
    >> an array of 1 or a pointer to an array... Hopefully this will
    >> minimize the amount of code changes while providing the capabilities
    >> this change is attempting to do.
    >> Comments most welcome. ;-)
    > I think this is still "wrong way go back".
    > I'm yet to be convinced that we really need to allocate cpumasks in any fast
    > paths. And if not, we should simply allocate them everywhere. I'd rather
    > see one #ifdef around a place where we can show a perf issue.
    > Get rid of CPU_MASK_ALL et al in favour of cpu_mask_all. And cpu_mask_any_one
    > instead of CPU_MASK_CPU0 since that's usually what they want.
    > API looks like so (look Ma, no typedefs!)
    > struct cpumask *cpus;
    > cpus = cpumask_alloc();
    > if (!cpus)
    > return -ENOMEM;
    > cpumask_init_single(cpunum);
    > OR
    > cpumask_init(cpu_mask_all);
    > ...
    > cpumask_free(cpus);
    > Unmistakable and really hard to screw up. You can even be clever and not
    > reveal the struct cpumask definition so noone can declare one by accident...
    > Cheers,
    > Rusty.

    Using a typedef came from Linus, and the idea is basically if NR_CPUS fits
    into a long, then it's carried as an array of one (ie., local variable).
    If it's bigger, then it's a pointer to a remote array. The references can
    all be pointers (*cpumask), though most of the references use the cpu_XXX
    operators which already treat the references correctly (in my proposal,
    that is). That way, small systems can optimize out the indirect reference
    and the overhead becomes zero.

    Also, cpumask_alloc/free() becomes nop's for small systems.

    But I like the idea of dumping some of the initializers. I should have
    made CPU0 "cpumask_of_cpu(0)". I'll have to look at where they are used to
    see if this is feasible.


     \ /
      Last update: 2008-09-12 16:31    [W:0.037 / U:1.728 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site