aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-01-10 06:04:41 -0500
committerIngo Molnar <mingo@elte.hu>2009-01-10 06:04:41 -0500
commitb17304245f0db0ac69b795c411407808f3f2796d (patch)
tree63ed3915d9295bd08f640bf25c322064ba787fad /init
parent889c92d21db40be0b7d22a59395060237895bb85 (diff)
parent9a100a4464917b5ffff3a8ce1c2758088fd9bb32 (diff)
Merge branch 'linus' into x86/setup-lzma
Conflicts: init/do_mounts_rd.c
Diffstat (limited to 'init')
-rw-r--r--init/Kconfig196
-rw-r--r--init/do_mounts.c6
-rw-r--r--init/do_mounts_md.c2
-rw-r--r--init/do_mounts_rd.c14
-rw-r--r--init/initramfs.c1
-rw-r--r--init/main.c17
6 files changed, 141 insertions, 95 deletions
diff --git a/init/Kconfig b/init/Kconfig
index f9633c03cb12..a3e3bf548046 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -331,59 +331,6 @@ config LOG_BUF_SHIFT
331 13 => 8 KB 331 13 => 8 KB
332 12 => 4 KB 332 12 => 4 KB
333 333
334config CGROUPS
335 bool "Control Group support"
336 help
337 This option will let you use process cgroup subsystems
338 such as Cpusets
339
340 Say N if unsure.
341
342config CGROUP_DEBUG
343 bool "Example debug cgroup subsystem"
344 depends on CGROUPS
345 default n
346 help
347 This option enables a simple cgroup subsystem that
348 exports useful debugging information about the cgroups
349 framework
350
351 Say N if unsure
352
353config CGROUP_NS
354 bool "Namespace cgroup subsystem"
355 depends on CGROUPS
356 help
357 Provides a simple namespace cgroup subsystem to
358 provide hierarchical naming of sets of namespaces,
359 for instance virtual servers and checkpoint/restart
360 jobs.
361
362config CGROUP_FREEZER
363 bool "control group freezer subsystem"
364 depends on CGROUPS
365 help
366 Provides a way to freeze and unfreeze all tasks in a
367 cgroup.
368
369config CGROUP_DEVICE
370 bool "Device controller for cgroups"
371 depends on CGROUPS && EXPERIMENTAL
372 help
373 Provides a cgroup implementing whitelists for devices which
374 a process in the cgroup can mknod or open.
375
376config CPUSETS
377 bool "Cpuset support"
378 depends on SMP && CGROUPS
379 help
380 This option will let you create and manage CPUSETs which
381 allow dynamically partitioning a system into sets of CPUs and
382 Memory Nodes and assigning tasks to run only within those sets.
383 This is primarily useful on large SMP or NUMA systems.
384
385 Say N if unsure.
386
387# 334#
388# Architectures with an unreliable sched_clock() should select this: 335# Architectures with an unreliable sched_clock() should select this:
389# 336#
@@ -397,6 +344,8 @@ config GROUP_SCHED
397 help 344 help
398 This feature lets CPU scheduler recognize task groups and control CPU 345 This feature lets CPU scheduler recognize task groups and control CPU
399 bandwidth allocation to such task groups. 346 bandwidth allocation to such task groups.
347 In order to create a group from arbitrary set of processes, use
348 CONFIG_CGROUPS. (See Control Group support.)
400 349
401config FAIR_GROUP_SCHED 350config FAIR_GROUP_SCHED
402 bool "Group scheduling for SCHED_OTHER" 351 bool "Group scheduling for SCHED_OTHER"
@@ -439,6 +388,66 @@ config CGROUP_SCHED
439 388
440endchoice 389endchoice
441 390
391menu "Control Group support"
392config CGROUPS
393 bool "Control Group support"
394 help
395 This option add support for grouping sets of processes together, for
396 use with process control subsystems such as Cpusets, CFS, memory
397 controls or device isolation.
398 See
399 - Documentation/cpusets.txt (Cpusets)
400 - Documentation/scheduler/sched-design-CFS.txt (CFS)
401 - Documentation/cgroups/ (features for grouping, isolation)
402 - Documentation/controllers/ (features for resource control)
403
404 Say N if unsure.
405
406config CGROUP_DEBUG
407 bool "Example debug cgroup subsystem"
408 depends on CGROUPS
409 default n
410 help
411 This option enables a simple cgroup subsystem that
412 exports useful debugging information about the cgroups
413 framework
414
415 Say N if unsure
416
417config CGROUP_NS
418 bool "Namespace cgroup subsystem"
419 depends on CGROUPS
420 help
421 Provides a simple namespace cgroup subsystem to
422 provide hierarchical naming of sets of namespaces,
423 for instance virtual servers and checkpoint/restart
424 jobs.
425
426config CGROUP_FREEZER
427 bool "control group freezer subsystem"
428 depends on CGROUPS
429 help
430 Provides a way to freeze and unfreeze all tasks in a
431 cgroup.
432
433config CGROUP_DEVICE
434 bool "Device controller for cgroups"
435 depends on CGROUPS && EXPERIMENTAL
436 help
437 Provides a cgroup implementing whitelists for devices which
438 a process in the cgroup can mknod or open.
439
440config CPUSETS
441 bool "Cpuset support"
442 depends on SMP && CGROUPS
443 help
444 This option will let you create and manage CPUSETs which
445 allow dynamically partitioning a system into sets of CPUs and
446 Memory Nodes and assigning tasks to run only within those sets.
447 This is primarily useful on large SMP or NUMA systems.
448
449 Say N if unsure.
450
442config CGROUP_CPUACCT 451config CGROUP_CPUACCT
443 bool "Simple CPU accounting cgroup subsystem" 452 bool "Simple CPU accounting cgroup subsystem"
444 depends on CGROUPS 453 depends on CGROUPS
@@ -453,9 +462,6 @@ config RESOURCE_COUNTERS
453 infrastructure that works with cgroups 462 infrastructure that works with cgroups
454 depends on CGROUPS 463 depends on CGROUPS
455 464
456config MM_OWNER
457 bool
458
459config CGROUP_MEM_RES_CTLR 465config CGROUP_MEM_RES_CTLR
460 bool "Memory Resource Controller for Control Groups" 466 bool "Memory Resource Controller for Control Groups"
461 depends on CGROUPS && RESOURCE_COUNTERS 467 depends on CGROUPS && RESOURCE_COUNTERS
@@ -474,36 +480,68 @@ config CGROUP_MEM_RES_CTLR
474 sure you need the memory resource controller. Even when you enable 480 sure you need the memory resource controller. Even when you enable
475 this, you can set "cgroup_disable=memory" at your boot option to 481 this, you can set "cgroup_disable=memory" at your boot option to
476 disable memory resource controller and you can avoid overheads. 482 disable memory resource controller and you can avoid overheads.
477 (and lose benefits of memory resource contoller) 483 (and lose benefits of memory resource controller)
478 484
479 This config option also selects MM_OWNER config option, which 485 This config option also selects MM_OWNER config option, which
480 could in turn add some fork/exit overhead. 486 could in turn add some fork/exit overhead.
481 487
488config MM_OWNER
489 bool
490
491config CGROUP_MEM_RES_CTLR_SWAP
492 bool "Memory Resource Controller Swap Extension(EXPERIMENTAL)"
493 depends on CGROUP_MEM_RES_CTLR && SWAP && EXPERIMENTAL
494 help
495 Add swap management feature to memory resource controller. When you
496 enable this, you can limit mem+swap usage per cgroup. In other words,
497 when you disable this, memory resource controller has no cares to
498 usage of swap...a process can exhaust all of the swap. This extension
499 is useful when you want to avoid exhaustion swap but this itself
500 adds more overheads and consumes memory for remembering information.
501 Especially if you use 32bit system or small memory system, please
502 be careful about enabling this. When memory resource controller
503 is disabled by boot option, this will be automatically disabled and
504 there will be no overhead from this. Even when you set this config=y,
505 if boot option "noswapaccount" is set, swap will not be accounted.
506
507
508endmenu
509
482config SYSFS_DEPRECATED 510config SYSFS_DEPRECATED
483 bool 511 bool
484 512
485config SYSFS_DEPRECATED_V2 513config SYSFS_DEPRECATED_V2
486 bool "Create deprecated sysfs files" 514 bool "Create deprecated sysfs layout for older userspace tools"
487 depends on SYSFS 515 depends on SYSFS
488 default y 516 default y
489 select SYSFS_DEPRECATED 517 select SYSFS_DEPRECATED
490 help 518 help
491 This option creates deprecated symlinks such as the 519 This option switches the layout of sysfs to the deprecated
492 "device"-link, the <subsystem>:<name>-link, and the 520 version.
493 "bus"-link. It may also add deprecated key in the 521
494 uevent environment. 522 The current sysfs layout features a unified device tree at
495 None of these features or values should be used today, as 523 /sys/devices/, which is able to express a hierarchy between
496 they export driver core implementation details to userspace 524 class devices. If the deprecated option is set to Y, the
497 or export properties which can't be kept stable across kernel 525 unified device tree is split into a bus device tree at
498 releases. 526 /sys/devices/ and several individual class device trees at
499 527 /sys/class/. The class and bus devices will be connected by
500 If enabled, this option will also move any device structures 528 "<subsystem>:<name>" and the "device" links. The "block"
501 that belong to a class, back into the /sys/class hierarchy, in 529 class devices, will not show up in /sys/class/block/. Some
502 order to support older versions of udev and some userspace 530 subsystems will suppress the creation of some devices which
503 programs. 531 depend on the unified device tree.
504 532
505 If you are using a distro with the most recent userspace 533 This option is not a pure compatibility option that can
506 packages, it should be safe to say N here. 534 be safely enabled on newer distributions. It will change the
535 layout of sysfs to the non-extensible deprecated version,
536 and disable some features, which can not be exported without
537 confusing older userspace tools. Since 2007/2008 all major
538 distributions do not enable this option, and ship no tools which
539 depend on the deprecated layout or this option.
540
541 If you are using a new kernel on an older distribution, or use
542 older userspace tools, you might need to say Y here. Do not say Y,
543 if the original kernel, that came with your distribution, has
544 this option set to N.
507 545
508config PROC_PID_CPUSET 546config PROC_PID_CPUSET
509 bool "Include legacy /proc/<pid>/cpuset file" 547 bool "Include legacy /proc/<pid>/cpuset file"
@@ -898,10 +936,6 @@ config RT_MUTEXES
898 boolean 936 boolean
899 select PLIST 937 select PLIST
900 938
901config TINY_SHMEM
902 default !SHMEM
903 bool
904
905config BASE_SMALL 939config BASE_SMALL
906 int 940 int
907 default 0 if BASE_FULL 941 default 0 if BASE_FULL
@@ -976,12 +1010,6 @@ config MODULE_SRCVERSION_ALL
976 the version). With this option, such a "srcversion" field 1010 the version). With this option, such a "srcversion" field
977 will be created for all modules. If unsure, say N. 1011 will be created for all modules. If unsure, say N.
978 1012
979config KMOD
980 def_bool y
981 help
982 This is being removed soon. These days, CONFIG_MODULES
983 implies CONFIG_KMOD, so use that instead.
984
985endif # MODULES 1013endif # MODULES
986 1014
987config INIT_ALL_POSSIBLE 1015config INIT_ALL_POSSIBLE
diff --git a/init/do_mounts.c b/init/do_mounts.c
index d055b1914c3d..708105e163df 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -13,6 +13,7 @@
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/fs.h> 14#include <linux/fs.h>
15#include <linux/initrd.h> 15#include <linux/initrd.h>
16#include <linux/async.h>
16 17
17#include <linux/nfs_fs.h> 18#include <linux/nfs_fs.h>
18#include <linux/nfs_fs_sb.h> 19#include <linux/nfs_fs_sb.h>
@@ -220,10 +221,10 @@ static int __init do_mount_root(char *name, char *fs, int flags, void *data)
220 221
221 sys_chdir("/root"); 222 sys_chdir("/root");
222 ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev; 223 ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
223 printk("VFS: Mounted root (%s filesystem)%s.\n", 224 printk("VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
224 current->fs->pwd.mnt->mnt_sb->s_type->name, 225 current->fs->pwd.mnt->mnt_sb->s_type->name,
225 current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ? 226 current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ?
226 " readonly" : ""); 227 " readonly" : "", MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
227 return 0; 228 return 0;
228} 229}
229 230
@@ -372,6 +373,7 @@ void __init prepare_namespace(void)
372 /* wait for the known devices to complete their probing */ 373 /* wait for the known devices to complete their probing */
373 while (driver_probe_done() != 0) 374 while (driver_probe_done() != 0)
374 msleep(100); 375 msleep(100);
376 async_synchronize_full();
375 377
376 md_run_setup(); 378 md_run_setup();
377 379
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c
index d6da5cdd3c38..ff95e3192884 100644
--- a/init/do_mounts_md.c
+++ b/init/do_mounts_md.c
@@ -271,7 +271,7 @@ static int __init raid_setup(char *str)
271__setup("raid=", raid_setup); 271__setup("raid=", raid_setup);
272__setup("md=", md_setup); 272__setup("md=", md_setup);
273 273
274static void autodetect_raid(void) 274static void __init autodetect_raid(void)
275{ 275{
276 int fd; 276 int fd;
277 277
diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
index a06ed4f92e0e..a015e267fd17 100644
--- a/init/do_mounts_rd.c
+++ b/init/do_mounts_rd.c
@@ -9,6 +9,7 @@
9#include <linux/string.h> 9#include <linux/string.h>
10 10
11#include "do_mounts.h" 11#include "do_mounts.h"
12#include "../fs/squashfs/squashfs_fs.h"
12 13
13#include <linux/decompress/generic.h> 14#include <linux/decompress/generic.h>
14 15
@@ -44,6 +45,7 @@ static int __init crd_load(int in_fd, int out_fd, decompress_fn deco);
44 * ext2 45 * ext2
45 * romfs 46 * romfs
46 * cramfs 47 * cramfs
48 * squashfs
47 * gzip 49 * gzip
48 */ 50 */
49static int __init 51static int __init
@@ -54,6 +56,7 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
54 struct ext2_super_block *ext2sb; 56 struct ext2_super_block *ext2sb;
55 struct romfs_super_block *romfsb; 57 struct romfs_super_block *romfsb;
56 struct cramfs_super *cramfsb; 58 struct cramfs_super *cramfsb;
59 struct squashfs_super_block *squashfsb;
57 int nblocks = -1; 60 int nblocks = -1;
58 unsigned char *buf; 61 unsigned char *buf;
59 const char *compress_name; 62 const char *compress_name;
@@ -66,6 +69,7 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
66 ext2sb = (struct ext2_super_block *) buf; 69 ext2sb = (struct ext2_super_block *) buf;
67 romfsb = (struct romfs_super_block *) buf; 70 romfsb = (struct romfs_super_block *) buf;
68 cramfsb = (struct cramfs_super *) buf; 71 cramfsb = (struct cramfs_super *) buf;
72 squashfsb = (struct squashfs_super_block *) buf;
69 memset(buf, 0xe5, size); 73 memset(buf, 0xe5, size);
70 74
71 /* 75 /*
@@ -100,6 +104,16 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
100 goto done; 104 goto done;
101 } 105 }
102 106
107 /* squashfs is at block zero too */
108 if (le32_to_cpu(squashfsb->s_magic) == SQUASHFS_MAGIC) {
109 printk(KERN_NOTICE
110 "RAMDISK: squashfs filesystem found at block %d\n",
111 start_block);
112 nblocks = (le64_to_cpu(squashfsb->bytes_used) + BLOCK_SIZE - 1)
113 >> BLOCK_SIZE_BITS;
114 goto done;
115 }
116
103 /* 117 /*
104 * Read block 1 to test for minix and ext2 superblock 118 * Read block 1 to test for minix and ext2 superblock
105 */ 119 */
diff --git a/init/initramfs.c b/init/initramfs.c
index 2f42984e5582..f8241e832aa3 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -317,6 +317,7 @@ static int __init do_name(void)
317 if (wfd >= 0) { 317 if (wfd >= 0) {
318 sys_fchown(wfd, uid, gid); 318 sys_fchown(wfd, uid, gid);
319 sys_fchmod(wfd, mode); 319 sys_fchmod(wfd, mode);
320 sys_ftruncate(wfd, body_len);
320 vcollected = kstrdup(collected, GFP_KERNEL); 321 vcollected = kstrdup(collected, GFP_KERNEL);
321 state = CopyFile; 322 state = CopyFile;
322 } 323 }
diff --git a/init/main.c b/init/main.c
index cd168ebc5924..844209453c02 100644
--- a/init/main.c
+++ b/init/main.c
@@ -50,7 +50,6 @@
50#include <linux/rmap.h> 50#include <linux/rmap.h>
51#include <linux/mempolicy.h> 51#include <linux/mempolicy.h>
52#include <linux/key.h> 52#include <linux/key.h>
53#include <linux/unwind.h>
54#include <linux/buffer_head.h> 53#include <linux/buffer_head.h>
55#include <linux/page_cgroup.h> 54#include <linux/page_cgroup.h>
56#include <linux/debug_locks.h> 55#include <linux/debug_locks.h>
@@ -63,6 +62,7 @@
63#include <linux/signal.h> 62#include <linux/signal.h>
64#include <linux/idr.h> 63#include <linux/idr.h>
65#include <linux/ftrace.h> 64#include <linux/ftrace.h>
65#include <linux/async.h>
66#include <trace/boot.h> 66#include <trace/boot.h>
67 67
68#include <asm/io.h> 68#include <asm/io.h>
@@ -108,7 +108,7 @@ EXPORT_SYMBOL(system_state);
108 108
109extern void time_init(void); 109extern void time_init(void);
110/* Default late time init is NULL. archs can override this later. */ 110/* Default late time init is NULL. archs can override this later. */
111void (*late_time_init)(void); 111void (*__initdata late_time_init)(void);
112extern void softirq_init(void); 112extern void softirq_init(void);
113 113
114/* Untouched command line saved by arch-specific code. */ 114/* Untouched command line saved by arch-specific code. */
@@ -447,7 +447,7 @@ static void __init setup_command_line(char *command_line)
447 * gcc-3.4 accidentally inlines this function, so use noinline. 447 * gcc-3.4 accidentally inlines this function, so use noinline.
448 */ 448 */
449 449
450static void noinline __init_refok rest_init(void) 450static noinline void __init_refok rest_init(void)
451 __releases(kernel_lock) 451 __releases(kernel_lock)
452{ 452{
453 int pid; 453 int pid;
@@ -537,7 +537,6 @@ asmlinkage void __init start_kernel(void)
537 * Need to run as early as possible, to initialize the 537 * Need to run as early as possible, to initialize the
538 * lockdep hash: 538 * lockdep hash:
539 */ 539 */
540 unwind_init();
541 lockdep_init(); 540 lockdep_init();
542 debug_objects_early_init(); 541 debug_objects_early_init();
543 cgroup_init_early(); 542 cgroup_init_early();
@@ -559,7 +558,6 @@ asmlinkage void __init start_kernel(void)
559 setup_arch(&command_line); 558 setup_arch(&command_line);
560 mm_init_owner(&init_mm, &init_task); 559 mm_init_owner(&init_mm, &init_task);
561 setup_command_line(command_line); 560 setup_command_line(command_line);
562 unwind_setup();
563 setup_per_cpu_areas(); 561 setup_per_cpu_areas();
564 setup_nr_cpu_ids(); 562 setup_nr_cpu_ids();
565 smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */ 563 smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
@@ -602,7 +600,8 @@ asmlinkage void __init start_kernel(void)
602 sched_clock_init(); 600 sched_clock_init();
603 profile_init(); 601 profile_init();
604 if (!irqs_disabled()) 602 if (!irqs_disabled())
605 printk("start_kernel(): bug: interrupts were enabled early\n"); 603 printk(KERN_CRIT "start_kernel(): bug: interrupts were "
604 "enabled early\n");
606 early_boot_irqs_on(); 605 early_boot_irqs_on();
607 local_irq_enable(); 606 local_irq_enable();
608 607
@@ -687,7 +686,7 @@ asmlinkage void __init start_kernel(void)
687 rest_init(); 686 rest_init();
688} 687}
689 688
690static int initcall_debug; 689int initcall_debug;
691core_param(initcall_debug, initcall_debug, bool, 0644); 690core_param(initcall_debug, initcall_debug, bool, 0644);
692 691
693int do_one_initcall(initcall_t fn) 692int do_one_initcall(initcall_t fn)
@@ -786,8 +785,10 @@ static void run_init_process(char *init_filename)
786/* This is a non __init function. Force it to be noinline otherwise gcc 785/* This is a non __init function. Force it to be noinline otherwise gcc
787 * makes it inline to init() and it becomes part of init.text section 786 * makes it inline to init() and it becomes part of init.text section
788 */ 787 */
789static int noinline init_post(void) 788static noinline int init_post(void)
790{ 789{
790 /* need to finish all async __init code before freeing the memory */
791 async_synchronize_full();
791 free_initmem(); 792 free_initmem();
792 unlock_kernel(); 793 unlock_kernel();
793 mark_rodata_ro(); 794 mark_rodata_ro();