
From: Hirokazu Takata <takata@linux-m32r.org>

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 <takata@linux-m32r.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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);
 }
-
_
