[PATCH 15/18] x86: apic unify smp_spurious/error_interrupt

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Ingo Molnar <mingo@...>, Thomas Gleixner <tglx@...>, H. Peter Anvin <hpa@...>, Andrew Morton <akpm@...>
Cc: <linux-kernel@...>, Yinghai Lu <yhlu.kernel@...>
Date: Sunday, August 24, 2008 - 5:01 am

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
---
 arch/x86/kernel/apic_32.c |   24 +++++++++++++++++++++---
 arch/x86/kernel/apic_64.c |   24 ++++++++++++++++++++++--
 2 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
index 749adb5..d357038 100644
--- a/arch/x86/kernel/apic_32.c
+++ b/arch/x86/kernel/apic_32.c
@@ -1474,10 +1474,17 @@ int __init APIC_init_uniprocessor(void)
 /*
  * This interrupt should _never_ happen with our APIC/SMP architecture
  */
+#ifdef CONFIG_X86_64
+asmlinkage void smp_spurious_interrupt(void)
+#else
 void smp_spurious_interrupt(struct pt_regs *regs)
+#endif
 {
-	unsigned long v;
+	u32 v;
 
+#ifdef CONFIG_X86_64
+	exit_idle();
+#endif
 	irq_enter();
 	/*
 	 * Check if this really is a spurious interrupt and ACK it
@@ -1488,20 +1495,31 @@ void smp_spurious_interrupt(struct pt_regs *regs)
 	if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
 		ack_APIC_irq();
 
+#ifdef CONFIG_X86_64
+	add_pda(irq_spurious_count, 1);
+#else
 	/* see sw-dev-man vol 3, chapter 7.4.13.5 */
 	printk(KERN_INFO "spurious APIC interrupt on CPU#%d, "
 	       "should never happen.\n", smp_processor_id());
 	__get_cpu_var(irq_stat).irq_spurious_count++;
+#endif
 	irq_exit();
 }
 
 /*
  * This interrupt should never happen with our APIC/SMP architecture
  */
+#ifdef CONFIG_X86_64
+asmlinkage void smp_error_interrupt(void)
+#else
 void smp_error_interrupt(struct pt_regs *regs)
+#endif
 {
-	unsigned long v, v1;
+	u32 v, v1;
 
+#ifdef CONFIG_X86_64
+	exit_idle();
+#endif
 	irq_enter();
 	/* First tickle the hardware, only then report what went on. -- REW */
 	v = apic_read(APIC_ESR);
@@ -1520,7 +1538,7 @@ void smp_error_interrupt(struct pt_regs *regs)
 	   6: Received illegal vector
 	   7: Illegal register address
 	*/
-	printk(KERN_DEBUG "APIC error on CPU%d: %02lx(%02lx)\n",
+	printk(KERN_DEBUG "APIC error on CPU%d: %02x(%02x)\n",
 		smp_processor_id(), v , v1);
 	irq_exit();
 }
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c
index ebe417b..c728885 100644
--- a/arch/x86/kernel/apic_64.c
+++ b/arch/x86/kernel/apic_64.c
@@ -1528,10 +1528,17 @@ int __init APIC_init_uniprocessor(void)
 /*
  * This interrupt should _never_ happen with our APIC/SMP architecture
  */
+#ifdef CONFIG_X86_64
 asmlinkage void smp_spurious_interrupt(void)
+#else
+void smp_spurious_interrupt(struct pt_regs *regs)
+#endif
 {
-	unsigned int v;
+	u32 v;
+
+#ifdef CONFIG_X86_64
 	exit_idle();
+#endif
 	irq_enter();
 	/*
 	 * Check if this really is a spurious interrupt and ACK it
@@ -1542,18 +1549,31 @@ asmlinkage void smp_spurious_interrupt(void)
 	if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
 		ack_APIC_irq();
 
+#ifdef CONFIG_X86_64
 	add_pda(irq_spurious_count, 1);
+#else
+	/* see sw-dev-man vol 3, chapter 7.4.13.5 */
+	printk(KERN_INFO "spurious APIC interrupt on CPU#%d, "
+	       "should never happen.\n", smp_processor_id());
+	__get_cpu_var(irq_stat).irq_spurious_count++;
+#endif
 	irq_exit();
 }
 
 /*
  * This interrupt should never happen with our APIC/SMP architecture
  */
+#ifdef CONFIG_X86_64
 asmlinkage void smp_error_interrupt(void)
+#else
+void smp_error_interrupt(struct pt_regs *regs)
+#endif
 {
-	unsigned int v, v1;
+	u32 v, v1;
 
+#ifdef CONFIG_X86_64
 	exit_idle();
+#endif
 	irq_enter();
 	/* First tickle the hardware, only then report what went on. -- REW */
 	v = apic_read(APIC_ESR);
-- 
1.5.4.5

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
An idea .... with code, jassi brar, (Sun Aug 24, 4:53 am)
[PATCH 00/18] merge apic_32.c and apic_64.c, Yinghai Lu, (Sun Aug 24, 5:01 am)
Re: An idea .... with code, Andi Kleen, (Tue Aug 26, 4:24 am)
Re: An idea .... with code, jassi brar, (Wed Aug 27, 3:24 am)
Re: An idea .... with code, Andi Kleen, (Wed Aug 27, 3:47 am)
Re: An idea .... with code, jassi brar, (Wed Aug 27, 8:38 am)
Re: An idea .... with code, Andi Kleen, (Wed Aug 27, 8:47 am)
Re: An idea .... with code, Kasper Sandberg, (Wed Aug 27, 10:49 am)
Re: An idea .... with code, Bill Davidsen, (Fri Aug 29, 10:57 pm)
Re: An idea .... with code, Andi Kleen, (Wed Aug 27, 11:02 am)
Re: An idea .... with code, Kasper Sandberg, (Thu Aug 28, 5:41 am)
Re: An idea .... with code, jassi brar, (Wed Aug 27, 9:24 pm)
Re: An idea .... with code, David Newall, (Wed Aug 27, 5:57 am)
Re: An idea .... with code, Andi Kleen, (Wed Aug 27, 6:01 am)
Re: An idea .... with code, Alexey Dobriyan, (Tue Aug 26, 6:44 am)
Re: An idea .... with code, Andi Kleen, (Tue Aug 26, 7:08 am)
Re: An idea .... with code, Bill Davidsen, (Mon Aug 25, 10:47 pm)
Re: An idea .... with code, Jochen Voß, (Mon Aug 25, 8:22 am)
Re: An idea .... with code, Marcin Slusarz, (Mon Aug 25, 4:53 pm)
Re: [PATCH 00/18] merge apic_32.c and apic_64.c, Ingo Molnar, (Sun Aug 24, 8:16 am)
Re: [PATCH 00/18] merge apic_32.c and apic_64.c, Ingo Molnar, (Sun Aug 24, 5:14 am)
[PATCH 17/18] x86: apic copy apic_64.c to apic_32.c, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 15/18] x86: apic unify smp_spurious/error_interrupt, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 14/18] x86: merge header files in apic_xx.c, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 12/18] x86: merge APIC_init_uniprocessor, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 11/18] x86: make apic_32/64.c more like, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 09/18] x86: use HAVE_X2APIC in apic_64.c, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 08/18] x86: apic_xx.c order variables, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 05/18] x86: apic - unify setup_local_APIC, Yinghai Lu, (Sun Aug 24, 5:01 am)
[PATCH 03/18] x86: apic - unify setup_apicpmtimer, Yinghai Lu, (Sun Aug 24, 5:01 am)