|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-changelog
[Xen-changelog] [xen-3.4-testing] Disable HPET broadcast mode on	kexec.
 
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1254410199 -3600
# Node ID 9ea1640248e78065851e4098f94a4a139fb5524e
# Parent  a154809facf81cc5a708ddf1b566115631af860e
Disable HPET broadcast mode on kexec.
Without this the new kernel cannot receive timer interrupts from the
legacy sources. Hangs are observed in the second kernel's
"check_timer()" routing or at "Checking 'hlt' instruction."
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
xen-unstable changeset:   20265:26708cdf86be
xen-unstable date:        Thu Oct 01 12:25:36 2009 +0100
---
 xen/arch/x86/crash.c |    4 ++++
 xen/arch/x86/hpet.c  |    7 ++++---
 2 files changed, 8 insertions(+), 3 deletions(-)
diff -r a154809facf8 -r 9ea1640248e7 xen/arch/x86/crash.c
--- a/xen/arch/x86/crash.c      Thu Oct 01 16:16:07 2009 +0100
+++ b/xen/arch/x86/crash.c      Thu Oct 01 16:16:39 2009 +0100
@@ -26,6 +26,7 @@
 #include <public/xen.h>
 #include <asm/shared.h>
 #include <asm/hvm/support.h>
+#include <asm/hpet.h>
 
 static atomic_t waiting_for_crash_ipi;
 static unsigned int crashing_cpu;
@@ -97,6 +98,9 @@ void machine_crash_shutdown(void)
 
     nmi_shootdown_cpus();
 
+    if ( hpet_broadcast_is_available() )
+        hpet_disable_legacy_broadcast();
+
     disable_IO_APIC();
 
     hvm_cpu_down();
diff -r a154809facf8 -r 9ea1640248e7 xen/arch/x86/hpet.c
--- a/xen/arch/x86/hpet.c       Thu Oct 01 16:16:07 2009 +0100
+++ b/xen/arch/x86/hpet.c       Thu Oct 01 16:16:39 2009 +0100
@@ -600,8 +600,9 @@ void hpet_disable_legacy_broadcast(void)
 void hpet_disable_legacy_broadcast(void)
 {
     u32 cfg;
-
-    spin_lock_irq(&legacy_hpet_event.lock);
+    unsigned long flags;
+
+    spin_lock_irqsave(&legacy_hpet_event.lock, flags);
 
     legacy_hpet_event.flags |= HPET_EVT_DISABLE;
 
@@ -615,7 +616,7 @@ void hpet_disable_legacy_broadcast(void)
     cfg &= ~HPET_CFG_LEGACY;
     hpet_write32(cfg, HPET_CFG);
 
-    spin_unlock_irq(&legacy_hpet_event.lock);
+    spin_unlock_irqrestore(&legacy_hpet_event.lock, flags);
 
     smp_send_event_check_mask(cpu_online_map);
 }
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread> |  
- [Xen-changelog] [xen-3.4-testing] Disable HPET broadcast mode on	kexec.,
Xen patchbot-3.4-testing <=
  
 |  
  
 | 
    | 
  
  
    |   | 
    |