From 78bf0ecb71d50c925935a2a8fd48ff6ff943571f Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 6 Oct 2006 20:12:11 -0700 Subject: [PATCH] --- yaml --- r: 39082 b: refs/heads/master c: ada26d41e9ee1da31d11957b4452f4227a292e10 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/arm/kernel/irq.c | 3 ++- trunk/arch/x86_64/kernel/apic.c | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 9cbde7f48579..dedf8793e29c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: be577a5220b25e0a6e3fbf96bbfc8b31d63e9ea9 +refs/heads/master: ada26d41e9ee1da31d11957b4452f4227a292e10 diff --git a/trunk/arch/arm/kernel/irq.c b/trunk/arch/arm/kernel/irq.c index e999b11de2c6..2c4ff1cbe334 100644 --- a/trunk/arch/arm/kernel/irq.c +++ b/trunk/arch/arm/kernel/irq.c @@ -111,6 +111,7 @@ static struct irq_desc bad_irq_desc = { */ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) { + struct pt_regs *old_regs = set_irq_regs(regs); struct irqdesc *desc = irq_desc + irq; /* @@ -122,13 +123,13 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) irq_enter(); - set_irq_regs(regs); desc_handle_irq(irq, desc); /* AT91 specific workaround */ irq_finish(irq); irq_exit(); + set_irq_regs(old_regs); } void set_irq_flags(unsigned int irq, unsigned int iflags) diff --git a/trunk/arch/x86_64/kernel/apic.c b/trunk/arch/x86_64/kernel/apic.c index af4a1c71a80d..4d9d5ed942b2 100644 --- a/trunk/arch/x86_64/kernel/apic.c +++ b/trunk/arch/x86_64/kernel/apic.c @@ -913,8 +913,10 @@ void smp_local_timer_interrupt(void) * [ if a single-CPU system runs an SMP kernel then we call the local * interrupt as well. Thus we cannot inline the local irq ... ] */ -void smp_apic_timer_interrupt(void) +void smp_apic_timer_interrupt(struct pt_regs *regs) { + struct pt_regs *old_regs = set_irq_regs(regs); + /* * the NMI deadlock-detector uses this. */ @@ -934,6 +936,7 @@ void smp_apic_timer_interrupt(void) irq_enter(); smp_local_timer_interrupt(); irq_exit(); + set_irq_regs(old_regs); } /*