Skip to contentSkip to conversation

x86: remove superfluous dmi_ignore_irq0_timer_override quirks

PATCH In review Andreas Herrmann 2 participants 6 messages Oct 16, 2008 – Oct 22, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 x86: remove superfluous dmi_ignore_irq0_timer_override quirks

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.

---
 arch/x86/kernel/acpi/boot.c |   60 -------------------------------------------
 1 files changed, 0 insertions(+), 60 deletions(-)

Please apply.

Thanks,
Andreas

arch/x86/kernel/acpi/boot.c +0 -60
index eb875cd..4835cf9 100644
@@ -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"),
-		     },
-	 },
 	{}
 };
 
Signature · 1 line
1.6.0.2
#1 lore raw
Quoted 14 lines · Andreas Herrmann

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)

Quoted 8 lines

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

#2 lore raw
Quoted 20 lines · Ingo Molnar
Quoted 17 lines · Andreas Herrmann

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:

Quoted 8 lines
Quoted 5 lines
  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

#3 lore raw

PATCH 1/1 x86: call dmi-quirks for HP Laptops after early-quirks are executed

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.

---
 arch/x86/kernel/acpi/boot.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
arch/x86/kernel/acpi/boot.c +8 -0
index 0d1c26a..3e822bc 100644
@@ -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
Signature · 1 line
1.6.0.2
Applied
#4 lore raw

Re: [PATCH] x86: call dmi-quirks for HP Laptops after early-quirks are executed

Quoted 23 lines · Andreas Herrmann

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)

Quoted 4 lines

Note: Plan is to remove the "late dmi-quirks" with next kernel version.

applied to tip/x86/urgent, thanks Andreas!

Ingo

#5 lore raw
In reply to Andreas Herrmann
Quoted 14 lines · Andreas Herrmann

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)

Quoted 9 lines

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