x86: change flush_tlb_others to take a const struct cpumask
authorRusty Russell <rusty@rustcorp.com.au>
Sun, 11 Jan 2009 05:58:09 +0000 (21:58 -0800)
committerIngo Molnar <mingo@elte.hu>
Sun, 11 Jan 2009 18:13:06 +0000 (19:13 +0100)
commit4595f9620cda8a1e973588e743cf5f8436dd20c6
tree98a47cff17f58262979c7d04590cb3ffc0deead9
parent802bf931f2688ad125b73db597ce63cc842fb27a
x86: change flush_tlb_others to take a const struct cpumask

Impact: reduce stack usage, use new cpumask API.

This is made a little more tricky by uv_flush_tlb_others which
actually alters its argument, for an IPI to be sent to the remaining
cpus in the mask.

I solve this by allocating a cpumask_var_t for this case and falling back
to IPI should this fail.

To eliminate temporaries in the caller, all flush_tlb_others implementations
now do the this-cpu-elimination step themselves.

Note also the curious "cpus_or(f->flush_cpumask, cpumask, f->flush_cpumask)"
which has been there since pre-git and yet f->flush_cpumask is always zero
at this point.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Mike Travis <travis@sgi.com>
arch/x86/include/asm/paravirt.h
arch/x86/include/asm/tlbflush.h
arch/x86/include/asm/uv/uv_bau.h
arch/x86/kernel/tlb_32.c
arch/x86/kernel/tlb_64.c
arch/x86/kernel/tlb_uv.c
arch/x86/xen/enlighten.c