From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Ingo Molnar <mingo@elte.hu>
Cc: Matthew Garrett <mjg59@srcf.ucam.org>,
"Maciej W. Rozycki" <macro@linux-mips.org>,
Len Brown <lenb@kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
linux-next@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-kernel@vger.kernel.org, Andi Kleen <andi@firstfloor.org>
Subject: Re: [PATCH 2/2] acpi: Disable IRQ 0 through I/O APIC for some HP systems
Date: Mon, 7 Jul 2008 03:19:28 +0200 [thread overview]
Message-ID: <200807070319.29470.rjw@sisk.pl> (raw)
In-Reply-To: <200807070102.38854.rjw@sisk.pl>
On Monday, 7 of July 2008, Rafael J. Wysocki wrote:
> On Tuesday, 1 of July 2008, Ingo Molnar wrote:
> >
> > * Rafael J. Wysocki <rjw@sisk.pl> wrote:
> >
> > > On Tuesday, 1 of July 2008, Ingo Molnar wrote:
> > > >
> > > > * Matthew Garrett <mjg59@srcf.ucam.org> wrote:
> > > >
> > > > > Assuming it works for Rafael (still haven't had time to pull my nx6125
> > > > > out of storage):
> > > > >
> > > > > Signed-off-by: mjg@redhat.com
> > > >
> > > > Rafael, could you please try the latest tip/master that i've just pushed
> > > > out:
> > > >
> > > > http://people.redhat.com/mingo/tip.git/README
> > > >
> > > > it has the final form of these changes integrated - it should in
> > > > theory work out of box on your system, with no boot parameters or
> > > > other explicit quirks needed anywhere.
> > >
> > > I tested patches [1/2] (your version) and [2/2] on top of today's
> > > linux-next and they work just fine.
> >
> > thanks Rafael!
>
> Well, I'm afraid that my information wasn't correct. The patches actually
> don't work, but I had my own additional patch that fixed the problem applied,
> which I've only just discovered. Sorry for the confusion and the issue is
> still unfixed.
Appended is a patch that actually works for me (it's missing the i386 part,
but I can't test that anyway).
Please note two things:
(1) The whole acpi_dmi_table[] thing originally depended on __i386__, so it
wouldn't work on x86-64 no matter what. I removed that dependecy, but
I have no idea why it was there and so I'm not sure if that's correct.
(2) The clear_IO_APIC_pin(apic1, pin1) done if disable_irq0_through_ioapic is
true is absolutely essential. The symptoms are 100% reproducible without it.
Thanks,
Rafael
---
arch/x86/kernel/acpi/boot.c | 43 +++++++++++++++++++++++++++++++++++++------
arch/x86/kernel/io_apic_64.c | 19 ++++++++++++++-----
2 files changed, 51 insertions(+), 11 deletions(-)
Index: linux-next/arch/x86/kernel/acpi/boot.c
===================================================================
--- linux-next.orig/arch/x86/kernel/acpi/boot.c
+++ linux-next/arch/x86/kernel/acpi/boot.c
@@ -1363,8 +1363,6 @@ static void __init acpi_process_madt(voi
return;
}
-#ifdef __i386__
-
static int __init disable_acpi_irq(const struct dmi_system_id *d)
{
if (!acpi_force) {
@@ -1415,6 +1413,17 @@ static int __init force_acpi_ht(const st
}
/*
+ * Don't register any I/O APIC entries for the 8254 timer IRQ.
+ */
+static int __init
+dmi_disable_irq0_through_ioapic(const struct dmi_system_id *d)
+{
+ pr_notice("%s detected: disabling IRQ 0 through I/O APIC\n", d->ident);
+ force_disable_irq0_through_ioapic();
+ return 0;
+}
+
+/*
* If your system is blacklisted here, but you find that acpi=force
* works for you, please contact acpi-devel@sourceforge.net
*/
@@ -1581,11 +1590,35 @@ static struct dmi_system_id __initdata a
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. Abandon any attempts to route
+ * IRQ 0 through the I/O APIC therefore.
+ */
+ {
+ .callback = dmi_disable_irq0_through_ioapic,
+ .ident = "HP NX6125 laptop",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6125"),
+ },
+ },
+ {
+ .callback = dmi_disable_irq0_through_ioapic,
+ .ident = "HP NX6325 laptop",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
+ },
+ },
{}
};
-#endif /* __i386__ */
-
/*
* acpi_boot_table_init() and acpi_boot_init()
* called from setup_arch(), always.
@@ -1613,9 +1646,7 @@ int __init acpi_boot_table_init(void)
{
int error;
-#ifdef __i386__
dmi_check_system(acpi_dmi_table);
-#endif
/*
* If acpi_disabled, bail out
Index: linux-next/arch/x86/kernel/io_apic_64.c
===================================================================
--- linux-next.orig/arch/x86/kernel/io_apic_64.c
+++ linux-next/arch/x86/kernel/io_apic_64.c
@@ -94,6 +94,13 @@ static int no_timer_check;
static int disable_timer_pin_1 __initdata;
+static bool disable_irq0_through_ioapic __initdata;
+
+void __init force_disable_irq0_through_ioapic(void)
+{
+ disable_irq0_through_ioapic = true;
+}
+
int timer_through_8259 __initdata;
/* Where if anywhere is the i8259 connect in external int mode */
@@ -1714,12 +1721,14 @@ static inline void __init check_timer(vo
apic2 = apic1;
}
- replace_pin_at_irq(0, 0, 0, apic1, pin1);
- apic1 = 0;
- pin1 = 0;
- setup_timer_IRQ0_pin(apic1, pin1, cfg->vector);
+ if (disable_irq0_through_ioapic) {
+ clear_IO_APIC_pin(apic1, pin1);
+ } else {
+ replace_pin_at_irq(0, 0, 0, apic1, pin1);
+ apic1 = 0;
+ pin1 = 0;
+ setup_timer_IRQ0_pin(apic1, pin1, cfg->vector);
- if (pin1 != -1) {
/*
* Ok, does IRQ0 through the IOAPIC work?
*/
next prev parent reply other threads:[~2008-07-07 1:19 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-01 0:12 [PATCH 2/2] acpi: Disable IRQ 0 through I/O APIC for some HP systems Maciej W. Rozycki
2008-07-01 0:17 ` Matthew Garrett
2008-07-01 8:46 ` Ingo Molnar
2008-07-01 19:58 ` Rafael J. Wysocki
2008-07-01 20:24 ` Ingo Molnar
2008-07-04 21:21 ` Rafael J. Wysocki
2008-07-06 23:02 ` Rafael J. Wysocki
2008-07-07 1:19 ` Rafael J. Wysocki [this message]
2008-07-07 7:17 ` Ingo Molnar
2008-07-07 7:36 ` Ingo Molnar
2008-07-07 12:24 ` Rafael J. Wysocki
2008-07-07 11:41 ` Maciej W. Rozycki
2008-07-07 12:23 ` Rafael J. Wysocki
2008-07-07 14:01 ` Maciej W. Rozycki
2008-07-07 18:03 ` Rafael J. Wysocki
2008-07-07 20:10 ` Maciej W. Rozycki
2008-07-07 20:31 ` Rafael J. Wysocki
2008-07-07 21:39 ` Maciej W. Rozycki
2008-07-07 22:10 ` Rafael J. Wysocki
2008-07-07 12:28 ` Rafael J. Wysocki
2008-07-07 17:10 ` Maciej W. Rozycki
2008-07-07 17:51 ` Ray Lee
2008-07-07 18:09 ` Rafael J. Wysocki
2008-07-07 19:59 ` Maciej W. Rozycki
2008-07-07 20:17 ` Rafael J. Wysocki
2008-07-07 21:38 ` Maciej W. Rozycki
2008-07-07 20:30 ` Maciej W. Rozycki
2008-07-07 3:54 ` Zhao Forrest
2008-07-07 12:34 ` Rafael J. Wysocki
2008-07-08 11:24 ` Andreas Herrmann
2008-07-08 14:39 ` Maciej W. Rozycki
2008-07-08 15:27 ` Rafael J. Wysocki
2008-07-08 16:25 ` Maciej W. Rozycki
2008-07-08 16:54 ` Rafael J. Wysocki
[not found] <fa.OuKI5CNmq3HqeBQCfWOUtrq4+oA@ifi.uio.no>
2008-07-03 5:44 ` Robert Hancock
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200807070319.29470.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=andi@firstfloor.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-next@vger.kernel.org \
--cc=macro@linux-mips.org \
--cc=mingo@elte.hu \
--cc=mjg59@srcf.ucam.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).