diff options
-rw-r--r-- | arch/sparc64/kernel/irq.c | 7 | ||||
-rw-r--r-- | arch/sparc64/kernel/time.c | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index ce05deb1bc92..d64b1ea848de 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c | |||
@@ -522,12 +522,13 @@ void ack_bad_irq(unsigned int virt_irq) | |||
522 | } | 522 | } |
523 | 523 | ||
524 | #ifndef CONFIG_SMP | 524 | #ifndef CONFIG_SMP |
525 | extern irqreturn_t timer_interrupt(int, void *, struct pt_regs *); | 525 | extern irqreturn_t timer_interrupt(int, void *); |
526 | 526 | ||
527 | void timer_irq(int irq, struct pt_regs *regs) | 527 | void timer_irq(int irq, struct pt_regs *regs) |
528 | { | 528 | { |
529 | unsigned long clr_mask = 1 << irq; | 529 | unsigned long clr_mask = 1 << irq; |
530 | unsigned long tick_mask = tick_ops->softint_mask; | 530 | unsigned long tick_mask = tick_ops->softint_mask; |
531 | struct pt_regs *old_regs; | ||
531 | 532 | ||
532 | if (get_softint() & tick_mask) { | 533 | if (get_softint() & tick_mask) { |
533 | irq = 0; | 534 | irq = 0; |
@@ -535,12 +536,14 @@ void timer_irq(int irq, struct pt_regs *regs) | |||
535 | } | 536 | } |
536 | clear_softint(clr_mask); | 537 | clear_softint(clr_mask); |
537 | 538 | ||
539 | old_regs = set_irq_regs(regs); | ||
538 | irq_enter(); | 540 | irq_enter(); |
539 | 541 | ||
540 | kstat_this_cpu.irqs[0]++; | 542 | kstat_this_cpu.irqs[0]++; |
541 | timer_interrupt(irq, NULL, regs); | 543 | timer_interrupt(irq, NULL); |
542 | 544 | ||
543 | irq_exit(); | 545 | irq_exit(); |
546 | set_irq_regs(old_regs); | ||
544 | } | 547 | } |
545 | #endif | 548 | #endif |
546 | 549 | ||
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c index 00f6fc4aaaff..061e1b1fa583 100644 --- a/arch/sparc64/kernel/time.c +++ b/arch/sparc64/kernel/time.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <asm/cpudata.h> | 45 | #include <asm/cpudata.h> |
46 | #include <asm/uaccess.h> | 46 | #include <asm/uaccess.h> |
47 | #include <asm/prom.h> | 47 | #include <asm/prom.h> |
48 | #include <asm/irq_regs.h> | ||
48 | 49 | ||
49 | DEFINE_SPINLOCK(mostek_lock); | 50 | DEFINE_SPINLOCK(mostek_lock); |
50 | DEFINE_SPINLOCK(rtc_lock); | 51 | DEFINE_SPINLOCK(rtc_lock); |
@@ -452,7 +453,7 @@ static inline void timer_check_rtc(void) | |||
452 | } | 453 | } |
453 | } | 454 | } |
454 | 455 | ||
455 | irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | 456 | irqreturn_t timer_interrupt(int irq, void *dev_id) |
456 | { | 457 | { |
457 | unsigned long ticks, compare, pstate; | 458 | unsigned long ticks, compare, pstate; |
458 | 459 | ||
@@ -460,8 +461,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) | |||
460 | 461 | ||
461 | do { | 462 | do { |
462 | #ifndef CONFIG_SMP | 463 | #ifndef CONFIG_SMP |
463 | profile_tick(CPU_PROFILING, regs); | 464 | profile_tick(CPU_PROFILING); |
464 | update_process_times(user_mode(regs)); | 465 | update_process_times(user_mode(get_irq_regs())); |
465 | #endif | 466 | #endif |
466 | do_timer(1); | 467 | do_timer(1); |
467 | 468 | ||