Messages in this thread | | | Date | Sat, 19 Mar 2005 14:23:58 -0800 | From | George Anzinger <> | Subject | Re: [PATCH] clean up FIXME in do_timer_interrupt-lock fix |
| |
Andrew Morton wrote: > George Anzinger <george@mvista.com> 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@mvista.com> >> >> 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@mvista.com 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |