summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/i386/Kconfig4
-rw-r--r--arch/i386/kernel/dmi_scan.c85
-rw-r--r--init/do_mounts.c13
-rw-r--r--init/do_mounts.h11
4 files changed, 50 insertions, 63 deletions
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index b9f33bf91cae..73a107d2209b 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -1204,6 +1204,10 @@ source "drivers/pnp/Kconfig"
source "drivers/block/Kconfig"
+config MOUNT_ROOT_FAILED_MSG
+ bool
+ default y
+
source "drivers/ide/Kconfig"
source "drivers/scsi/Kconfig"
diff --git a/arch/i386/kernel/dmi_scan.c b/arch/i386/kernel/dmi_scan.c
index c676592441f5..d0e898550a4e 100644
--- a/arch/i386/kernel/dmi_scan.c
+++ b/arch/i386/kernel/dmi_scan.c
@@ -163,7 +163,7 @@ enum
static char *dmi_ident[DMI_STRING_MAX];
/* print some information suitable for a blacklist entry. */
-void dmi_dump_system(void)
+static void dmi_dump_system(void)
{
printk("DMI: BIOS: %.40s, %.40s, %.40s\n",
dmi_ident[DMI_BIOS_VENDOR], dmi_ident[DMI_BIOS_VERSION],
@@ -355,31 +355,6 @@ static __init int fix_broken_hp_bios_irq9(struct dmi_blacklist *d)
return 0;
}
-/* Some BIOS / motherboard combinations require the APIC to be enabled
- * even on UP systems or will exhibit instability. */
-
-static int __init abit_apic_required(struct dmi_blacklist *d)
-{
-#ifdef CONFIG_X86_LOCAL_APIC
-#ifndef CONFIG_SMP
- extern int enable_apic_up;
- extern int dont_enable_local_apic;
- extern int skip_ioapic_setup;
-
- if (!enable_apic_up) {
- printk(KERN_WARNING " *** %s: APIC forcibly enabled to avoid "
- "RANDOM CRASHES.\n", d->ident);
- printk(KERN_WARNING " *** PLEASE add 'apic' to the kernel "
- "commandline AND enable it in the BIOS! ***\n");
- dont_enable_local_apic=0;
- enable_apic_up=1;
- skip_ioapic_setup=0;
- }
-#endif
-#endif
- return 0;
-}
-
/*
* Check for clue free BIOS implementations who use
* the following QA technique
@@ -541,7 +516,7 @@ static __init int print_if_true(struct dmi_blacklist *d)
extern int acpi_disabled, acpi_force;
-extern int enable_apic_up, skip_ioapic_setup;
+extern int skip_ioapic_setup;
static __init __attribute__((unused)) int acpi_disable(struct dmi_blacklist *d)
{
@@ -587,15 +562,6 @@ static __init int disable_acpi_pci(struct dmi_blacklist *d)
}
#endif
-#ifndef CONFIG_SMP
-static __init int force_apic(struct dmi_blacklist *d)
-{
- printk(KERN_NOTICE "%s detected: force APIC\n", d->ident);
- enable_apic_up = 1;
- skip_ioapic_setup = 0;
- return 0;
-}
-#endif
/*
* Process the DMI blacklists
*/
@@ -811,12 +777,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
NO_MATCH, NO_MATCH
} },
- { abit_apic_required, "ABIT KX7-333[R]", { /* Will crash randomly w/o */
- MATCH(DMI_BOARD_VENDOR, "ABIT"),
- MATCH(DMI_BOARD_NAME, "VT8367-8233A (KX7-333[R])"),
- NO_MATCH, NO_MATCH,
- } },
-
/* Problem Intel 440GX bioses */
{ broken_pirq, "SABR1 Bios", { /* Bad $PIR */
@@ -916,6 +876,12 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
NO_MATCH, NO_MATCH,
} },
+#ifdef CONFIG_ACPI_BOOT
+ /*
+ * If your system is blacklisted here, but you find that acpi=force
+ * works for you, please contact acpi-devel@sourceforge.net
+ */
+
/*
* Boxes that need ACPI disabled
*/
@@ -925,7 +891,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BOARD_NAME, "2629H1G"),
NO_MATCH, NO_MATCH }},
-#ifdef CONFIG_ACPI_BOOT
/*
* Boxes that need acpi=ht
*/
@@ -1022,16 +987,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), NO_MATCH }},
#endif
-#ifndef CONFIG_SMP
- /*
- * Enable APIC on UP kernels.
- */
-
- { force_apic, "Supermicro P4DC6", {
- MATCH(DMI_BOARD_VENDOR, "Supermicro"),
- MATCH(DMI_BOARD_NAME, "P4DC6"),
- NO_MATCH, NO_MATCH } },
-#endif
{ NULL, }
};
@@ -1150,3 +1105,27 @@ void __init dmi_scan_machine(void)
}
EXPORT_SYMBOL(is_unsafe_smbus);
+
+#ifdef CONFIG_MOUNT_ROOT_FAILED_MSG
+/*
+ * mount_root_failed_msg()
+ *
+ * Called from mount_block_root() upon failure to mount root.
+ * architecture dependent to give different platforms
+ * the opportunity to print different handy messages
+ * On x86 this lives here b/c it dumps out some DMI info.
+ */
+
+void
+mount_root_failed_msg(void)
+{
+#ifdef CONFIG_ACPI_BOOT
+ printk ("Try booting with pci=noacpi, acpi=ht, "
+ "or acpi=off on the command line.\n");
+ printk ("If one helps, please report the following lines:\n");
+
+ dmi_dump_system();
+#endif
+}
+#endif /* CONFIG_MOUNT_ROOT_FAILED_MSG */
+
diff --git a/init/do_mounts.c b/init/do_mounts.c
index 75fbf8a71c6e..9d7e30252c46 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -273,16 +273,9 @@ retry:
printk("VFS: Cannot open root device \"%s\" or %s\n",
root_device_name, b);
printk("Please append a correct \"root=\" boot option\n");
-#ifdef __i386__
- {
- extern void dmi_dump_system(void);
- printk ("You may want to retry boot with pci=noacpi, "
- "acpi=ht, or acpi=off on the command line.\n");
- printk ("If one of them helps please report it with "
- "the following lines:\n");
- dmi_dump_system();
- }
-#endif
+
+ mount_root_failed_msg(); /* architecture dependent */
+
panic("VFS: Unable to mount root fs on %s", b);
}
panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b));
diff --git a/init/do_mounts.h b/init/do_mounts.h
index 259de67dd0fa..7780dd759d9e 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -79,3 +79,14 @@ void md_run_setup(void);
static inline void md_run_setup(void) {}
#endif
+
+#ifdef CONFIG_MOUNT_ROOT_FAILED_MSG
+
+void mount_root_failed_msg(void);
+
+#else
+
+static inline void mount_root_failed_msg(void) {}
+
+#endif
+