[PATCH] kernel/timer.c: xtime lock missing

From: Benjamin LaHaise
Date: Thu Oct 21 2004 - 14:21:37 EST


Hello all,

While looking at the time keeping code for related work, I came across
the following bug. During 2.5 development, the smptimers patch removed
a lock from update_times() that is actually needed over the xtime
update, since the second overflow is not an atomic operation. This
patch fixes that by doing a write_seqlock() over the course of the
update.

-ben
--
"Time is what keeps everything from happening all at once." -- John Wheeler

===== timer.c 1.93 vs edited =====
--- 1.93/kernel/timer.c 2004-09-17 03:07:06 -04:00
+++ edited/timer.c 2004-10-21 14:51:53 -04:00
@@ -940,11 +940,14 @@
{
unsigned long ticks;

+ /* interrupts are disabled */
+ write_seqlock(&xtime_lock);
ticks = jiffies - wall_jiffies;
if (ticks) {
wall_jiffies += ticks;
update_wall_time(ticks);
}
+ write_sequnlock(&xtime_lock);
calc_load(ticks);
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/