diff options
Diffstat (limited to 'init')
-rw-r--r-- | init/Kconfig | 38 | ||||
-rw-r--r-- | init/main.c | 3 |
2 files changed, 33 insertions, 8 deletions
diff --git a/init/Kconfig b/init/Kconfig index 950ba26f7233..bd125a795374 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -21,6 +21,13 @@ config CONSTRUCTORS | |||
21 | depends on !UML | 21 | depends on !UML |
22 | default y | 22 | default y |
23 | 23 | ||
24 | config HAVE_IRQ_WORK | ||
25 | bool | ||
26 | |||
27 | config IRQ_WORK | ||
28 | bool | ||
29 | depends on HAVE_IRQ_WORK | ||
30 | |||
24 | menu "General setup" | 31 | menu "General setup" |
25 | 32 | ||
26 | config EXPERIMENTAL | 33 | config EXPERIMENTAL |
@@ -64,7 +71,7 @@ config BROKEN_ON_SMP | |||
64 | 71 | ||
65 | config LOCK_KERNEL | 72 | config LOCK_KERNEL |
66 | bool | 73 | bool |
67 | depends on SMP || PREEMPT | 74 | depends on (SMP || PREEMPT) && BKL |
68 | default y | 75 | default y |
69 | 76 | ||
70 | config INIT_ENV_ARG_LIMIT | 77 | config INIT_ENV_ARG_LIMIT |
@@ -332,6 +339,8 @@ config AUDIT_TREE | |||
332 | depends on AUDITSYSCALL | 339 | depends on AUDITSYSCALL |
333 | select FSNOTIFY | 340 | select FSNOTIFY |
334 | 341 | ||
342 | source "kernel/irq/Kconfig" | ||
343 | |||
335 | menu "RCU Subsystem" | 344 | menu "RCU Subsystem" |
336 | 345 | ||
337 | choice | 346 | choice |
@@ -340,6 +349,7 @@ choice | |||
340 | 349 | ||
341 | config TREE_RCU | 350 | config TREE_RCU |
342 | bool "Tree-based hierarchical RCU" | 351 | bool "Tree-based hierarchical RCU" |
352 | depends on !PREEMPT && SMP | ||
343 | help | 353 | help |
344 | This option selects the RCU implementation that is | 354 | This option selects the RCU implementation that is |
345 | designed for very large SMP system with hundreds or | 355 | designed for very large SMP system with hundreds or |
@@ -347,7 +357,7 @@ config TREE_RCU | |||
347 | smaller systems. | 357 | smaller systems. |
348 | 358 | ||
349 | config TREE_PREEMPT_RCU | 359 | config TREE_PREEMPT_RCU |
350 | bool "Preemptable tree-based hierarchical RCU" | 360 | bool "Preemptible tree-based hierarchical RCU" |
351 | depends on PREEMPT | 361 | depends on PREEMPT |
352 | help | 362 | help |
353 | This option selects the RCU implementation that is | 363 | This option selects the RCU implementation that is |
@@ -365,8 +375,22 @@ config TINY_RCU | |||
365 | is not required. This option greatly reduces the | 375 | is not required. This option greatly reduces the |
366 | memory footprint of RCU. | 376 | memory footprint of RCU. |
367 | 377 | ||
378 | config TINY_PREEMPT_RCU | ||
379 | bool "Preemptible UP-only small-memory-footprint RCU" | ||
380 | depends on !SMP && PREEMPT | ||
381 | help | ||
382 | This option selects the RCU implementation that is designed | ||
383 | for real-time UP systems. This option greatly reduces the | ||
384 | memory footprint of RCU. | ||
385 | |||
368 | endchoice | 386 | endchoice |
369 | 387 | ||
388 | config PREEMPT_RCU | ||
389 | def_bool ( TREE_PREEMPT_RCU || TINY_PREEMPT_RCU ) | ||
390 | help | ||
391 | This option enables preemptible-RCU code that is common between | ||
392 | the TREE_PREEMPT_RCU and TINY_PREEMPT_RCU implementations. | ||
393 | |||
370 | config RCU_TRACE | 394 | config RCU_TRACE |
371 | bool "Enable tracing for RCU" | 395 | bool "Enable tracing for RCU" |
372 | depends on TREE_RCU || TREE_PREEMPT_RCU | 396 | depends on TREE_RCU || TREE_PREEMPT_RCU |
@@ -387,9 +411,12 @@ config RCU_FANOUT | |||
387 | help | 411 | help |
388 | This option controls the fanout of hierarchical implementations | 412 | This option controls the fanout of hierarchical implementations |
389 | of RCU, allowing RCU to work efficiently on machines with | 413 | of RCU, allowing RCU to work efficiently on machines with |
390 | large numbers of CPUs. This value must be at least the cube | 414 | large numbers of CPUs. This value must be at least the fourth |
391 | root of NR_CPUS, which allows NR_CPUS up to 32,768 for 32-bit | 415 | root of NR_CPUS, which allows NR_CPUS to be insanely large. |
392 | systems and up to 262,144 for 64-bit systems. | 416 | The default value of RCU_FANOUT should be used for production |
417 | systems, but if you are stress-testing the RCU implementation | ||
418 | itself, small RCU_FANOUT values allow you to test large-system | ||
419 | code paths on small(er) systems. | ||
393 | 420 | ||
394 | Select a specific number if testing RCU itself. | 421 | Select a specific number if testing RCU itself. |
395 | Take the default if unsure. | 422 | Take the default if unsure. |
@@ -990,6 +1017,7 @@ config PERF_EVENTS | |||
990 | default y if (PROFILING || PERF_COUNTERS) | 1017 | default y if (PROFILING || PERF_COUNTERS) |
991 | depends on HAVE_PERF_EVENTS | 1018 | depends on HAVE_PERF_EVENTS |
992 | select ANON_INODES | 1019 | select ANON_INODES |
1020 | select IRQ_WORK | ||
993 | help | 1021 | help |
994 | Enable kernel support for various performance events provided | 1022 | Enable kernel support for various performance events provided |
995 | by software and hardware. | 1023 | by software and hardware. |
diff --git a/init/main.c b/init/main.c index 94ab488039aa..e59af24a0b7c 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -424,7 +424,6 @@ static void __init setup_command_line(char *command_line) | |||
424 | static __initdata DECLARE_COMPLETION(kthreadd_done); | 424 | static __initdata DECLARE_COMPLETION(kthreadd_done); |
425 | 425 | ||
426 | static noinline void __init_refok rest_init(void) | 426 | static noinline void __init_refok rest_init(void) |
427 | __releases(kernel_lock) | ||
428 | { | 427 | { |
429 | int pid; | 428 | int pid; |
430 | 429 | ||
@@ -556,7 +555,6 @@ asmlinkage void __init start_kernel(void) | |||
556 | 555 | ||
557 | local_irq_disable(); | 556 | local_irq_disable(); |
558 | early_boot_irqs_off(); | 557 | early_boot_irqs_off(); |
559 | early_init_irq_lock_class(); | ||
560 | 558 | ||
561 | /* | 559 | /* |
562 | * Interrupts are still disabled. Do necessary setups, then | 560 | * Interrupts are still disabled. Do necessary setups, then |
@@ -819,7 +817,6 @@ static void run_init_process(const char *init_filename) | |||
819 | * makes it inline to init() and it becomes part of init.text section | 817 | * makes it inline to init() and it becomes part of init.text section |
820 | */ | 818 | */ |
821 | static noinline int init_post(void) | 819 | static noinline int init_post(void) |
822 | __releases(kernel_lock) | ||
823 | { | 820 | { |
824 | /* need to finish all async __init code before freeing the memory */ | 821 | /* need to finish all async __init code before freeing the memory */ |
825 | async_synchronize_full(); | 822 | async_synchronize_full(); |