From faf612e4460843b78b6c3b6c0e4a1b5003f0137d Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 9 Oct 2006 11:51:14 +0100 Subject: [PATCH] --- yaml --- r: 39155 b: refs/heads/master c: 63540ba3691600759c6732f800dcf0fe8075960b h: refs/heads/master i: 39153: 257defe857207e9b1f22ef1ee69aa15530005802 39151: 9978493892f136122c94c23d1b8168e87816aae6 v: v3 --- [refs] | 2 +- trunk/arch/sparc64/kernel/irq.c | 7 +++++-- trunk/arch/sparc64/kernel/time.c | 7 ++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 920583ff6a6c..8232e419006f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 58ba81dba77eab43633ea47d82e96245ae3ff666 +refs/heads/master: 63540ba3691600759c6732f800dcf0fe8075960b diff --git a/trunk/arch/sparc64/kernel/irq.c b/trunk/arch/sparc64/kernel/irq.c index ce05deb1bc92..d64b1ea848de 100644 --- a/trunk/arch/sparc64/kernel/irq.c +++ b/trunk/arch/sparc64/kernel/irq.c @@ -522,12 +522,13 @@ void ack_bad_irq(unsigned int virt_irq) } #ifndef CONFIG_SMP -extern irqreturn_t timer_interrupt(int, void *, struct pt_regs *); +extern irqreturn_t timer_interrupt(int, void *); void timer_irq(int irq, struct pt_regs *regs) { unsigned long clr_mask = 1 << irq; unsigned long tick_mask = tick_ops->softint_mask; + struct pt_regs *old_regs; if (get_softint() & tick_mask) { irq = 0; @@ -535,12 +536,14 @@ void timer_irq(int irq, struct pt_regs *regs) } clear_softint(clr_mask); + old_regs = set_irq_regs(regs); irq_enter(); kstat_this_cpu.irqs[0]++; - timer_interrupt(irq, NULL, regs); + timer_interrupt(irq, NULL); irq_exit(); + set_irq_regs(old_regs); } #endif diff --git a/trunk/arch/sparc64/kernel/time.c b/trunk/arch/sparc64/kernel/time.c index 00f6fc4aaaff..061e1b1fa583 100644 --- a/trunk/arch/sparc64/kernel/time.c +++ b/trunk/arch/sparc64/kernel/time.c @@ -45,6 +45,7 @@ #include #include #include +#include DEFINE_SPINLOCK(mostek_lock); DEFINE_SPINLOCK(rtc_lock); @@ -452,7 +453,7 @@ static inline void timer_check_rtc(void) } } -irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) +irqreturn_t timer_interrupt(int irq, void *dev_id) { unsigned long ticks, compare, pstate; @@ -460,8 +461,8 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) do { #ifndef CONFIG_SMP - profile_tick(CPU_PROFILING, regs); - update_process_times(user_mode(regs)); + profile_tick(CPU_PROFILING); + update_process_times(user_mode(get_irq_regs())); #endif do_timer(1);