Re: [4/6] 2.6.21-rc2: known regressions

Len Brown
2007-03-08T23:36:48Z

On Monday 05 March 2007 05:35, Antonino A. Daplas wrote:
> On Mon, 2007-03-05 at 02:50 +0100, Adrian Bunk wrote:
> > This email lists some known regressions in 2.6.21-rc2 compared to 2.6.20
> > that are not yet fixed in Linus' tree.
> >
> > If you find your name in the Cc header, you are either submitter of one
> > of the bugs, maintainer of an affectected subsystem or driver, a patch
> > of you caused a breakage or I'm considering you in any other way
> > possibly involved with one or more of these issues.
> >
> > Due to the huge amount of recipients, please trim the Cc when answering.
> >
> >
> > Subject : Asus A8N-VM motherboard:
> > framebuffer/console boot failure boot failure (ACPI related)
> > References : http://lkml.org/lkml/2007/2/23/132
> > Submitter : Andrew Nelless <andrew@nelless.net>
> > Caused-By : Len Brown <len.brown@intel.com>
> > commit 7f8f97c3cc75d5783d0b45cf323dedf17684be19
> > Handled-By : Antonino A. Daplas <adaplas@gmail.com>
> > Status : problem is being debugged
> >
>
> This is not a framebuffer nor console problem.
>
> I think Andrew Nelless confirmed that the cause is from the above
> commit. How to fix it, I don't know. Perhaps the
> acpi_skip_timer_override boot option has to be used.

Looks like I got fooled by the negative logic for the nvidia_bugs().
Please test this patch -- it should fix it,
as well as simplify the code a bit.

thanks,
-Len

Subject: ACPI: repair nvidia early quirk breakage on x86_64

x86_64 nvidia_bugs() broke when we bailed out on not finding the HPET.
However, the quirk works by checking for _not_ finding the HPET...

Delete the nvidia_hpet_detected flag and simply test for
not finding the HPET, which is simple to do now that
acpi_table_parse returns 1 on failure.

Signed-off-by: Len Brown <len.brown@intel.com>
---
i386/kernel/acpi/earlyquirk.c | 7 +------
x86_64/kernel/early-quirks.c | 9 +--------
2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c
index bf86f76..7fdba8a 100644
--- a/arch/i386/kernel/acpi/earlyquirk.c
+++ b/arch/i386/kernel/acpi/earlyquirk.c
@@ -14,11 +14,8 @@

#ifdef CONFIG_ACPI

-static int nvidia_hpet_detected __initdata;
-
static int __init nvidia_hpet_check(struct acpi_table_header *header)
{
- nvidia_hpet_detected = 1;
return 0;
}
#endif
@@ -29,9 +26,7 @@ static int __init check_bridge(int vendor, int device)
/* According to Nvidia all timer overrides are bogus unless HPET
is enabled. */
if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) {
- nvidia_hpet_detected = 0;
- acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check);
- if (nvidia_hpet_detected == 0) {
+ if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check) {
acpi_skip_timer_override = 1;
printk(KERN_INFO "Nvidia board "
"detected. Ignoring ACPI "
diff --git a/arch/x86_64/kernel/early-quirks.c b/arch/x86_64/kernel/early-quirks.c
index 8047ea8..dec587b 100644
--- a/arch/x86_64/kernel/early-quirks.c
+++ b/arch/x86_64/kernel/early-quirks.c
@@ -30,11 +30,8 @@ static void via_bugs(void)

#ifdef CONFIG_ACPI

-static int nvidia_hpet_detected __initdata;
-
static int __init nvidia_hpet_check(struct acpi_table_header *header)
{
- nvidia_hpet_detected = 1;
return 0;
}
#endif
@@ -52,11 +49,7 @@ static void nvidia_bugs(void)
if (acpi_use_timer_override)
return;

- nvidia_hpet_detected = 0;
- if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check))
- return;
-
- if (nvidia_hpet_detected == 0) {
+ if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
acpi_skip_timer_override = 1;
printk(KERN_INFO "Nvidia board "
"detected. Ignoring ACPI "