ia64/xen-unstable

changeset 16580: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>
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