|
@@ -1899,10 +1899,14 @@ void __init register_lapic_address(unsigned long address)
|
|
/*
|
|
/*
|
|
* This interrupt should _never_ happen with our APIC/SMP architecture
|
|
* This interrupt should _never_ happen with our APIC/SMP architecture
|
|
*/
|
|
*/
|
|
-static void __smp_spurious_interrupt(u8 vector)
|
|
|
|
|
|
+__visible void __irq_entry smp_spurious_interrupt(struct pt_regs *regs)
|
|
{
|
|
{
|
|
|
|
+ u8 vector = ~regs->orig_ax;
|
|
u32 v;
|
|
u32 v;
|
|
|
|
|
|
|
|
+ entering_irq();
|
|
|
|
+ trace_spurious_apic_entry(vector);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Check if this really is a spurious interrupt and ACK it
|
|
* Check if this really is a spurious interrupt and ACK it
|
|
* if it is a vectored one. Just in case...
|
|
* if it is a vectored one. Just in case...
|
|
@@ -1917,22 +1921,7 @@ static void __smp_spurious_interrupt(u8 vector)
|
|
/* see sw-dev-man vol 3, chapter 7.4.13.5 */
|
|
/* see sw-dev-man vol 3, chapter 7.4.13.5 */
|
|
pr_info("spurious APIC interrupt through vector %02x on CPU#%d, "
|
|
pr_info("spurious APIC interrupt through vector %02x on CPU#%d, "
|
|
"should never happen.\n", vector, smp_processor_id());
|
|
"should never happen.\n", vector, smp_processor_id());
|
|
-}
|
|
|
|
|
|
|
|
-__visible void __irq_entry smp_spurious_interrupt(struct pt_regs *regs)
|
|
|
|
-{
|
|
|
|
- entering_irq();
|
|
|
|
- __smp_spurious_interrupt(~regs->orig_ax);
|
|
|
|
- exiting_irq();
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-__visible void __irq_entry smp_trace_spurious_interrupt(struct pt_regs *regs)
|
|
|
|
-{
|
|
|
|
- u8 vector = ~regs->orig_ax;
|
|
|
|
-
|
|
|
|
- entering_irq();
|
|
|
|
- trace_spurious_apic_entry(vector);
|
|
|
|
- __smp_spurious_interrupt(vector);
|
|
|
|
trace_spurious_apic_exit(vector);
|
|
trace_spurious_apic_exit(vector);
|
|
exiting_irq();
|
|
exiting_irq();
|
|
}
|
|
}
|
|
@@ -1940,10 +1929,8 @@ __visible void __irq_entry smp_trace_spurious_interrupt(struct pt_regs *regs)
|
|
/*
|
|
/*
|
|
* This interrupt should never happen with our APIC/SMP architecture
|
|
* This interrupt should never happen with our APIC/SMP architecture
|
|
*/
|
|
*/
|
|
-static void __smp_error_interrupt(struct pt_regs *regs)
|
|
|
|
|
|
+__visible void __irq_entry smp_error_interrupt(struct pt_regs *regs)
|
|
{
|
|
{
|
|
- u32 v;
|
|
|
|
- u32 i = 0;
|
|
|
|
static const char * const error_interrupt_reason[] = {
|
|
static const char * const error_interrupt_reason[] = {
|
|
"Send CS error", /* APIC Error Bit 0 */
|
|
"Send CS error", /* APIC Error Bit 0 */
|
|
"Receive CS error", /* APIC Error Bit 1 */
|
|
"Receive CS error", /* APIC Error Bit 1 */
|
|
@@ -1954,6 +1941,10 @@ static void __smp_error_interrupt(struct pt_regs *regs)
|
|
"Received illegal vector", /* APIC Error Bit 6 */
|
|
"Received illegal vector", /* APIC Error Bit 6 */
|
|
"Illegal register address", /* APIC Error Bit 7 */
|
|
"Illegal register address", /* APIC Error Bit 7 */
|
|
};
|
|
};
|
|
|
|
+ u32 v, i = 0;
|
|
|
|
+
|
|
|
|
+ entering_irq();
|
|
|
|
+ trace_error_apic_entry(ERROR_APIC_VECTOR);
|
|
|
|
|
|
/* First tickle the hardware, only then report what went on. -- REW */
|
|
/* First tickle the hardware, only then report what went on. -- REW */
|
|
if (lapic_get_maxlvt() > 3) /* Due to the Pentium erratum 3AP. */
|
|
if (lapic_get_maxlvt() > 3) /* Due to the Pentium erratum 3AP. */
|
|
@@ -1975,20 +1966,6 @@ static void __smp_error_interrupt(struct pt_regs *regs)
|
|
|
|
|
|
apic_printk(APIC_DEBUG, KERN_CONT "\n");
|
|
apic_printk(APIC_DEBUG, KERN_CONT "\n");
|
|
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-__visible void __irq_entry smp_error_interrupt(struct pt_regs *regs)
|
|
|
|
-{
|
|
|
|
- entering_irq();
|
|
|
|
- __smp_error_interrupt(regs);
|
|
|
|
- exiting_irq();
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-__visible void __irq_entry smp_trace_error_interrupt(struct pt_regs *regs)
|
|
|
|
-{
|
|
|
|
- entering_irq();
|
|
|
|
- trace_error_apic_entry(ERROR_APIC_VECTOR);
|
|
|
|
- __smp_error_interrupt(regs);
|
|
|
|
trace_error_apic_exit(ERROR_APIC_VECTOR);
|
|
trace_error_apic_exit(ERROR_APIC_VECTOR);
|
|
exiting_irq();
|
|
exiting_irq();
|
|
}
|
|
}
|