aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic.c
diff options
context:
space:
mode:
authorMike Travis <travis@sgi.com>2008-12-31 20:34:16 -0500
committerIngo Molnar <mingo@elte.hu>2009-01-03 12:53:31 -0500
commit7eb19553369c46cc1fa64caf120cbcab1b597f7c (patch)
treeef1a3beae706b9497c845d0a2557ceb4d2754998 /arch/x86/kernel/apic.c
parent6092848a2a23b660150a38bc06f59d75838d70c8 (diff)
parent8c384cdee3e04d6194a2c2b192b624754f990835 (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.c22
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 */
795void smp_apic_timer_interrupt(struct pt_regs *regs) 792void __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);