diff --git a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c index 01584bda33..9ff844d70e 100644 --- a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c +++ b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c @@ -393,14 +393,17 @@ static inline void do_timer_interrupt(int irq, void *dev_id, unsigned long ticks = 0; long sec_diff; - retry: - __get_time_values_from_xen(); + do { + __get_time_values_from_xen(); + + delta = (s64)(shadow_system_time + + (__get_time_delta_usecs() * 1000) - + processed_system_time); + } + while ( !TIME_VALUES_UP_TO_DATE ); - if ( (delta = (s64)(shadow_system_time + __get_time_delta_usecs() * 1000 - - processed_system_time)) < 0 ) + if ( unlikely(delta < 0) ) { - if (!TIME_VALUES_UP_TO_DATE) - goto retry; printk("Timer ISR: Time went backwards: %lld\n", delta); return; } diff --git a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c b/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c index 9b5c862892..15b68ba45d 100644 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c +++ b/linux-2.6.8.1-xen-sparse/arch/xen/i386/kernel/time.c @@ -367,15 +367,16 @@ static inline void do_timer_interrupt(int irq, void *dev_id, s64 delta, nsec; long sec_diff, wtm_nsec; - retry: - __get_time_values_from_xen(); + do { + __get_time_values_from_xen(); - delta = (s64)(shadow_system_time + - (cur_timer->get_offset() * NSEC_PER_USEC) - - processed_system_time); - if (delta < 0) { - if (!TIME_VALUES_UP_TO_DATE) - goto retry; + delta = (s64)(shadow_system_time + + (cur_timer->get_offset() * NSEC_PER_USEC) - + processed_system_time); + } + while (!TIME_VALUES_UP_TO_DATE); + + if (unlikely(delta < 0)) { printk("Timer ISR: Time went backwards: %lld %lld %ld %lld\n", delta, shadow_system_time, (cur_timer->get_offset() * NSEC_PER_USEC),