• Rusty Russell's avatar
    cpumask: smp_call_function_many() · 54b11e6d
    Rusty Russell authored
    Impact: Implementation change to remove cpumask_t from stack.
    
    Actually change smp_call_function_mask() to smp_call_function_many().
    We avoid cpumasks on the stack in this version.
    
    (S390 has its own version, but that's going away apparently).
    
    We have to do some dancing to figure out if 0 or 1 other cpus are in
    the mask supplied and the online mask without allocating a tmp
    cpumask.  It's still fairly cheap.
    
    We allocate the cpumask at the end of the call_function_data
    structure: if allocation fails we fallback to smp_call_function_single
    rather than using the baroque quiescing code (which needs a cpumask on
    stack).
    
    (Thanks to Hiroshi Shimamoto for spotting several bugs in previous versions!)
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: default avatarMike Travis <travis@sgi.com>
    Cc: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
    Cc: npiggin@suse.de
    Cc: axboe@kernel.dk
    54b11e6d
smp.h 4.78 KB