x86: reprogram LAPIC timer in pit_broadcast_exit
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 29 Jul 2008 09:42:30 +0000 (10:42 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 29 Jul 2008 09:42:30 +0000 (10:42 +0100)
Thus to remove possible timer expiring delay caused by deep C state
LAPIC timer stopping.

Signed-off-by: Wei Gang <gang.wei@intel.com>
xen/arch/x86/time.c

index 570a6308849372e92cd7ff0c4d3bc48462bb2183..1c73840b6149af9af6f2377b104e50f83169f578 100644 (file)
@@ -1135,7 +1135,10 @@ void pit_broadcast_enter(void)
 
 void pit_broadcast_exit(void)
 {
-    cpu_clear(smp_processor_id(), pit_broadcast_mask);
+    int cpu = smp_processor_id();
+
+    if ( cpu_test_and_clear(cpu, pit_broadcast_mask) )
+        reprogram_timer(per_cpu(timer_deadline, cpu));
 }
 
 int pit_broadcast_is_available(void)