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 | |
| 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>
| -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 | /* |
