diff options
Diffstat (limited to 'init')
| -rw-r--r-- | init/Kconfig | 30 | ||||
| -rw-r--r-- | init/do_mounts.c | 13 | ||||
| -rw-r--r-- | init/do_mounts_md.c | 5 | ||||
| -rw-r--r-- | init/main.c | 3 |
4 files changed, 29 insertions, 22 deletions
diff --git a/init/Kconfig b/init/Kconfig index f068071fcc5d..6a5c5fed66c9 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -675,6 +675,9 @@ config CC_OPTIMIZE_FOR_SIZE | |||
| 675 | config SYSCTL | 675 | config SYSCTL |
| 676 | bool | 676 | bool |
| 677 | 677 | ||
| 678 | config ANON_INODES | ||
| 679 | bool | ||
| 680 | |||
| 678 | menuconfig EMBEDDED | 681 | menuconfig EMBEDDED |
| 679 | bool "Configure standard kernel features (for small systems)" | 682 | bool "Configure standard kernel features (for small systems)" |
| 680 | help | 683 | help |
| @@ -780,18 +783,6 @@ config PCSPKR_PLATFORM | |||
| 780 | This option allows to disable the internal PC-Speaker | 783 | This option allows to disable the internal PC-Speaker |
| 781 | support, saving some memory. | 784 | support, saving some memory. |
| 782 | 785 | ||
| 783 | config COMPAT_BRK | ||
| 784 | bool "Disable heap randomization" | ||
| 785 | default y | ||
| 786 | help | ||
| 787 | Randomizing heap placement makes heap exploits harder, but it | ||
| 788 | also breaks ancient binaries (including anything libc5 based). | ||
| 789 | This option changes the bootup default to heap randomization | ||
| 790 | disabled, and can be overriden runtime by setting | ||
| 791 | /proc/sys/kernel/randomize_va_space to 2. | ||
| 792 | |||
| 793 | On non-ancient distros (post-2000 ones) N is usually a safe choice. | ||
| 794 | |||
| 795 | config BASE_FULL | 786 | config BASE_FULL |
| 796 | default y | 787 | default y |
| 797 | bool "Enable full-sized data structures for core" if EMBEDDED | 788 | bool "Enable full-sized data structures for core" if EMBEDDED |
| @@ -809,9 +800,6 @@ config FUTEX | |||
| 809 | support for "fast userspace mutexes". The resulting kernel may not | 800 | support for "fast userspace mutexes". The resulting kernel may not |
| 810 | run glibc-based applications correctly. | 801 | run glibc-based applications correctly. |
| 811 | 802 | ||
| 812 | config ANON_INODES | ||
| 813 | bool | ||
| 814 | |||
| 815 | config EPOLL | 803 | config EPOLL |
| 816 | bool "Enable eventpoll support" if EMBEDDED | 804 | bool "Enable eventpoll support" if EMBEDDED |
| 817 | default y | 805 | default y |
| @@ -897,6 +885,18 @@ config SLUB_DEBUG | |||
| 897 | SLUB sysfs support. /sys/slab will not exist and there will be | 885 | SLUB sysfs support. /sys/slab will not exist and there will be |
| 898 | no support for cache validation etc. | 886 | no support for cache validation etc. |
| 899 | 887 | ||
| 888 | config COMPAT_BRK | ||
| 889 | bool "Disable heap randomization" | ||
| 890 | default y | ||
| 891 | help | ||
| 892 | Randomizing heap placement makes heap exploits harder, but it | ||
| 893 | also breaks ancient binaries (including anything libc5 based). | ||
| 894 | This option changes the bootup default to heap randomization | ||
| 895 | disabled, and can be overriden runtime by setting | ||
| 896 | /proc/sys/kernel/randomize_va_space to 2. | ||
| 897 | |||
| 898 | On non-ancient distros (post-2000 ones) N is usually a safe choice. | ||
| 899 | |||
| 900 | choice | 900 | choice |
| 901 | prompt "Choose SLAB allocator" | 901 | prompt "Choose SLAB allocator" |
| 902 | default SLUB | 902 | default SLUB |
diff --git a/init/do_mounts.c b/init/do_mounts.c index 708105e163df..8d4ff5afc1d8 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c | |||
| @@ -370,10 +370,14 @@ void __init prepare_namespace(void) | |||
| 370 | ssleep(root_delay); | 370 | ssleep(root_delay); |
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | /* wait for the known devices to complete their probing */ | 373 | /* |
| 374 | while (driver_probe_done() != 0) | 374 | * wait for the known devices to complete their probing |
| 375 | msleep(100); | 375 | * |
| 376 | async_synchronize_full(); | 376 | * Note: this is a potential source of long boot delays. |
| 377 | * For example, it is not atypical to wait 5 seconds here | ||
| 378 | * for the touchpad of a laptop to initialize. | ||
| 379 | */ | ||
| 380 | wait_for_device_probe(); | ||
| 377 | 381 | ||
| 378 | md_run_setup(); | 382 | md_run_setup(); |
| 379 | 383 | ||
| @@ -399,6 +403,7 @@ void __init prepare_namespace(void) | |||
| 399 | while (driver_probe_done() != 0 || | 403 | while (driver_probe_done() != 0 || |
| 400 | (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) | 404 | (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) |
| 401 | msleep(100); | 405 | msleep(100); |
| 406 | async_synchronize_full(); | ||
| 402 | } | 407 | } |
| 403 | 408 | ||
| 404 | is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; | 409 | is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; |
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c index ff95e3192884..9bdddbcb3d6a 100644 --- a/init/do_mounts_md.c +++ b/init/do_mounts_md.c | |||
| @@ -281,8 +281,9 @@ static void __init autodetect_raid(void) | |||
| 281 | */ | 281 | */ |
| 282 | printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n"); | 282 | printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n"); |
| 283 | printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n"); | 283 | printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n"); |
| 284 | while (driver_probe_done() < 0) | 284 | |
| 285 | msleep(100); | 285 | wait_for_device_probe(); |
| 286 | |||
| 286 | fd = sys_open("/dev/md0", 0, 0); | 287 | fd = sys_open("/dev/md0", 0, 0); |
| 287 | if (fd >= 0) { | 288 | if (fd >= 0) { |
| 288 | sys_ioctl(fd, RAID_AUTORUN, raid_autopart); | 289 | sys_ioctl(fd, RAID_AUTORUN, raid_autopart); |
diff --git a/init/main.c b/init/main.c index 844209453c02..83697e160b3a 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -97,7 +97,7 @@ static inline void mark_rodata_ro(void) { } | |||
| 97 | extern void tc_init(void); | 97 | extern void tc_init(void); |
| 98 | #endif | 98 | #endif |
| 99 | 99 | ||
| 100 | enum system_states system_state; | 100 | enum system_states system_state __read_mostly; |
| 101 | EXPORT_SYMBOL(system_state); | 101 | EXPORT_SYMBOL(system_state); |
| 102 | 102 | ||
| 103 | /* | 103 | /* |
| @@ -463,6 +463,7 @@ static noinline void __init_refok rest_init(void) | |||
| 463 | * at least once to get things moving: | 463 | * at least once to get things moving: |
| 464 | */ | 464 | */ |
| 465 | init_idle_bootup_task(current); | 465 | init_idle_bootup_task(current); |
| 466 | rcu_scheduler_starting(); | ||
| 466 | preempt_enable_no_resched(); | 467 | preempt_enable_no_resched(); |
| 467 | schedule(); | 468 | schedule(); |
| 468 | preempt_disable(); | 469 | preempt_disable(); |
