From: Hirokazu Takata This patch fixes a hanging up at boot time of 2.6.10-rc2 m32r UP kernel. It was due to a lack of update_process_times() in time.c. Such a boot hang was caused only in UP systems, because update_process_times() had been executed correctly in smp_local_timer_interrupt() of arch/m32r/kernel/smp.c for SMP. arch/m32r/kernel/time.c: - UP: Fix do_timer_interrupt() to use update_process_times(). - UP: Move profile_tick() into do_timer_interrupt(). - Change __inline__ to inline. Signed-off-by: Hirokazu Takata Signed-off-by: Andrew Morton --- 25-akpm/arch/m32r/kernel/time.c | 17 +++++++++-------- 1 files changed, 9 insertions(+), 8 deletions(-) diff -puN arch/m32r/kernel/time.c~m32r-fix-a-boot-hang-of-up-kernel arch/m32r/kernel/time.c --- 25/arch/m32r/kernel/time.c~m32r-fix-a-boot-hang-of-up-kernel 2004-11-17 00:24:51.834811672 -0800 +++ 25-akpm/arch/m32r/kernel/time.c 2004-11-17 00:24:51.838811064 -0800 @@ -193,7 +193,7 @@ EXPORT_SYMBOL(do_settimeofday); * BUG: This routine does not handle hour overflow properly; it just * sets the minutes. Usually you won't notice until after reboot! */ -static __inline__ int set_rtc_mmss(unsigned long nowtime) +static inline int set_rtc_mmss(unsigned long nowtime) { return 0; } @@ -205,11 +205,17 @@ static long last_rtc_update = 0; * timer_interrupt() needs to keep up the real-time clock, * as well as call the "do_timer()" routine every clocktick */ -static __inline__ void do_timer_interrupt(int irq, void *dev_id, - struct pt_regs * regs) +static inline void +do_timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) { +#ifndef CONFIG_SMP + profile_tick(CPU_PROFILING, regs); +#endif do_timer(regs); +#ifndef CONFIG_SMP + update_process_times(user_mode(regs)); +#endif /* * If we have an externally synchronized Linux clock, then update * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be @@ -241,10 +247,6 @@ irqreturn_t timer_interrupt(int irq, voi do_timer_interrupt(irq, NULL, regs); write_sequnlock(&xtime_lock); -#ifndef CONFIG_SMP - profile_tick(CPU_PROFILING, regs); -#endif - return IRQ_HANDLED; } @@ -314,4 +316,3 @@ unsigned long long sched_clock(void) { return (unsigned long long)jiffies * (1000000000 / HZ); } - _