2004-11-12 00:56:09

by Nigel Cunningham

[permalink] [raw]
Subject: How could smp_error_interrupt get activated on x86?

Hi all.

I can't for the life of me figure out how one of my suspend2 users could
get this on a 2.6.9 kernel:

> Software Suspend 2.1.4: Initiating a software suspend cycle.
> ACPI: PCI Interrupt Link [ALKA] BIOS reported IRQ 0, using IRQ 20
> ACPI: PCI Interrupt Link [ALKB] BIOS reported IRQ 0, using IRQ 21
> ACPI: PCI Interrupt Link [ALKC] BIOS reported IRQ 0, using IRQ 22
> ACPI: PCI Interrupt Link [ALKD] BIOS reported IRQ 0, using IRQ 23
> APIC error on CPU0: 00(00)
> ACPI: PCI interrupt 0000:00:0f.0[A] -> GSI 20 (level, low) -> IRQ 177
> ACPI: PCI interrupt 0000:00:11.5[C] -> GSI 22 (level, low) -> IRQ 193
> Please include the following information in bug reports:
> - SUSPEND core : 2.1.4
> [...]
>
> All work fine.
> Processor and motherboard Athlon Barton 2500+@3200+, EPoX 8KRAI
(KT600).
>
> What is APIC error CPU0: 00(00)?

I know it's really no error (according to the code), but I can't even
see how the function gets called in the first place:

find -type f | xargs grep smp_error_interrupt
./arch/i386/kernel/apic.c:asmlinkage void smp_error_interrupt(void)
./arch/x86_64/kernel/apic.c:asmlinkage void smp_error_interrupt(void)
./arch/x86_64/kernel/entry.S: apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt

Regards,

Nigel
--
Nigel Cunningham
Pastoral Worker
Christian Reformed Church of Tuggeranong
PO Box 1004, Tuggeranong, ACT 2901

You see, at just the right time, when we were still powerless, Christ
died for the ungodly. -- Romans 5:6


2004-11-12 01:13:32

by Zwane Mwaikambo

[permalink] [raw]
Subject: Re: How could smp_error_interrupt get activated on x86?

On Fri, 12 Nov 2004, Nigel Cunningham wrote:

> I can't for the life of me figure out how one of my suspend2 users could
> get this on a 2.6.9 kernel:
>
> > Software Suspend 2.1.4: Initiating a software suspend cycle.
> > ACPI: PCI Interrupt Link [ALKA] BIOS reported IRQ 0, using IRQ 20
> > ACPI: PCI Interrupt Link [ALKB] BIOS reported IRQ 0, using IRQ 21
> > ACPI: PCI Interrupt Link [ALKC] BIOS reported IRQ 0, using IRQ 22
> > ACPI: PCI Interrupt Link [ALKD] BIOS reported IRQ 0, using IRQ 23
> > APIC error on CPU0: 00(00)
> > ACPI: PCI interrupt 0000:00:0f.0[A] -> GSI 20 (level, low) -> IRQ 177
> > ACPI: PCI interrupt 0000:00:11.5[C] -> GSI 22 (level, low) -> IRQ 193
> > Please include the following information in bug reports:
> > - SUSPEND core : 2.1.4
> > [...]
> >
> > All work fine.
> > Processor and motherboard Athlon Barton 2500+@3200+, EPoX 8KRAI
> (KT600).
> >
> > What is APIC error CPU0: 00(00)?
>
> I know it's really no error (according to the code), but I can't even
> see how the function gets called in the first place:
>
> find -type f | xargs grep smp_error_interrupt
> ./arch/i386/kernel/apic.c:asmlinkage void smp_error_interrupt(void)
> ./arch/x86_64/kernel/apic.c:asmlinkage void smp_error_interrupt(void)
> ./arch/x86_64/kernel/entry.S: apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt

Ahhh y'see it's by BUILD_INTERRUPT magik;

arch/i386/kernel/entry.S defines BUILD_INTERRUPT, then includes;
include/asm-i386/mach-default/entry_arch.h which does;

BUILD_INTERRUPT(error_interrupt,ERROR_APIC_VECTOR)

Which results in the IDT stub being created for ERROR_APIC_VECTOR

Neat huh? ;)

Regarding your error, has the IOAPIC resumed when you get there?

Zwane