diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-05-27 11:15:08 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-05-27 11:15:08 +0100 |
commit | c3da952a0261cb2fa381154a6f22b758a4bd843b (patch) | |
tree | 92496e6fa23a402388431550351e458deedf84ec /xen/common/cpu.c | |
parent | cf5e6f2d34413cac233939ab701191655a587ca7 (diff) | |
download | xen-c3da952a0261cb2fa381154a6f22b758a4bd843b.tar.gz xen-c3da952a0261cb2fa381154a6f22b758a4bd843b.tar.bz2 xen-c3da952a0261cb2fa381154a6f22b758a4bd843b.zip |
Pass cpumasks by reference always.
Rather than passing cpumasks by value in all cases (which is
problematic for large NR_CPUS configurations), pass them 'by
reference' (i.e. through a pointer to a const cpumask).
On x86 this changes send_IPI_mask() to always only send IPIs to remote
CPUs (meaning any caller needing to handle the current CPU as well has
to do so on its own).
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/common/cpu.c')
-rw-r--r-- | xen/common/cpu.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/xen/common/cpu.c b/xen/common/cpu.c new file mode 100644 index 0000000000..96cba72e9e --- /dev/null +++ b/xen/common/cpu.c @@ -0,0 +1,26 @@ +#include <xen/config.h> +#include <xen/cpumask.h> + +/* + * cpu_bit_bitmap[] is a special, "compressed" data structure that + * represents all NR_CPUS bits binary values of 1<<nr. + * + * It is used by cpumask_of() to get a constant address to a CPU + * mask value that has a single bit set only. + */ + +/* cpu_bit_bitmap[0] is empty - so we can back into it */ +#define MASK_DECLARE_1(x) [x+1][0] = 1UL << (x) +#define MASK_DECLARE_2(x) MASK_DECLARE_1(x), MASK_DECLARE_1(x+1) +#define MASK_DECLARE_4(x) MASK_DECLARE_2(x), MASK_DECLARE_2(x+2) +#define MASK_DECLARE_8(x) MASK_DECLARE_4(x), MASK_DECLARE_4(x+4) + +const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)] = { + + MASK_DECLARE_8(0), MASK_DECLARE_8(8), + MASK_DECLARE_8(16), MASK_DECLARE_8(24), +#if BITS_PER_LONG > 32 + MASK_DECLARE_8(32), MASK_DECLARE_8(40), + MASK_DECLARE_8(48), MASK_DECLARE_8(56), +#endif +}; |