aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/smp.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-06-29 13:16:22 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-06-29 13:16:22 +0100
commit4580002f0f82881ca18d95336e03c661a1a6fb25 (patch)
treeed4df30b2ed64b58f1275064d010f4ed03dce282 /xen/arch/x86/smp.c
parent2aaf60746f7a9586a064e8f680f0c4aab4accc4b (diff)
downloadxen-4580002f0f82881ca18d95336e03c661a1a6fb25.tar.gz
xen-4580002f0f82881ca18d95336e03c661a1a6fb25.tar.bz2
xen-4580002f0f82881ca18d95336e03c661a1a6fb25.zip
x86: send_IPI_mask() ignores offline CPUs in given cpumask.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/arch/x86/smp.c')
-rw-r--r--xen/arch/x86/smp.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c
index 239dde6fb7..1c231b00b1 100644
--- a/xen/arch/x86/smp.c
+++ b/xen/arch/x86/smp.c
@@ -144,6 +144,7 @@ void send_IPI_mask_flat(const cpumask_t *cpumask, int vector)
unsigned long cfg;
unsigned long flags;
+ mask &= cpus_addr(cpu_online_map)[0];
mask &= ~(1UL << smp_processor_id());
if ( mask == 0 )
return;
@@ -183,7 +184,7 @@ void send_IPI_mask_phys(const cpumask_t *mask, int vector)
for_each_cpu_mask ( query_cpu, *mask )
{
- if ( query_cpu == smp_processor_id() )
+ if ( !cpu_online(query_cpu) || (query_cpu == smp_processor_id()) )
continue;
/*