lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <m1k4p5d702.fsf@fess.ebiederm.org>
Date:	Thu, 08 Jul 2010 13:59:57 -0700
From:	ebiederm@...ssion.com (Eric W. Biederman)
To:	Yinghai Lu <yinghai@...nel.org>
Cc:	Meelis Roos <mroos@...ux.ee>,
	Linux Kernel list <linux-kernel@...r.kernel.org>,
	Ingo Molnar <mingo@...e.hu>,
	Thomas Gleixner <tglx@...utronix.de>,
	"H. Peter Anvin" <hpa@...or.com>
Subject: Re: 2.6.35-rc* regression: ERROR: Unable to locate IOAPIC for GSI *

Yinghai Lu <yinghai@...nel.org> writes:

> On Thu, Jul 8, 2010 at 1:27 PM, Yinghai Lu <yinghai@...nel.org> wrote:
>> On Thu, Jul 8, 2010 at 6:53 AM, Meelis Roos <mroos@...ux.ee> wrote:
>>> Just tried 2.6.35-rc4-00086-g2aa72f6 on Celeron 900 + i815 chipset PC.
>>> I get these errors during bootup, and all interrupts become XT-PIC:
>>>
>>> [    0.087302] pnp: PnP ACPI init
>>> [    0.087482] ACPI: bus type pnp registered
>>> [    0.087999] ERROR: Unable to locate IOAPIC for GSI 8
>>> [    0.087999] ERROR: Unable to locate IOAPIC for GSI 13
>>> [    0.087999] ERROR: Unable to locate IOAPIC for GSI 12
>>> [    0.088091] ERROR: Unable to locate IOAPIC for GSI 1
>>> [    0.089013] ERROR: Unable to locate IOAPIC for GSI 6
>>> [    0.090612] ERROR: Unable to locate IOAPIC for GSI 4
>>> [    0.092235] ERROR: Unable to locate IOAPIC for GSI 3
>>> [    0.094382] ERROR: Unable to locate IOAPIC for GSI 7
>>> [    0.097470] pnp: PnP ACPI: found 13 devices
>>> [    0.097625] ACPI: ACPI bus type pnp unregistered
>>>
>>> 2.6.35-rc2-00001-g386f40c behaves the same.
>>>
>>> 2.6.34 worked fine, it reports just
>>> [    0.104513] pnp: PnP ACPI init
>>> [    0.104683] ACPI: bus type pnp registered
>>> [    0.116002] pnp: PnP ACPI: found 13 devices
>>> [    0.116158] ACPI: ACPI bus type pnp unregistered
>>
>> Do you have bootlog for 2.6.34 with "debug apic=debug"?
>>
>>>
>>> Will bisect but it takes some time.
>>>
>>> Full dmesg:
>>> [    0.000000] ACPI: RSDP 000ff980 00014 (v00 AMI   )
>>> [    0.000000] ACPI: RSDT 1fff0000 0002C (v01 D815EA D815EEA2 20021106 MSFT 00001011)
>>> [    0.000000] ACPI: FACP 1fff1000 00074 (v01 D815EA EA81510A 20021106 MSFT 00001011)
>>> [    0.000000] ACPI: DSDT 1ffe0000 030E4 (v01 D815E2 EA81520A 00000023 MSFT 0100000B)
>>> [    0.000000] ACPI: FACS 1fff8000 00040
>>> [    0.000000] ACPI: SSDT 1ffe30e4 00035 (v01 D815EA EA81510A 00000015 MSFT 0100000B)
>>
>> no MADT
>>
>>> [    0.000000] ACPI: PM-Timer IO Port: 0x408
>>> [    0.000000] Found and enabled local APIC!
>>> [    0.000000] nr_irqs_gsi: 16
>>
>>> [    0.021087] Enabling APIC mode:  Flat.  Using 0 I/O APICs
>> no io apic.
>
> related commit:
>
> commit 9a0a91bb56d2915cdb8585717de38376ad20fef9
> Author: Eric W. Biederman <ebiederm@...ssion.com>
> Date:   Tue Mar 30 01:07:03 2010 -0700
>
>     x86, acpi/irq: Teach acpi_get_override_irq to take a gsi not an isa_irq
>
>     In perverse acpi implementations the isa irqs are not identity mapped
>     to the first 16 gsi.  Furthermore at least the extended interrupt
>     resource capability may return gsi's and not isa irqs.  So since
>     what we get from acpi is a gsi teach acpi_get_overrride_irq to
>     operate on a gsi instead of an isa_irq.
>
>     Signed-off-by: Eric W. Biederman <ebiederm@...ssion.com>
>     LKML-Reference: <1269936436-7039-2-git-send-email-ebiederm@...ssion.com>
>     Signed-off-by: H. Peter Anvin <hpa@...or.com>
>
> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index 127b871..73ec928 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -4082,22 +4082,27 @@ int __init io_apic_get_version(int ioapic)
>         return reg_01.bits.version;
>  }
>
> -int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity)
> +int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity)
>  {
> -       int i;
> +       int ioapic, pin, idx;
>
>         if (skip_ioapic_setup)
>                 return -1;
>
> -       for (i = 0; i < mp_irq_entries; i++)
> -               if (mp_irqs[i].irqtype == mp_INT &&
> -                   mp_irqs[i].srcbusirq == bus_irq)
> -                       break;
> -       if (i >= mp_irq_entries)
> +       ioapic = mp_find_ioapic(gsi);
> +       if (ioapic < 0)
> +               return -1;
> +
> +       pin = mp_find_ioapic_pin(ioapic, gsi);
> +       if (pin < 0)
> +               return -1;
> +
> +       idx = find_irq_entry(ioapic, pin, mp_INT);
> +       if (idx < 0)
>                 return -1;
>
> -       *trigger = irq_trigger(i);
> -       *polarity = irq_polarity(i);
> +       *trigger = irq_trigger(idx);
> +       *polarity = irq_polarity(idx);
>         return 0;
>  }
>
>
> Meelis' system doesn't have madt and mptable.
>
> and eric patch change to call mp_find_ioapic, and mp_find_ioapic_pin.
>
> so could just check
>
> if (nr_ioapics < 1)
>      return -1;
>
> in acpi_get_override_irq()

But we should check:

	if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC)
		return -1;

As I posted several weeks ago.  We want to complain if we have
no io_apics and we are in ioapic_mode.  We don't want to do anything
if we aren't in io_apic mode.

Eric

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ