|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] Fix e1000 hang during reboot bug. Kudos to Steven Hand f
ChangeSet 1.1885, 2005/05/21 13:40:10+01:00, cl349@xxxxxxxxxxxxxxxxxxxx
Fix e1000 hang during reboot bug. Kudos to Steven Hand for analyzing.
time.c:
Fix bug in code which sets our one-shot timer when we decide to block
during
the idle loop.
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
time.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
diff -Nru 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
--- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c 2005-05-22
13:06:05 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c 2005-05-22
13:06:05 -04:00
@@ -656,7 +656,12 @@
/* 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 @@
* 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. */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
|
|
|
|