Re: 2.6.3-mm3 hangs on boot x440 (scsi?)

From: Matthew Wilcox
Date: Thu Feb 26 2004 - 18:22:01 EST


On Thu, Feb 26, 2004 at 03:02:56PM -0800, john stultz wrote:
> On Thu, 2004-02-26 at 13:26, john stultz wrote:
> > On Thu, 2004-02-26 at 06:40, Go Taniguchi wrote:
> > > Hi,
> > >
> > > Andrew Morton wrote:
> > > > john stultz <johnstul@xxxxxxxxxx> wrote:
> > > >>I went back to 2.6.3-mm1 (as it was a smaller diff) and the problem was
> > > >>there as well.
> > >
> > > Problem patch is expanded-pci-config-space.patch.
> > > x440 can not enable acpi by dmi_scan.
> > > expanded-pci-config-space.patch need acpi support.
> > > So, kernel can not get x440's xAPIC interrupt.
> >
> > Wow, thanks for that analysis Go! I'll test it here to confirm.
>
> Yep, I've confirmed that backing out the expanded-pci-config-space patch
> solves it. Thanks again, Go, for hunting that down!
>
> Matthew, any ideas why the patch fails if the system has an ACPI
> blacklist entry?

Hrm. I was just asked to break out some of the ACPI code rearrangement
from the rest of the patch. Can you try this patch instead of the
expanded-pci-config-space.patch and tell me whether it continues to fail
for you?

I don't understand why it should make a difference though. It looks
to me like the current code will also fail to call the HPET code if the
bios is blacklisted.

Index: arch/i386/kernel/acpi/boot.c
===================================================================
RCS file: /var/cvs/linux-2.6/arch/i386/kernel/acpi/boot.c,v
retrieving revision 1.10
diff -u -p -r1.10 boot.c
--- a/arch/i386/kernel/acpi/boot.c 17 Feb 2004 12:51:46 -0000 1.10
+++ b/arch/i386/kernel/acpi/boot.c 26 Feb 2004 16:34:12 -0000
@@ -398,55 +398,10 @@ acpi_find_rsdp (void)
return rsdp_phys;
}

-/*
- * acpi_boot_init()
- * called from setup_arch(), always.
- * 1. maps ACPI tables for later use
- * 2. enumerates lapics
- * 3. enumerates io-apics
- *
- * side effects:
- * acpi_lapic = 1 if LAPIC found
- * acpi_ioapic = 1 if IOAPIC found
- * if (acpi_lapic && acpi_ioapic) smp_found_config = 1;
- * if acpi_blacklisted() acpi_disabled = 1;
- * acpi_irq_model=...
- * ...
- *
- * return value: (currently ignored)
- * 0: success
- * !0: failure
- */

-int __init
-acpi_boot_init (void)
+static int acpi_apic_setup(void)
{
- int result = 0;
-
- if (acpi_disabled && !acpi_ht)
- return 1;
-
- /*
- * The default interrupt routing model is PIC (8259). This gets
- * overriden if IOAPICs are enumerated (below).
- */
- acpi_irq_model = ACPI_IRQ_MODEL_PIC;
-
- /*
- * Initialize the ACPI boot-time table parser.
- */
- result = acpi_table_init();
- if (result) {
- acpi_disabled = 1;
- return result;
- }
-
- result = acpi_blacklisted();
- if (result) {
- printk(KERN_WARNING PREFIX "BIOS listed in blacklist, disabling ACPI support\n");
- acpi_disabled = 1;
- return result;
- }
+ int result;

#ifdef CONFIG_X86_LOCAL_APIC

@@ -506,24 +461,17 @@ acpi_boot_init (void)

acpi_lapic = 1;

-#endif /*CONFIG_X86_LOCAL_APIC*/
+#endif /* CONFIG_X86_LOCAL_APIC */

#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)

/*
* I/O APIC
- * --------
*/

- /*
- * ACPI interpreter is required to complete interrupt setup,
- * so if it is off, don't enumerate the io-apics with ACPI.
- * If MPS is present, it will handle them,
- * otherwise the system will stay in PIC mode
- */
- if (acpi_disabled || acpi_noirq) {
+ if (acpi_noirq) {
return 1;
- }
+ }

/*
* if "noapic" boot option, don't look for IO-APICs
@@ -538,8 +486,7 @@ acpi_boot_init (void)
if (!result) {
printk(KERN_ERR PREFIX "No IOAPIC entries present\n");
return -ENODEV;
- }
- else if (result < 0) {
+ } else if (result < 0) {
printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n");
return result;
}
@@ -576,9 +523,71 @@ acpi_boot_init (void)
}
#endif

+ return 0;
+}
+
+/*
+ * acpi_boot_init()
+ * called from setup_arch(), always.
+ * 1. maps ACPI tables for later use
+ * 2. enumerates lapics
+ * 3. enumerates io-apics
+ *
+ * side effects:
+ * acpi_lapic = 1 if LAPIC found
+ * acpi_ioapic = 1 if IOAPIC found
+ * if (acpi_lapic && acpi_ioapic) smp_found_config = 1;
+ * if acpi_blacklisted() acpi_disabled = 1;
+ * acpi_irq_model=...
+ * ...
+ *
+ * return value: (currently ignored)
+ * 0: success
+ * !0: failure
+ */
+
+int __init
+acpi_boot_init (void)
+{
+ int result, error;
+
+ if (acpi_disabled && !acpi_ht)
+ return 1;
+
+ /*
+ * The default interrupt routing model is PIC (8259). This gets
+ * overriden if IOAPICs are enumerated (below).
+ */
+ acpi_irq_model = ACPI_IRQ_MODEL_PIC;
+
+ /*
+ * Initialize the ACPI boot-time table parser.
+ */
+ result = acpi_table_init();
+ if (result) {
+ acpi_disabled = 1;
+ return result;
+ }
+
+ result = acpi_blacklisted();
+ if (result) {
+ printk(KERN_WARNING PREFIX "BIOS listed in blacklist, disabling ACPI support\n");
+ acpi_disabled = 1;
+ return result;
+ }
+
+ error = acpi_apic_setup();
+
#ifdef CONFIG_HPET_TIMER
- acpi_table_parse(ACPI_HPET, acpi_parse_hpet);
+ result = acpi_table_parse(ACPI_HPET, acpi_parse_hpet);
+ if (result < 0) {
+ printk(KERN_ERR PREFIX "Error %d parsing HPET\n", result);
+ if (!error)
+ error = result;
+ } else if (result > 1) {
+ printk(KERN_WARNING PREFIX "Multiple HPET tables exist\n");
+ }
#endif

- return 0;
+ return error;
}

--
"Next the statesmen will invent cheap lies, putting the blame upon
the nation that is attacked, and every man will be glad of those
conscience-soothing falsities, and will diligently study them, and refuse
to examine any refutations of them; and thus he will by and by convince
himself that the war is just, and will thank God for the better sleep
he enjoys after this process of grotesque self-deception." -- Mark Twain
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/