Commit f82026d0 authored by Hirokazu Takata's avatar Hirokazu Takata Committed by Linus Torvalds

[PATCH] m32r: Fix a boot hang of UP kernel

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: default avatarHirokazu Takata <takata@linux-m32r.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 516c04c6
...@@ -193,7 +193,7 @@ EXPORT_SYMBOL(do_settimeofday); ...@@ -193,7 +193,7 @@ EXPORT_SYMBOL(do_settimeofday);
* BUG: This routine does not handle hour overflow properly; it just * BUG: This routine does not handle hour overflow properly; it just
* sets the minutes. Usually you won't notice until after reboot! * 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; return 0;
} }
...@@ -205,11 +205,17 @@ static long last_rtc_update = 0; ...@@ -205,11 +205,17 @@ static long last_rtc_update = 0;
* timer_interrupt() needs to keep up the real-time clock, * timer_interrupt() needs to keep up the real-time clock,
* as well as call the "do_timer()" routine every clocktick * as well as call the "do_timer()" routine every clocktick
*/ */
static __inline__ void do_timer_interrupt(int irq, void *dev_id, static inline void
struct pt_regs * regs) do_timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
{ {
#ifndef CONFIG_SMP
profile_tick(CPU_PROFILING, regs);
#endif
do_timer(regs); do_timer(regs);
#ifndef CONFIG_SMP
update_process_times(user_mode(regs));
#endif
/* /*
* If we have an externally synchronized Linux clock, then update * If we have an externally synchronized Linux clock, then update
* CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
...@@ -241,10 +247,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -241,10 +247,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
do_timer_interrupt(irq, NULL, regs); do_timer_interrupt(irq, NULL, regs);
write_sequnlock(&xtime_lock); write_sequnlock(&xtime_lock);
#ifndef CONFIG_SMP
profile_tick(CPU_PROFILING, regs);
#endif
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -314,4 +316,3 @@ unsigned long long sched_clock(void) ...@@ -314,4 +316,3 @@ unsigned long long sched_clock(void)
{ {
return (unsigned long long)jiffies * (1000000000 / HZ); return (unsigned long long)jiffies * (1000000000 / HZ);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment