diff options
Diffstat (limited to 'init')
| -rw-r--r-- | init/Kconfig | 26 | ||||
| -rw-r--r-- | init/Makefile | 3 | ||||
| -rw-r--r-- | init/do_mounts.c | 9 | ||||
| -rw-r--r-- | init/do_mounts.h | 1 | ||||
| -rw-r--r-- | init/initramfs.c | 12 | ||||
| -rw-r--r-- | init/main.c | 44 |
6 files changed, 72 insertions, 23 deletions
diff --git a/init/Kconfig b/init/Kconfig index b1091d7542ce..d5a1a1228fab 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -77,6 +77,22 @@ config LOCALVERSION object and source tree, in that order. Your total string can be a maximum of 64 characters. +config LOCALVERSION_AUTO + bool "Automatically append version information to the version string" + default y + help + This will try to automatically determine if the current tree is a + release tree by looking for git tags that + belong to the current top of tree revision. + + A string of the format -gxxxxxxxx will be added to the localversion + if a git based tree is found. The string generated by this will be + appended after any matching localversion* files, and after the value + set in CONFIG_LOCALVERSION + + Note: This requires Perl, and a git repository, but not necessarily + the git or cogito tools to be installed. + config SWAP bool "Support for paging of anonymous memory (swap)" depends on MMU @@ -174,7 +190,7 @@ config AUDIT config AUDITSYSCALL bool "Enable system-call auditing support" - depends on AUDIT && (X86 || PPC || PPC64 || ARCH_S390 || IA64 || UML) + depends on AUDIT && (X86 || PPC || PPC64 || ARCH_S390 || IA64 || UML || SPARC64) default y if SECURITY_SELINUX help Enable low-overhead system-call auditing infrastructure that @@ -231,13 +247,15 @@ config CPUSETS bool "Cpuset support" depends on SMP help - This options will let you create and manage CPUSET's which + This option will let you create and manage CPUSETs which allow dynamically partitioning a system into sets of CPUs and Memory Nodes and assigning tasks to run only within those sets. This is primarily useful on large SMP or NUMA systems. Say N if unsure. +source "usr/Kconfig" + menuconfig EMBEDDED bool "Configure standard kernel features (for small systems)" help @@ -260,8 +278,8 @@ config KALLSYMS_ALL help Normally kallsyms only contains the symbols of functions, for nicer OOPS messages. Some debuggers can use kallsyms for other - symbols too: say Y here to include all symbols, and you - don't care about adding 300k to the size of your kernel. + symbols too: say Y here to include all symbols, if you need them + and you don't care about adding 300k to the size of your kernel. Say N. diff --git a/init/Makefile b/init/Makefile index 93a53fbdbe79..a2300078f2b7 100644 --- a/init/Makefile +++ b/init/Makefile @@ -25,4 +25,5 @@ $(obj)/version.o: include/linux/compile.h include/linux/compile.h: FORCE @echo ' CHK $@' - @$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CC) $(CFLAGS)" + $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ + "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(CFLAGS)" diff --git a/init/do_mounts.c b/init/do_mounts.c index b7570c074d0f..b27c11064409 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c @@ -7,6 +7,7 @@ #include <linux/root_dev.h> #include <linux/security.h> #include <linux/delay.h> +#include <linux/mount.h> #include <linux/nfs_fs.h> #include <linux/nfs_fs_sb.h> @@ -25,8 +26,6 @@ static char __initdata saved_root_name[64]; /* this is initialized in init/main.c */ dev_t ROOT_DEV; -EXPORT_SYMBOL(ROOT_DEV); - static int __init load_ramdisk(char *str) { rd_doload = simple_strtol(str,NULL,0) & 3; @@ -128,10 +127,10 @@ fail: * used when disk name of partitioned disk ends on a digit. * * If name doesn't have fall into the categories above, we return 0. - * Driverfs is used to check if something is a disk name - it has + * Sysfs is used to check if something is a disk name - it has * all known disks under bus/block/devices. If the disk name - * contains slashes, name of driverfs node has them replaced with - * bangs. try_name() does the actual checks, assuming that driverfs + * contains slashes, name of sysfs node has them replaced with + * bangs. try_name() does the actual checks, assuming that sysfs * is mounted on rootfs /sys. */ diff --git a/init/do_mounts.h b/init/do_mounts.h index de92bee4f35e..e0a7ac9649e1 100644 --- a/init/do_mounts.h +++ b/init/do_mounts.h @@ -9,7 +9,6 @@ #include <linux/major.h> #include <linux/root_dev.h> -dev_t name_to_dev_t(char *name); void change_floppy(char *fmt, ...); void mount_block_root(char *name, int flags); void mount_root(void); diff --git a/init/initramfs.c b/init/initramfs.c index 02c5ce64990d..0c5d9a3f951b 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -466,6 +466,14 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only) extern char __initramfs_start[], __initramfs_end[]; #ifdef CONFIG_BLK_DEV_INITRD #include <linux/initrd.h> + +static void __init free_initrd(void) +{ + free_initrd_mem(initrd_start, initrd_end); + initrd_start = 0; + initrd_end = 0; +} + #endif void __init populate_rootfs(void) @@ -484,7 +492,7 @@ void __init populate_rootfs(void) printk(" it is\n"); unpack_to_rootfs((char *)initrd_start, initrd_end - initrd_start, 0); - free_initrd_mem(initrd_start, initrd_end); + free_initrd(); return; } printk("it isn't (%s); looks like an initrd\n", err); @@ -493,7 +501,7 @@ void __init populate_rootfs(void) sys_write(fd, (char *)initrd_start, initrd_end - initrd_start); sys_close(fd); - free_initrd_mem(initrd_start, initrd_end); + free_initrd(); } } #endif diff --git a/init/main.c b/init/main.c index b5e421e39ede..f142d4035341 100644 --- a/init/main.c +++ b/init/main.c @@ -47,10 +47,12 @@ #include <linux/rmap.h> #include <linux/mempolicy.h> #include <linux/key.h> +#include <net/sock.h> #include <asm/io.h> #include <asm/bugs.h> #include <asm/setup.h> +#include <asm/sections.h> /* * This is one of the first .c files built. Error out early @@ -79,7 +81,6 @@ static int init(void *); extern void init_IRQ(void); -extern void sock_init(void); extern void fork_init(unsigned long); extern void mca_init(void); extern void sbus_init(void); @@ -122,6 +123,7 @@ extern void softirq_init(void); char saved_command_line[COMMAND_LINE_SIZE]; static char *execute_command; +static char *ramdisk_execute_command; /* Setup configured maximum number of CPUs to activate */ static unsigned int max_cpus = NR_CPUS; @@ -296,6 +298,18 @@ static int __init init_setup(char *str) } __setup("init=", init_setup); +static int __init rdinit_setup(char *str) +{ + unsigned int i; + + ramdisk_execute_command = str; + /* See "auto" comment in init_setup */ + for (i = 1; i < MAX_INIT_ARGS; i++) + argv_init[i] = NULL; + return 1; +} +__setup("rdinit=", rdinit_setup); + extern void setup_arch(char **); #ifndef CONFIG_SMP @@ -323,8 +337,6 @@ static void __init setup_per_cpu_areas(void) { unsigned long size, i; char *ptr; - /* Created by linker magic */ - extern char __per_cpu_start[], __per_cpu_end[]; /* Copy section for each CPU (we discard the original) */ size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES); @@ -615,6 +627,7 @@ static void do_pre_smp_initcalls(void) migration_init(); #endif spawn_ksoftirqd(); + spawn_softlockup_task(); } static void run_init_process(char *init_filename) @@ -681,10 +694,14 @@ static int init(void * unused) * check if there is an early userspace init. If yes, let it do all * the work */ - if (sys_access((const char __user *) "/init", 0) == 0) - execute_command = "/init"; - else + + if (!ramdisk_execute_command) + ramdisk_execute_command = "/init"; + + if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) { + ramdisk_execute_command = NULL; prepare_namespace(); + } /* * Ok, we have completed the initial bootup, and @@ -701,17 +718,24 @@ static int init(void * unused) (void) sys_dup(0); (void) sys_dup(0); - + + if (ramdisk_execute_command) { + run_init_process(ramdisk_execute_command); + printk(KERN_WARNING "Failed to execute %s\n", + ramdisk_execute_command); + } + /* * We try each of these until one succeeds. * * The Bourne shell can be used instead of init if we are * trying to recover a really broken machine. */ - - if (execute_command) + if (execute_command) { run_init_process(execute_command); - + printk(KERN_WARNING "Failed to execute %s. Attempting " + "defaults...\n", execute_command); + } run_init_process("/sbin/init"); run_init_process("/etc/init"); run_init_process("/bin/init"); |
