X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=arch%2Ffrv%2Fkernel%2Ftime.c;h=69f6a4ef5d61b35c67323a85485e1cebedff7a43;hb=a24ba44cf2adf166bbb1028d57ca0f4b636a1ef7;hp=44a9aebc4f5a1637d1076510c1900c3aae33fa2c;hpb=fefd26b3b8597a11a422d950c0d4424ff33a70ad;p=linux-2.6-omap-h63xx.git diff --git a/arch/frv/kernel/time.c b/arch/frv/kernel/time.c index 44a9aebc4f5..69f6a4ef5d6 100644 --- a/arch/frv/kernel/time.c +++ b/arch/frv/kernel/time.c @@ -40,10 +40,13 @@ unsigned long __nongprelbss __dsu_clock_speed_HZ; unsigned long __nongprelbss __serial_clock_speed_HZ; unsigned long __delay_loops_MHz; -static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs *regs); +static irqreturn_t timer_interrupt(int irq, void *dummy); static struct irqaction timer_irq = { - timer_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "timer", NULL, NULL + .handler = timer_interrupt, + .flags = IRQF_DISABLED, + .mask = CPU_MASK_NONE, + .name = "timer", }; static inline int set_rtc_mmss(unsigned long nowtime) @@ -55,23 +58,22 @@ static inline int set_rtc_mmss(unsigned long nowtime) * timer_interrupt() needs to keep up the real-time clock, * as well as call the "do_timer()" routine every clocktick */ -static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) +static irqreturn_t timer_interrupt(int irq, void *dummy) { /* last time the cmos clock got updated */ static long last_rtc_update = 0; + profile_tick(CPU_PROFILING); /* * Here we are in the timer irq handler. We just have irqs locally * disabled but we don't know if the timer_bh is running on the other - * CPU. We need to avoid to SMP race with it. NOTE: we don' t need + * CPU. We need to avoid to SMP race with it. NOTE: we don't need * the irq version of write_lock because as just said we have irq * locally disabled. -arca */ write_seqlock(&xtime_lock); do_timer(1); - update_process_times(user_mode(regs)); - profile_tick(CPU_PROFILING, regs); /* * If we have an externally synchronized Linux clock, then update @@ -96,6 +98,9 @@ static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) #endif /* CONFIG_HEARTBEAT */ write_sequnlock(&xtime_lock); + + update_process_times(user_mode(get_irq_regs())); + return IRQ_HANDLED; } @@ -123,7 +128,7 @@ void time_init(void) /* FIX by dqg : Set to zero for platforms that don't have tod */ /* without this time is undefined and can overflow time_t, causing */ - /* very stange errors */ + /* very strange errors */ year = 1980; mon = day = 1; hour = min = sec = 0;