The problem should be solved with commits:
x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC
IMHO it does not make sense to check within a dmi-quirk
whether an early-quirk was applied. Boot sequence is as follows:
acpi_boot_table_init() (it applies dmi-quirks)
...
early_quirks() (detect bogus IRQ0 override)
...
acpi_boot_init() (setup IO APIC)
Thus with current code we will always get following warnings for
Laptops that have this dmi_ignore_irq0_timer_override dmi quirk:
WARNING: at arch/x86/kernel/acpi/boot.c:1410
dmi_ignore_irq0_timer_override+0x30/0x60()
ati_ixp4x0 quirk not complete.
... just because the early-quirk (ati_ixp4x0) was not yet executed.
Signed-off-by: Andreas Herrmann <[email protected]>
---
arch/x86/kernel/acpi/boot.c | 60 -------------------------------------------
1 files changed, 0 insertions(+), 60 deletions(-)
Please apply.
Thanks,
Andreas
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index eb875cd..4835cf9 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1414,24 +1414,6 @@ static int __init force_acpi_ht(const struct dmi_system_id *d)
}
/*
- * Force ignoring BIOS IRQ0 pin2 override
- */
-static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
-{
- /*
- * The ati_ixp4x0_rev() early PCI quirk should have set
- * the acpi_skip_timer_override flag already:
- */
- if (!acpi_skip_timer_override) {
- WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n");
- pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n",
- d->ident);
- acpi_skip_timer_override = 1;
- }
- return 0;
-}
-
-/*
* If your system is blacklisted here, but you find that acpi=force
* works for you, please contact [email protected]
*/
@@ -1598,48 +1580,6 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
},
},
- /*
- * HP laptops which use a DSDT reporting as HP/SB400/10000,
- * which includes some code which overrides all temperature
- * trip points to 16C if the INTIN2 input of the I/O APIC
- * is enabled. This input is incorrectly designated the
- * ISA IRQ 0 via an interrupt source override even though
- * it is wired to the output of the master 8259A and INTIN0
- * is not connected at all. Force ignoring BIOS IRQ0 pin2
- * override in that cases.
- */
- {
- .callback = dmi_ignore_irq0_timer_override,
- .ident = "HP nx6115 laptop",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6115"),
- },
- },
- {
- .callback = dmi_ignore_irq0_timer_override,
- .ident = "HP NX6125 laptop",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6125"),
- },
- },
- {
- .callback = dmi_ignore_irq0_timer_override,
- .ident = "HP NX6325 laptop",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
- },
- },
- {
- .callback = dmi_ignore_irq0_timer_override,
- .ident = "HP 6715b laptop",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
- DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"),
- },
- },
{}
};
--
1.6.0.2
* Andreas Herrmann <[email protected]> wrote:
> The problem should be solved with commits:
>
> x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
> x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC
>
> IMHO it does not make sense to check within a dmi-quirk
> whether an early-quirk was applied. Boot sequence is as follows:
>
> acpi_boot_table_init() (it applies dmi-quirks)
> ...
> early_quirks() (detect bogus IRQ0 override)
> ...
> acpi_boot_init() (setup IO APIC)
>
> Thus with current code we will always get following warnings for
> Laptops that have this dmi_ignore_irq0_timer_override dmi quirk:
>
> WARNING: at arch/x86/kernel/acpi/boot.c:1410
> dmi_ignore_irq0_timer_override+0x30/0x60()
> ati_ixp4x0 quirk not complete.
>
> ... just because the early-quirk (ati_ixp4x0) was not yet executed.
could we move the DMI check to after the early quicks stage? It would be
nice to have this double check, for at least one kernel cycle.
Ingo
On Thu, Oct 16, 2008 at 12:57:06PM +0200, Andreas Herrmann wrote:
> The problem should be solved with commits:
>
> x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
> x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC
>
> IMHO it does not make sense to check within a dmi-quirk
> whether an early-quirk was applied. Boot sequence is as follows:
>
> acpi_boot_table_init() (it applies dmi-quirks)
> ...
> early_quirks() (detect bogus IRQ0 override)
> ...
> acpi_boot_init() (setup IO APIC)
>
> Thus with current code we will always get following warnings for
> Laptops that have this dmi_ignore_irq0_timer_override dmi quirk:
>
> WARNING: at arch/x86/kernel/acpi/boot.c:1410
> dmi_ignore_irq0_timer_override+0x30/0x60()
> ati_ixp4x0 quirk not complete.
>
> ... just because the early-quirk (ati_ixp4x0) was not yet executed.
>
Hi Ingo,
How are chances that this patch will go into tip-tree?
I'd like to see this fix in 2.6.28.
Thanks,
Andreas
On Wed, Oct 22, 2008 at 12:02:54PM +0200, Ingo Molnar wrote:
>
> * Andreas Herrmann <[email protected]> wrote:
>
> > The problem should be solved with commits:
> >
> > x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
> > x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC
> >
> > IMHO it does not make sense to check within a dmi-quirk
> > whether an early-quirk was applied. Boot sequence is as follows:
> >
> > acpi_boot_table_init() (it applies dmi-quirks)
> > ...
> > early_quirks() (detect bogus IRQ0 override)
> > ...
> > acpi_boot_init() (setup IO APIC)
> >
> > Thus with current code we will always get following warnings for
> > Laptops that have this dmi_ignore_irq0_timer_override dmi quirk:
> >
> > WARNING: at arch/x86/kernel/acpi/boot.c:1410
> > dmi_ignore_irq0_timer_override+0x30/0x60()
> > ati_ixp4x0 quirk not complete.
> >
> > ... just because the early-quirk (ati_ixp4x0) was not yet executed.
>
> could we move the DMI check to after the early quicks stage? It would be
> nice to have this double check, for at least one kernel cycle.
Ok, I'll have a look at that.
Andreas
Problems with bogus IRQ0 override of those laptops should be fixed
with commits
x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC
that introduce early-quirks based on chipset configuration.
For further information, see
http://bugzilla.kernel.org/show_bug.cgi?id=11516
Instead of removing the related dmi-quirks completely we'd like to
keep them for (at least) one kernel version -- to double-check whether
the early-quirks really took effect. But the dmi-quirks need to be
called after early-quirks are executed. With this patch calling
sequence for dmi-quirks is changed as follows:
acpi_boot_table_init() (dmi-quirks)
...
early_quirks() (detect bogus IRQ0 override)
...
acpi_boot_init() (late dmi-quirks and setup IO APIC)
Note: Plan is to remove the "late dmi-quirks" with next kernel version.
Cc: Ingo Molnar <[email protected]>
Signed-off-by: Andreas Herrmann <[email protected]>
---
arch/x86/kernel/acpi/boot.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 0d1c26a..3e822bc 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1598,6 +1598,11 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
},
},
+ {}
+};
+
+/* second table for DMI checks that should run after early-quirks */
+static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
/*
* HP laptops which use a DSDT reporting as HP/SB400/10000,
* which includes some code which overrides all temperature
@@ -1726,6 +1731,9 @@ int __init early_acpi_boot_init(void)
int __init acpi_boot_init(void)
{
+ /* those are executed after early-quirks are executed */
+ dmi_check_system(acpi_dmi_table_late);
+
/*
* If acpi_disabled, bail out
* One exception: acpi=ht continues far enough to enumerate LAPICs
--
1.6.0.2
* Andreas Herrmann <[email protected]> wrote:
> Problems with bogus IRQ0 override of those laptops should be fixed
> with commits
>
> x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
> x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC
>
> that introduce early-quirks based on chipset configuration.
>
> For further information, see
> http://bugzilla.kernel.org/show_bug.cgi?id=11516
>
> Instead of removing the related dmi-quirks completely we'd like to
> keep them for (at least) one kernel version -- to double-check whether
> the early-quirks really took effect. But the dmi-quirks need to be
> called after early-quirks are executed. With this patch calling
> sequence for dmi-quirks is changed as follows:
>
> acpi_boot_table_init() (dmi-quirks)
> ...
> early_quirks() (detect bogus IRQ0 override)
> ...
> acpi_boot_init() (late dmi-quirks and setup IO APIC)
>
> Note: Plan is to remove the "late dmi-quirks" with next kernel version.
>
> Cc: Ingo Molnar <[email protected]>
> Signed-off-by: Andreas Herrmann <[email protected]>
applied to tip/x86/urgent, thanks Andreas!
Ingo