diff options
author | Mike Travis <travis@sgi.com> | 2008-12-31 20:34:16 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-03 12:53:31 -0500 |
commit | 7eb19553369c46cc1fa64caf120cbcab1b597f7c (patch) | |
tree | ef1a3beae706b9497c845d0a2557ceb4d2754998 /arch/x86/kernel/apic.c | |
parent | 6092848a2a23b660150a38bc06f59d75838d70c8 (diff) | |
parent | 8c384cdee3e04d6194a2c2b192b624754f990835 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask into merge-rr-cpumask
Conflicts:
arch/x86/kernel/io_apic.c
kernel/rcuclassic.c
kernel/sched.c
kernel/time/tick-sched.c
Signed-off-by: Mike Travis <travis@sgi.com>
[ mingo@elte.hu: backmerged typo fix for io_apic.c ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/apic.c')
-rw-r--r-- | arch/x86/kernel/apic.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index b9019271af62..6b7f824db160 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
31 | #include <linux/dmi.h> | 31 | #include <linux/dmi.h> |
32 | #include <linux/dmar.h> | 32 | #include <linux/dmar.h> |
33 | #include <linux/ftrace.h> | ||
33 | 34 | ||
34 | #include <asm/atomic.h> | 35 | #include <asm/atomic.h> |
35 | #include <asm/smp.h> | 36 | #include <asm/smp.h> |
@@ -775,11 +776,7 @@ static void local_apic_timer_interrupt(void) | |||
775 | /* | 776 | /* |
776 | * the NMI deadlock-detector uses this. | 777 | * the NMI deadlock-detector uses this. |
777 | */ | 778 | */ |
778 | #ifdef CONFIG_X86_64 | 779 | inc_irq_stat(apic_timer_irqs); |
779 | add_pda(apic_timer_irqs, 1); | ||
780 | #else | ||
781 | per_cpu(irq_stat, cpu).apic_timer_irqs++; | ||
782 | #endif | ||
783 | 780 | ||
784 | evt->event_handler(evt); | 781 | evt->event_handler(evt); |
785 | } | 782 | } |
@@ -792,7 +789,7 @@ static void local_apic_timer_interrupt(void) | |||
792 | * [ if a single-CPU system runs an SMP kernel then we call the local | 789 | * [ if a single-CPU system runs an SMP kernel then we call the local |
793 | * interrupt as well. Thus we cannot inline the local irq ... ] | 790 | * interrupt as well. Thus we cannot inline the local irq ... ] |
794 | */ | 791 | */ |
795 | void smp_apic_timer_interrupt(struct pt_regs *regs) | 792 | void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs) |
796 | { | 793 | { |
797 | struct pt_regs *old_regs = set_irq_regs(regs); | 794 | struct pt_regs *old_regs = set_irq_regs(regs); |
798 | 795 | ||
@@ -806,9 +803,7 @@ void smp_apic_timer_interrupt(struct pt_regs *regs) | |||
806 | * Besides, if we don't timer interrupts ignore the global | 803 | * Besides, if we don't timer interrupts ignore the global |
807 | * interrupt lock, which is the WrongThing (tm) to do. | 804 | * interrupt lock, which is the WrongThing (tm) to do. |
808 | */ | 805 | */ |
809 | #ifdef CONFIG_X86_64 | ||
810 | exit_idle(); | 806 | exit_idle(); |
811 | #endif | ||
812 | irq_enter(); | 807 | irq_enter(); |
813 | local_apic_timer_interrupt(); | 808 | local_apic_timer_interrupt(); |
814 | irq_exit(); | 809 | irq_exit(); |
@@ -1666,9 +1661,7 @@ void smp_spurious_interrupt(struct pt_regs *regs) | |||
1666 | { | 1661 | { |
1667 | u32 v; | 1662 | u32 v; |
1668 | 1663 | ||
1669 | #ifdef CONFIG_X86_64 | ||
1670 | exit_idle(); | 1664 | exit_idle(); |
1671 | #endif | ||
1672 | irq_enter(); | 1665 | irq_enter(); |
1673 | /* | 1666 | /* |
1674 | * Check if this really is a spurious interrupt and ACK it | 1667 | * Check if this really is a spurious interrupt and ACK it |
@@ -1679,14 +1672,11 @@ void smp_spurious_interrupt(struct pt_regs *regs) | |||
1679 | if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f))) | 1672 | if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f))) |
1680 | ack_APIC_irq(); | 1673 | ack_APIC_irq(); |
1681 | 1674 | ||
1682 | #ifdef CONFIG_X86_64 | 1675 | inc_irq_stat(irq_spurious_count); |
1683 | add_pda(irq_spurious_count, 1); | 1676 | |
1684 | #else | ||
1685 | /* see sw-dev-man vol 3, chapter 7.4.13.5 */ | 1677 | /* see sw-dev-man vol 3, chapter 7.4.13.5 */ |
1686 | pr_info("spurious APIC interrupt on CPU#%d, " | 1678 | pr_info("spurious APIC interrupt on CPU#%d, " |
1687 | "should never happen.\n", smp_processor_id()); | 1679 | "should never happen.\n", smp_processor_id()); |
1688 | __get_cpu_var(irq_stat).irq_spurious_count++; | ||
1689 | #endif | ||
1690 | irq_exit(); | 1680 | irq_exit(); |
1691 | } | 1681 | } |
1692 | 1682 | ||
@@ -1697,9 +1687,7 @@ void smp_error_interrupt(struct pt_regs *regs) | |||
1697 | { | 1687 | { |
1698 | u32 v, v1; | 1688 | u32 v, v1; |
1699 | 1689 | ||
1700 | #ifdef CONFIG_X86_64 | ||
1701 | exit_idle(); | 1690 | exit_idle(); |
1702 | #endif | ||
1703 | irq_enter(); | 1691 | irq_enter(); |
1704 | /* First tickle the hardware, only then report what went on. -- REW */ | 1692 | /* First tickle the hardware, only then report what went on. -- REW */ |
1705 | v = apic_read(APIC_ESR); | 1693 | v = apic_read(APIC_ESR); |