Update of /cvsroot/gc-linux/linux/init
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19469/init
Modified Files:
main.c
Log Message:
Merged 2.6.4
Index: main.c
===================================================================
RCS file: /cvsroot/gc-linux/linux/init/main.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- main.c 18 Feb 2004 20:01:59 -0000 1.4
+++ main.c 14 Mar 2004 23:45:45 -0000 1.5
@@ -12,10 +12,12 @@
#define __KERNEL_SYSCALLS__
#include <linux/config.h>
+#include <linux/types.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/kernel.h>
+#include <linux/syscalls.h>
#include <linux/unistd.h>
#include <linux/string.h>
#include <linux/ctype.h>
@@ -36,6 +38,7 @@
#include <linux/profile.h>
#include <linux/rcupdate.h>
#include <linux/moduleparam.h>
+#include <linux/kallsyms.h>
#include <linux/writeback.h>
#include <linux/cpu.h>
#include <linux/efi.h>
@@ -141,6 +144,7 @@
static char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
+static const char *panic_later, *panic_param;
__setup("profile=", profile_setup);
@@ -253,20 +257,27 @@
return 0;
}
+ if (panic_later)
+ return 0;
+
if (val) {
/* Environment option */
unsigned int i;
for (i = 0; envp_init[i]; i++) {
- if (i == MAX_INIT_ENVS)
- panic("Too many boot env vars at `%s'", param);
+ if (i == MAX_INIT_ENVS) {
+ panic_later = "Too many boot env vars at `%s'";
+ panic_param = param;
+ }
}
envp_init[i] = param;
} else {
/* Command line option */
unsigned int i;
for (i = 0; argv_init[i]; i++) {
- if (i == MAX_INIT_ARGS)
- panic("Too many boot init vars at `%s'",param);
+ if (i == MAX_INIT_ARGS) {
+ panic_later = "Too many boot init vars at `%s'";
+ panic_param = param;
+ }
}
argv_init[i] = param;
}
@@ -340,7 +351,7 @@
static void __init smp_init(void)
{
unsigned int i;
- unsigned j = 0;
+ unsigned j = 1;
/* FIXME: This should be done in userspace --RR */
for (i = 0; i < NR_CPUS; i++) {
@@ -370,9 +381,11 @@
* between the root thread and the init thread may cause start_kernel to
* be reaped by free_initmem before the root thread has proceeded to
* cpu_idle.
+ *
+ * gcc-3.4 accidentally inlines this function, so use noinline.
*/
-static void rest_init(void)
+static void noinline rest_init(void)
{
kernel_thread(init, NULL, CLONE_FS | CLONE_SIGHAND);
unlock_kernel();
@@ -427,6 +440,8 @@
* this. But we do want output early, in case something goes wrong.
*/
console_init();
+ if (panic_later)
+ panic(panic_later, panic_param);
profile_init();
local_irq_enable();
#ifdef CONFIG_BLK_DEV_INITRD
@@ -453,6 +468,7 @@
fork_init(num_physpages);
proc_caches_init();
buffer_init();
+ unnamed_dev_init();
security_scaffolding_startup();
vfs_caches_init(num_physpages);
radix_tree_init();
@@ -498,8 +514,11 @@
for (call = &__initcall_start; call < &__initcall_end; call++) {
char *msg;
- if (initcall_debug)
- printk("calling initcall 0x%p\n", *call);
+ if (initcall_debug) {
+ printk(KERN_DEBUG "Calling initcall 0x%p", *call);
+ print_symbol(": %s()", (unsigned long) *call);
+ printk("\n");
+ }
(*call)();
|