diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/irq.c | 3 | ||||
-rw-r--r-- | arch/x86_64/kernel/apic.c | 5 |
2 files changed, 6 insertions, 2 deletions
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index e999b11de2c6..2c4ff1cbe334 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
@@ -111,6 +111,7 @@ static struct irq_desc bad_irq_desc = { | |||
111 | */ | 111 | */ |
112 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | 112 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) |
113 | { | 113 | { |
114 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
114 | struct irqdesc *desc = irq_desc + irq; | 115 | struct irqdesc *desc = irq_desc + irq; |
115 | 116 | ||
116 | /* | 117 | /* |
@@ -122,13 +123,13 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
122 | 123 | ||
123 | irq_enter(); | 124 | irq_enter(); |
124 | 125 | ||
125 | set_irq_regs(regs); | ||
126 | desc_handle_irq(irq, desc); | 126 | desc_handle_irq(irq, desc); |
127 | 127 | ||
128 | /* AT91 specific workaround */ | 128 | /* AT91 specific workaround */ |
129 | irq_finish(irq); | 129 | irq_finish(irq); |
130 | 130 | ||
131 | irq_exit(); | 131 | irq_exit(); |
132 | set_irq_regs(old_regs); | ||
132 | } | 133 | } |
133 | 134 | ||
134 | void set_irq_flags(unsigned int irq, unsigned int iflags) | 135 | void set_irq_flags(unsigned int irq, unsigned int iflags) |
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index af4a1c71a80d..4d9d5ed942b2 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -913,8 +913,10 @@ void smp_local_timer_interrupt(void) | |||
913 | * [ if a single-CPU system runs an SMP kernel then we call the local | 913 | * [ if a single-CPU system runs an SMP kernel then we call the local |
914 | * interrupt as well. Thus we cannot inline the local irq ... ] | 914 | * interrupt as well. Thus we cannot inline the local irq ... ] |
915 | */ | 915 | */ |
916 | void smp_apic_timer_interrupt(void) | 916 | void smp_apic_timer_interrupt(struct pt_regs *regs) |
917 | { | 917 | { |
918 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
919 | |||
918 | /* | 920 | /* |
919 | * the NMI deadlock-detector uses this. | 921 | * the NMI deadlock-detector uses this. |
920 | */ | 922 | */ |
@@ -934,6 +936,7 @@ void smp_apic_timer_interrupt(void) | |||
934 | irq_enter(); | 936 | irq_enter(); |
935 | smp_local_timer_interrupt(); | 937 | smp_local_timer_interrupt(); |
936 | irq_exit(); | 938 | irq_exit(); |
939 | set_irq_regs(old_regs); | ||
937 | } | 940 | } |
938 | 941 | ||
939 | /* | 942 | /* |