debuggers.hg
changeset 16641:124f7a7f5f84
[IA64] Stop all cpus at panic
Current panic() of hypervisor doesn't stop all cpus.
So domains can work after hypervisor panic (when using
noreboot option). If dom0 continues to work after
xen panic, the system may get into serious problems.
This patch fixes the issue.
I chose cpu_halt() to stop other cpus by smp_send_stop().
I think it should work fine for kexec. machine_halt()
is only spinloop for leaving the panic calltrace.
Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
Current panic() of hypervisor doesn't stop all cpus.
So domains can work after hypervisor panic (when using
noreboot option). If dom0 continues to work after
xen panic, the system may get into serious problems.
This patch fixes the issue.
I chose cpu_halt() to stop other cpus by smp_send_stop().
I think it should work fine for kexec. machine_halt()
is only spinloop for leaving the panic calltrace.
Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
author | Alex Williamson <alex.williamson@hp.com> |
---|---|
date | Tue Dec 11 10:22:37 2007 -0700 (2007-12-11) |
parents | 35b2c54f59d5 |
children | be02461e9810 |
files | xen/arch/ia64/linux-xen/smp.c xen/arch/ia64/xen/domain.c |
line diff
1.1 --- a/xen/arch/ia64/linux-xen/smp.c Tue Dec 11 10:14:11 2007 -0700 1.2 +++ b/xen/arch/ia64/linux-xen/smp.c Tue Dec 11 10:22:37 2007 -0700 1.3 @@ -122,9 +122,7 @@ stop_this_cpu (void) 1.4 cpu_clear(smp_processor_id(), cpu_online_map); 1.5 max_xtp(); 1.6 local_irq_disable(); 1.7 -#ifndef XEN 1.8 cpu_halt(); 1.9 -#endif 1.10 } 1.11 1.12 void 1.13 @@ -132,9 +130,7 @@ cpu_die(void) 1.14 { 1.15 max_xtp(); 1.16 local_irq_disable(); 1.17 -#ifndef XEN 1.18 cpu_halt(); 1.19 -#endif 1.20 /* Should never be here */ 1.21 BUG(); 1.22 for (;;);
2.1 --- a/xen/arch/ia64/xen/domain.c Tue Dec 11 10:14:11 2007 -0700 2.2 +++ b/xen/arch/ia64/xen/domain.c Tue Dec 11 10:22:37 2007 -0700 2.3 @@ -2207,10 +2207,12 @@ extern void cpu_halt(void); 2.4 void machine_halt(void) 2.5 { 2.6 console_start_sync(); 2.7 - if (running_on_sim) 2.8 - printk ("machine_halt called. spinning...\n"); 2.9 - else 2.10 - cpu_halt(); 2.11 + 2.12 +#ifdef CONFIG_SMP 2.13 + smp_send_stop(); 2.14 +#endif 2.15 + 2.16 + printk ("machine_halt called. spinning...\n"); 2.17 while(1); 2.18 } 2.19