From 51a8bb3e718eae2110b1543206029a91107225a4 Mon Sep 17 00:00:00 2001 From: Haavard Skinnemoen Date: Wed, 11 Oct 2006 01:20:37 -0700 Subject: [PATCH] --- yaml --- r: 39279 b: refs/heads/master c: 4e0fadfcf62e252d2b14de0e0927eb2830c0c28c h: refs/heads/master i: 39277: fb47073e26fb40ba5e3852e218b26466f3ebf617 39275: f51c405a7c55fc70e7e909e8cc3cd0e70fe34448 39271: 010de78f121be0b9f382baa14e03bf52dd911ff8 39263: 0537e9f5644fd41e618920abf040496f3aa5e7b0 v: v3 --- [refs] | 2 +- trunk/arch/avr32/kernel/time.c | 10 +++++----- trunk/arch/avr32/mach-at32ap/extint.c | 5 ++--- trunk/arch/avr32/mach-at32ap/intc.c | 7 ++++++- trunk/include/asm-avr32/irq_regs.h | 1 + 5 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 trunk/include/asm-avr32/irq_regs.h diff --git a/[refs] b/[refs] index b67a2a56bc84..1bcc0cf9ea7e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 41716c7c21b15e7ecf14f0caf1eef3980707fb74 +refs/heads/master: 4e0fadfcf62e252d2b14de0e0927eb2830c0c28c diff --git a/trunk/arch/avr32/kernel/time.c b/trunk/arch/avr32/kernel/time.c index 3e56b9f4358a..5a247ba71a72 100644 --- a/trunk/arch/avr32/kernel/time.c +++ b/trunk/arch/avr32/kernel/time.c @@ -124,15 +124,15 @@ unsigned long long sched_clock(void) * * In UP mode, it is invoked from the (global) timer_interrupt. */ -static void local_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static void local_timer_interrupt(int irq, void *dev_id) { if (current->pid) - profile_tick(CPU_PROFILING, regs); - update_process_times(user_mode(regs)); + profile_tick(CPU_PROFILING); + update_process_times(user_mode(get_irq_regs())); } static irqreturn_t -timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +timer_interrupt(int irq, void *dev_id) { unsigned int count; @@ -157,7 +157,7 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) * * SMP is not supported yet. */ - local_timer_interrupt(irq, dev_id, regs); + local_timer_interrupt(irq, dev_id); return IRQ_HANDLED; } diff --git a/trunk/arch/avr32/mach-at32ap/extint.c b/trunk/arch/avr32/mach-at32ap/extint.c index 7da9c5f7a0eb..4dff1f988900 100644 --- a/trunk/arch/avr32/mach-at32ap/extint.c +++ b/trunk/arch/avr32/mach-at32ap/extint.c @@ -102,8 +102,7 @@ struct irq_chip eim_chip = { .set_type = eim_set_irq_type, }; -static void demux_eim_irq(unsigned int irq, struct irq_desc *desc, - struct pt_regs *regs) +static void demux_eim_irq(unsigned int irq, struct irq_desc *desc) { struct at32_sm *sm = desc->handler_data; struct irq_desc *ext_desc; @@ -121,7 +120,7 @@ static void demux_eim_irq(unsigned int irq, struct irq_desc *desc, ext_irq = i + sm->eim_first_irq; ext_desc = irq_desc + ext_irq; - ext_desc->handle_irq(ext_irq, ext_desc, regs); + ext_desc->handle_irq(ext_irq, ext_desc); } spin_unlock(&sm->lock); diff --git a/trunk/arch/avr32/mach-at32ap/intc.c b/trunk/arch/avr32/mach-at32ap/intc.c index 74f8c9f2f03d..eb87a18ad7b2 100644 --- a/trunk/arch/avr32/mach-at32ap/intc.c +++ b/trunk/arch/avr32/mach-at32ap/intc.c @@ -52,16 +52,19 @@ static struct intc intc0 = { asmlinkage void do_IRQ(int level, struct pt_regs *regs) { struct irq_desc *desc; + struct pt_regs *old_regs; unsigned int irq; unsigned long status_reg; local_irq_disable(); + old_regs = set_irq_regs(regs); + irq_enter(); irq = intc_readl(&intc0, INTCAUSE0 - 4 * level); desc = irq_desc + irq; - desc->handle_irq(irq, desc, regs); + desc->handle_irq(irq, desc); /* * Clear all interrupt level masks so that we may handle @@ -75,6 +78,8 @@ asmlinkage void do_IRQ(int level, struct pt_regs *regs) sysreg_write(SR, status_reg); irq_exit(); + + set_irq_regs(old_regs); } void __init init_IRQ(void) diff --git a/trunk/include/asm-avr32/irq_regs.h b/trunk/include/asm-avr32/irq_regs.h new file mode 100644 index 000000000000..3dd9c0b70270 --- /dev/null +++ b/trunk/include/asm-avr32/irq_regs.h @@ -0,0 +1 @@ +#include