diff options
-rw-r--r-- | linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c index bf8e8f9d90..e013191f7b 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c @@ -656,7 +656,12 @@ void __init time_init(void) /* Convert jiffies to system time. Call with xtime_lock held for reading. */ static inline u64 __jiffies_to_st(unsigned long j) { - return processed_system_time + ((j - jiffies) * NS_PER_TICK); + long delta = j - jiffies; + /* NB. The next check can trigger in some wrap-around cases, but + * that's ok -- we'll just end up with a shorter timeout. */ + if (delta < 1) + delta = 1; + return processed_system_time + (delta * NS_PER_TICK); } /* @@ -683,8 +688,6 @@ int set_timeout_timer(void) * updates of jiffies since interrupts are off. */ j = next_timer_interrupt(); - if (j < (jiffies + 1)) - j = jiffies + 1; alarm = __jiffies_to_st(j); /* Failure is pretty bad, but we'd best soldier on. */ |