diff options
author | Oleg Nesterov <oleg@tv-sign.ru> | 2006-12-06 20:14:19 -0500 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2006-12-06 20:14:19 -0500 |
commit | 6bedb2ccb02dcc70ffc8eb76df71c746378190ad (patch) | |
tree | ca0abaf9d6ce2abf2f9f4f9322c2bbf03eea58e0 /arch/i386 | |
parent | ad892f5e0d01f3c3b475a688d1ddc211cf3ea56d (diff) |
[PATCH] x86-64: don't use set_irq_regs()
We don't need to setup _irq_regs in smp_xxx_interrupt (except apic timer).
These handlers run with irqs disabled and do not call functions which need
"struct pt_regs".
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andi Kleen <ak@suse.de>
Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: Andi Kleen <ak@suse.de>
Acked-By: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/kernel/smp.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c index 31e5c6573aae..1b080ab8a49f 100644 --- a/arch/i386/kernel/smp.c +++ b/arch/i386/kernel/smp.c | |||
@@ -321,7 +321,6 @@ static inline void leave_mm (unsigned long cpu) | |||
321 | 321 | ||
322 | fastcall void smp_invalidate_interrupt(struct pt_regs *regs) | 322 | fastcall void smp_invalidate_interrupt(struct pt_regs *regs) |
323 | { | 323 | { |
324 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
325 | unsigned long cpu; | 324 | unsigned long cpu; |
326 | 325 | ||
327 | cpu = get_cpu(); | 326 | cpu = get_cpu(); |
@@ -352,7 +351,6 @@ fastcall void smp_invalidate_interrupt(struct pt_regs *regs) | |||
352 | smp_mb__after_clear_bit(); | 351 | smp_mb__after_clear_bit(); |
353 | out: | 352 | out: |
354 | put_cpu_no_resched(); | 353 | put_cpu_no_resched(); |
355 | set_irq_regs(old_regs); | ||
356 | } | 354 | } |
357 | 355 | ||
358 | static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm, | 356 | static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm, |
@@ -607,14 +605,11 @@ void smp_send_stop(void) | |||
607 | */ | 605 | */ |
608 | fastcall void smp_reschedule_interrupt(struct pt_regs *regs) | 606 | fastcall void smp_reschedule_interrupt(struct pt_regs *regs) |
609 | { | 607 | { |
610 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
611 | ack_APIC_irq(); | 608 | ack_APIC_irq(); |
612 | set_irq_regs(old_regs); | ||
613 | } | 609 | } |
614 | 610 | ||
615 | fastcall void smp_call_function_interrupt(struct pt_regs *regs) | 611 | fastcall void smp_call_function_interrupt(struct pt_regs *regs) |
616 | { | 612 | { |
617 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
618 | void (*func) (void *info) = call_data->func; | 613 | void (*func) (void *info) = call_data->func; |
619 | void *info = call_data->info; | 614 | void *info = call_data->info; |
620 | int wait = call_data->wait; | 615 | int wait = call_data->wait; |
@@ -637,7 +632,6 @@ fastcall void smp_call_function_interrupt(struct pt_regs *regs) | |||
637 | mb(); | 632 | mb(); |
638 | atomic_inc(&call_data->finished); | 633 | atomic_inc(&call_data->finished); |
639 | } | 634 | } |
640 | set_irq_regs(old_regs); | ||
641 | } | 635 | } |
642 | 636 | ||
643 | /* | 637 | /* |