Re: [PATCH] clean up FIXME in do_timer_interrupt-lock fix

From: George Anzinger
Date: Sat Mar 19 2005 - 17:25:41 EST


Andrew Morton wrote:
George Anzinger <george@xxxxxxxxxx> wrote:

Did you pick this up? First sent on 3-11.


I did, although now looking at it I have issues.


I was not happy with the locking on this. Two changes:
1) Turn off irq while setting the clock.
2) Call the timer code only through the timer interface (set a short timer to do it from the ntp call).

I wanted the calls to sync_cmos_clock() to be made in a consistent environment. This was not true when calling it directly from the NTP call code. The change means that sync_cmos_clock() is ALWAYS called from run_timers(), i.e. as a timer call back function.

I would consider this to be an inadequate description :(


Signed-off-by: George Anzinger <george@xxxxxxxxxx>

time.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6.12-rc/arch/i386/kernel/time.c
===================================================================
--- linux-2.6.12-rc.orig/arch/i386/kernel/time.c
+++ linux-2.6.12-rc/arch/i386/kernel/time.c
@@ -176,12 +176,12 @@ static int set_rtc_mmss(unsigned long no
int retval;
/* gets recalled with irq locally disabled */
- spin_lock(&rtc_lock);
+ spin_lock_irq(&rtc_lock);
if (efi_enabled)
retval = efi_set_rtc_mmss(nowtime);
else
retval = mach_set_rtc_mmss(nowtime);
- spin_unlock(&rtc_lock);
+ spin_unlock_irq(&rtc_lock);
return retval;
}


If the comment is correct, and this code is called with local irq's
disabled then this patch should be using spin_lock_irqsave()

With the change below, it is always called from the timer call back code which, I believe, is always called with irq on. Looks like I missed the comment :(


@@ -338,7 +338,7 @@ static void sync_cmos_clock(unsigned lon
}
void notify_arch_cmos_timer(void)
{
- sync_cmos_clock(0);
+ mod_timer(&sync_cmos_timer, jiffies + 1);
}
static long clock_cmos_diff, sleep_start;


Your description says what this does, but it doesn't way why it was done?


--
George Anzinger george@xxxxxxxxxx
High-res-timers: http://sourceforge.net/projects/high-res-timers/

-
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/