diff options
author | Corey Minyard <cminyard@mvista.com> | 2013-02-27 20:05:12 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 22:10:21 -0500 |
commit | d941aeae42942c2ef61ed5e05cc1ad0428085704 (patch) | |
tree | 71dc328e44d821f70324cfea68b48c0a7c621bc4 /drivers/char/ipmi | |
parent | 59fb1b9f5d9910c2eb97107dd0eb7e3bce8f0dde (diff) |
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: Jim Paradis <jparadis@redhat.com>
Signed-off-by: Robert Evans <Robert.Evans@stratus.com>
Signed-off-by: Jim Paradis <jparadis@redhat.com>
Signed-off-by: Tony Camuso <tcamuso@redhat.com>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/ipmi')
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index 1c7fdcd22a98..a58beddb4821 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
@@ -1208,6 +1208,12 @@ static int smi_num; /* Used to sequence the SMIs */ | |||
1208 | #define DEFAULT_REGSPACING 1 | 1208 | #define DEFAULT_REGSPACING 1 |
1209 | #define DEFAULT_REGSIZE 1 | 1209 | #define DEFAULT_REGSIZE 1 |
1210 | 1210 | ||
1211 | #ifdef CONFIG_ACPI | ||
1212 | static bool si_tryacpi = 1; | ||
1213 | #endif | ||
1214 | #ifdef CONFIG_DMI | ||
1215 | static bool si_trydmi = 1; | ||
1216 | #endif | ||
1211 | static bool si_trydefaults = 1; | 1217 | static bool si_trydefaults = 1; |
1212 | static char *si_type[SI_MAX_PARMS]; | 1218 | static char *si_type[SI_MAX_PARMS]; |
1213 | #define MAX_SI_TYPE_STR 30 | 1219 | #define MAX_SI_TYPE_STR 30 |
@@ -1238,6 +1244,16 @@ MODULE_PARM_DESC(hotmod, "Add and remove interfaces. See" | |||
1238 | " Documentation/IPMI.txt in the kernel sources for the" | 1244 | " Documentation/IPMI.txt in the kernel sources for the" |
1239 | " gory details."); | 1245 | " gory details."); |
1240 | 1246 | ||
1247 | #ifdef CONFIG_ACPI | ||
1248 | module_param_named(tryacpi, si_tryacpi, bool, 0); | ||
1249 | MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the" | ||
1250 | " default scan of the interfaces identified via ACPI"); | ||
1251 | #endif | ||
1252 | #ifdef CONFIG_DMI | ||
1253 | module_param_named(trydmi, si_trydmi, bool, 0); | ||
1254 | MODULE_PARM_DESC(trydmi, "Setting this to zero will disable the" | ||
1255 | " default scan of the interfaces identified via DMI"); | ||
1256 | #endif | ||
1241 | module_param_named(trydefaults, si_trydefaults, bool, 0); | 1257 | module_param_named(trydefaults, si_trydefaults, bool, 0); |
1242 | MODULE_PARM_DESC(trydefaults, "Setting this to 'false' will disable the" | 1258 | MODULE_PARM_DESC(trydefaults, "Setting this to 'false' will disable the" |
1243 | " default scan of the KCS and SMIC interface at the standard" | 1259 | " default scan of the KCS and SMIC interface at the standard" |
@@ -3408,16 +3424,20 @@ static int init_ipmi_si(void) | |||
3408 | #endif | 3424 | #endif |
3409 | 3425 | ||
3410 | #ifdef CONFIG_ACPI | 3426 | #ifdef CONFIG_ACPI |
3411 | pnp_register_driver(&ipmi_pnp_driver); | 3427 | if (si_tryacpi) { |
3412 | pnp_registered = 1; | 3428 | pnp_register_driver(&ipmi_pnp_driver); |
3429 | pnp_registered = 1; | ||
3430 | } | ||
3413 | #endif | 3431 | #endif |
3414 | 3432 | ||
3415 | #ifdef CONFIG_DMI | 3433 | #ifdef CONFIG_DMI |
3416 | dmi_find_bmc(); | 3434 | if (si_trydmi) |
3435 | dmi_find_bmc(); | ||
3417 | #endif | 3436 | #endif |
3418 | 3437 | ||
3419 | #ifdef CONFIG_ACPI | 3438 | #ifdef CONFIG_ACPI |
3420 | spmi_find_bmc(); | 3439 | if (si_tryacpi) |
3440 | spmi_find_bmc(); | ||
3421 | #endif | 3441 | #endif |
3422 | 3442 | ||
3423 | /* We prefer devices with interrupts, but in the case of a machine | 3443 | /* We prefer devices with interrupts, but in the case of a machine |