diff options
Diffstat (limited to 'init')
-rw-r--r-- | init/Kconfig | 18 | ||||
-rw-r--r-- | init/main.c | 23 |
2 files changed, 31 insertions, 10 deletions
diff --git a/init/Kconfig b/init/Kconfig index d62778390e5..31ba0fd0f36 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -391,7 +391,7 @@ config TREE_RCU config TREE_PREEMPT_RCU bool "Preemptible tree-based hierarchical RCU" - depends on PREEMPT + depends on PREEMPT && SMP help This option selects the RCU implementation that is designed for very large SMP systems with hundreds or @@ -401,7 +401,7 @@ config TREE_PREEMPT_RCU config TINY_RCU bool "UP-only small-memory-footprint RCU" - depends on !SMP + depends on !PREEMPT && !SMP help This option selects the RCU implementation that is designed for UP systems from which real-time response @@ -410,7 +410,7 @@ config TINY_RCU config TINY_PREEMPT_RCU bool "Preemptible UP-only small-memory-footprint RCU" - depends on !SMP && PREEMPT + depends on PREEMPT && !SMP help This option selects the RCU implementation that is designed for real-time UP systems. This option greatly reduces the @@ -715,6 +715,18 @@ config FAIR_GROUP_SCHED depends on CGROUP_SCHED default CGROUP_SCHED +config CFS_BANDWIDTH + bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED" + depends on EXPERIMENTAL + depends on FAIR_GROUP_SCHED + default n + help + This option allows users to define CPU bandwidth rates (limits) for + tasks running within the fair group scheduler. Groups with no limit + set are considered to be unconstrained and will run with no + restriction. + See tip/Documentation/scheduler/sched-bwc.txt for more information. + config RT_GROUP_SCHED bool "Group scheduling for SCHED_RR/FIFO" depends on EXPERIMENTAL diff --git a/init/main.c b/init/main.c index 9c51ee7adf3..63f5f6f8dc3 100644 --- a/init/main.c +++ b/init/main.c @@ -163,7 +163,7 @@ static int __init obsolete_checksetup(char *line) p = __setup_start; do { int n = strlen(p->str); - if (!strncmp(line, p->str, n)) { + if (parameqn(line, p->str, n)) { if (p->early) { /* Already done in parse_early_param? * (Needs exact match on param part). @@ -209,8 +209,19 @@ early_param("quiet", quiet_kernel); static int __init loglevel(char *str) { - get_option(&str, &console_loglevel); - return 0; + int newlevel; + + /* + * Only update loglevel value when a correct setting was passed, + * to prevent blind crashes (when loglevel being set to 0) that + * are quite hard to debug + */ + if (get_option(&str, &newlevel)) { + console_loglevel = newlevel; + return 0; + } + + return -EINVAL; } early_param("loglevel", loglevel); @@ -370,9 +381,6 @@ static noinline void __init_refok rest_init(void) preempt_enable_no_resched(); schedule(); - /* At this point, we can enable user mode helper functionality */ - usermodehelper_enable(); - /* Call into cpu_idle with preempt disabled */ preempt_disable(); cpu_idle(); @@ -384,7 +392,7 @@ static int __init do_early_param(char *param, char *val) const struct obs_kernel_param *p; for (p = __setup_start; p < __setup_end; p++) { - if ((p->early && strcmp(param, p->str) == 0) || + if ((p->early && parameq(param, p->str)) || (strcmp(param, "console") == 0 && strcmp(p->str, "earlycon") == 0) ) { @@ -722,6 +730,7 @@ static void __init do_basic_setup(void) driver_init(); init_irq_proc(); do_ctors(); + usermodehelper_enable(); do_initcalls(); } |