aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh64/kernel/time.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh64/kernel/time.c')
-rw-r--r--arch/sh64/kernel/time.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/arch/sh64/kernel/time.c b/arch/sh64/kernel/time.c
index 390b40de7cef..b37f4f4981d2 100644
--- a/arch/sh64/kernel/time.c
+++ b/arch/sh64/kernel/time.c
@@ -123,7 +123,7 @@ static unsigned long long usecs_per_jiffy = 1000000/HZ; /* Approximation */
123static unsigned long long scaled_recip_ctc_ticks_per_jiffy; 123static unsigned long long scaled_recip_ctc_ticks_per_jiffy;
124 124
125/* Estimate number of microseconds that have elapsed since the last timer tick, 125/* Estimate number of microseconds that have elapsed since the last timer tick,
126 by scaling the delta that has occured in the CTC register. 126 by scaling the delta that has occurred in the CTC register.
127 127
128 WARNING WARNING WARNING : This algorithm relies on the CTC decrementing at 128 WARNING WARNING WARNING : This algorithm relies on the CTC decrementing at
129 the CPU clock rate. If the CPU sleeps, the CTC stops counting. Bear this 129 the CPU clock rate. If the CPU sleeps, the CTC stops counting. Bear this
@@ -282,7 +282,7 @@ static long last_rtc_update = 0;
282 * timer_interrupt() needs to keep up the real-time clock, 282 * timer_interrupt() needs to keep up the real-time clock,
283 * as well as call the "do_timer()" routine every clocktick 283 * as well as call the "do_timer()" routine every clocktick
284 */ 284 */
285static inline void do_timer_interrupt(int irq, struct pt_regs *regs) 285static inline void do_timer_interrupt(void)
286{ 286{
287 unsigned long long current_ctc; 287 unsigned long long current_ctc;
288 asm ("getcon cr62, %0" : "=r" (current_ctc)); 288 asm ("getcon cr62, %0" : "=r" (current_ctc));
@@ -290,9 +290,10 @@ static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
290 290
291 do_timer(1); 291 do_timer(1);
292#ifndef CONFIG_SMP 292#ifndef CONFIG_SMP
293 update_process_times(user_mode(regs)); 293 update_process_times(user_mode(get_irq_regs()));
294#endif 294#endif
295 profile_tick(CPU_PROFILING, regs); 295 if (current->pid)
296 profile_tick(CPU_PROFILING);
296 297
297#ifdef CONFIG_HEARTBEAT 298#ifdef CONFIG_HEARTBEAT
298 { 299 {
@@ -323,7 +324,7 @@ static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
323 * Time Stamp Counter value at the time of the timer interrupt, so that 324 * Time Stamp Counter value at the time of the timer interrupt, so that
324 * we later on can estimate the time of day more exactly. 325 * we later on can estimate the time of day more exactly.
325 */ 326 */
326static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 327static irqreturn_t timer_interrupt(int irq, void *dev_id)
327{ 328{
328 unsigned long timer_status; 329 unsigned long timer_status;
329 330
@@ -340,7 +341,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
340 * locally disabled. -arca 341 * locally disabled. -arca
341 */ 342 */
342 write_lock(&xtime_lock); 343 write_lock(&xtime_lock);
343 do_timer_interrupt(irq, regs); 344 do_timer_interrupt();
344 write_unlock(&xtime_lock); 345 write_unlock(&xtime_lock);
345 346
346 return IRQ_HANDLED; 347 return IRQ_HANDLED;
@@ -465,9 +466,10 @@ static __init unsigned int get_cpu_hz(void)
465#endif 466#endif
466} 467}
467 468
468static irqreturn_t sh64_rtc_interrupt(int irq, void *dev_id, 469static irqreturn_t sh64_rtc_interrupt(int irq, void *dev_id)
469 struct pt_regs *regs)
470{ 470{
471 struct pt_regs *regs = get_irq_regs();
472
471 ctrl_outb(0, RCR1); /* Disable Carry Interrupts */ 473 ctrl_outb(0, RCR1); /* Disable Carry Interrupts */
472 regs->regs[3] = 1; /* Using r3 */ 474 regs->regs[3] = 1; /* Using r3 */
473 475