Commit d941aeae authored by Corey Minyard's avatar Corey Minyard Committed by Linus Torvalds

ipmi: add new kernel options to prevent automatic ipmi init

The configuration change building ipmi_si into the kernel precludes the
use of a custom driver that can utilize more than one KCS interface,
multiple IPMBs, and more than one BMC.  This capability is important for
fault-tolerant systems.

Even if the kernel option ipmi_si.trydefaults=0 is specified, ipmi_si
discovers and claims one of the KCS interfaces on a Stratus server.  The
inability to now prevent the kernel from managing this device is a
regression from previous kernels.  The regression breaks a capability
fault-tolerant vendors have relied upon.

To support both ACPI opregion access and the need to avoid activation of
ipmi_si on some platforms, we've added two new kernel options,
ipmi_si.tryacpi and ipmi_si.trydmi be added to prevent ipmi_si from
initializing when these options are set to 0 on the kernel command line.
With these options at the default value of 1, ipmi_si init proceeds
according to the kernel default.
Tested-by: default avatarJim Paradis <jparadis@redhat.com>
Signed-off-by: default avatarRobert Evans <Robert.Evans@stratus.com>
Signed-off-by: default avatarJim Paradis <jparadis@redhat.com>
Signed-off-by: default avatarTony Camuso <tcamuso@redhat.com>
Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 59fb1b9f
...@@ -1208,6 +1208,12 @@ static int smi_num; /* Used to sequence the SMIs */ ...@@ -1208,6 +1208,12 @@ static int smi_num; /* Used to sequence the SMIs */
#define DEFAULT_REGSPACING 1 #define DEFAULT_REGSPACING 1
#define DEFAULT_REGSIZE 1 #define DEFAULT_REGSIZE 1
#ifdef CONFIG_ACPI
static bool si_tryacpi = 1;
#endif
#ifdef CONFIG_DMI
static bool si_trydmi = 1;
#endif
static bool si_trydefaults = 1; static bool si_trydefaults = 1;
static char *si_type[SI_MAX_PARMS]; static char *si_type[SI_MAX_PARMS];
#define MAX_SI_TYPE_STR 30 #define MAX_SI_TYPE_STR 30
...@@ -1238,6 +1244,16 @@ MODULE_PARM_DESC(hotmod, "Add and remove interfaces. See" ...@@ -1238,6 +1244,16 @@ MODULE_PARM_DESC(hotmod, "Add and remove interfaces. See"
" Documentation/IPMI.txt in the kernel sources for the" " Documentation/IPMI.txt in the kernel sources for the"
" gory details."); " gory details.");
#ifdef CONFIG_ACPI
module_param_named(tryacpi, si_tryacpi, bool, 0);
MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the"
" default scan of the interfaces identified via ACPI");
#endif
#ifdef CONFIG_DMI
module_param_named(trydmi, si_trydmi, bool, 0);
MODULE_PARM_DESC(trydmi, "Setting this to zero will disable the"
" default scan of the interfaces identified via DMI");
#endif
module_param_named(trydefaults, si_trydefaults, bool, 0); module_param_named(trydefaults, si_trydefaults, bool, 0);
MODULE_PARM_DESC(trydefaults, "Setting this to 'false' will disable the" MODULE_PARM_DESC(trydefaults, "Setting this to 'false' will disable the"
" default scan of the KCS and SMIC interface at the standard" " default scan of the KCS and SMIC interface at the standard"
...@@ -3408,16 +3424,20 @@ static int init_ipmi_si(void) ...@@ -3408,16 +3424,20 @@ static int init_ipmi_si(void)
#endif #endif
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
pnp_register_driver(&ipmi_pnp_driver); if (si_tryacpi) {
pnp_registered = 1; pnp_register_driver(&ipmi_pnp_driver);
pnp_registered = 1;
}
#endif #endif
#ifdef CONFIG_DMI #ifdef CONFIG_DMI
dmi_find_bmc(); if (si_trydmi)
dmi_find_bmc();
#endif #endif
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
spmi_find_bmc(); if (si_tryacpi)
spmi_find_bmc();
#endif #endif
/* We prefer devices with interrupts, but in the case of a machine /* We prefer devices with interrupts, but in the case of a machine
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment