x86/reboot: Skip DMI checks if reboot set by user
A message that is not in the archive (sent off-list or not yet received): [email protected]
Commit-ID: 5955633e91bfc5cd0a41d8d82259e1d8b32980ef Gitweb: http://git.kernel.org/tip/5955633e91bfc5cd0a41d8d82259e1d8b32980ef Author: Michael D Labriola <[email protected]> AuthorDate: Sun, 29 Jan 2012 14:17:22 -0500 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 30 Jan 2012 10:52:32 +0100
x86/reboot: Skip DMI checks if reboot set by user
Skip DMI checks for vendor specific reboot quirks if the user passed in a reboot= arg on the command line - we should never override user choices.
Signed-off-by Michael D Labriola <[email protected]>
Cc Alan Cox <[email protected]>
Cc Michael D Labriola <[email protected]>
Cc Matthew Garrett <[email protected]>
Cc Linus Torvalds <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- arch/x86/kernel/reboot.c | 28 ++++++++++++++++++++++++++-- 1 files changed, 26 insertions(+), 2 deletions(-)
arch/x86/kernel/reboot.c +26 -2
@@ -39,6 +39,14 @@ static int reboot_mode;enum reboot_type reboot_type =BOOT_ACPI ;int reboot_force; +/* This variable is used privately to keep track of whether or not +* reboot_type is still set to its default value (i.e., reboot= hasn't +* been set on the command line). This is needed so that we can +* suppress DMI scanning for reboot quirks. Without it, it's +* impossible to override a faulty reboot quirk without recompiling. +*/ +static int reboot_default =1 ; +#if defined(CONFIG_X86_32 ) && defined(CONFIG_SMP )static int reboot_cpu =-1 ;#endif
@@ -67,6 +75,12 @@ bool port_cf9_safe = false;static int __init reboot_setup (char *str) {for (;;) { +/* Having anything passed on the command line via +* reboot= will cause us to disable DMI checking +* below. +*/ + reboot_default =0 ; +switch (*str) {case 'w' : reboot_mode =0x1234 ;
@@ -316,7 +330,12 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {static int __init reboot_init (void ) { -dmi_check_system (reboot_dmi_table); +/* Only do the DMI check if reboot_type hasn't been overridden +* on the command line +*/ +if (reboot_default) { +dmi_check_system (reboot_dmi_table); + }return 0 ; }core_initcall (reboot_init);
@@ -465,7 +484,12 @@ static struct dmi_system_id __initdata pci_reboot_dmi_table[] = {static int __init pci_reboot_init (void ) { -dmi_check_system (pci_reboot_dmi_table); +/* Only do the DMI check if reboot_type hasn't been overridden +* on the command line +*/ +if (reboot_default) { +dmi_check_system (pci_reboot_dmi_table); + }return 0 ; }core_initcall (pci_reboot_init);