diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-09-10 17:49:58 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-09-10 17:49:58 +0100 |
commit | 78569aa816df0cccdb0c8d7e5359a85e66337265 (patch) | |
tree | d467d768599834e11a9acc4fc5a133c3d463e0c4 /xen/arch/x86/smp.c | |
parent | 354aabe18a23a04e0d49fae9771dc6169399008b (diff) | |
download | xen-78569aa816df0cccdb0c8d7e5359a85e66337265.tar.gz xen-78569aa816df0cccdb0c8d7e5359a85e66337265.tar.bz2 xen-78569aa816df0cccdb0c8d7e5359a85e66337265.zip |
x86: Handle 'self-IPI' on legacy UP systems with no APIC.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/smp.c')
-rw-r--r-- | xen/arch/x86/smp.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c index 31fc8adbe6..1d83a3aba3 100644 --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -279,6 +279,19 @@ int on_selected_cpus( ASSERT(local_irq_is_enabled()); + /* Legacy UP system with no APIC to deliver IPIs? */ + if ( unlikely(!cpu_has_apic) ) + { + ASSERT(num_online_cpus() == 1); + if ( cpu_isset(0, selected) ) + { + local_irq_disable(); + func(info); + local_irq_enable(); + } + return 0; + } + if ( nr_cpus == 0 ) return 0; |