git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tracing, kmemtrace: Separate include/trace/kmemtrace.h to kmemtrace part and tracepoi...
[safe/jmp/linux-2.6]
/
init
/
main.c
diff --git
a/init/main.c
b/init/main.c
index
2a7ce0f
..
eece40c
100644
(file)
--- a/
init/main.c
+++ b/
init/main.c
@@
-14,6
+14,7
@@
#include <linux/proc_fs.h>
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/proc_fs.h>
#include <linux/kernel.h>
#include <linux/syscalls.h>
+#include <linux/stackprotector.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <linux/delay.h>
@@
-50,7
+51,6
@@
#include <linux/rmap.h>
#include <linux/mempolicy.h>
#include <linux/key.h>
#include <linux/rmap.h>
#include <linux/mempolicy.h>
#include <linux/key.h>
-#include <linux/unwind.h>
#include <linux/buffer_head.h>
#include <linux/page_cgroup.h>
#include <linux/debug_locks.h>
#include <linux/buffer_head.h>
#include <linux/page_cgroup.h>
#include <linux/debug_locks.h>
@@
-63,6
+63,8
@@
#include <linux/signal.h>
#include <linux/idr.h>
#include <linux/ftrace.h>
#include <linux/signal.h>
#include <linux/idr.h>
#include <linux/ftrace.h>
+#include <linux/async.h>
+#include <linux/kmemtrace.h>
#include <trace/boot.h>
#include <asm/io.h>
#include <trace/boot.h>
#include <asm/io.h>
@@
-75,15
+77,6
@@
#include <asm/smp.h>
#endif
#include <asm/smp.h>
#endif
-/*
- * This is one of the first .c files built. Error out early if we have compiler
- * trouble.
- */
-
-#if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 0
-#warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended.
-#endif
-
static int kernel_init(void *);
extern void init_IRQ(void);
static int kernel_init(void *);
extern void init_IRQ(void);
@@
-106,7
+99,7
@@
static inline void mark_rodata_ro(void) { }
extern void tc_init(void);
#endif
extern void tc_init(void);
#endif
-enum system_states system_state;
+enum system_states system_state
__read_mostly
;
EXPORT_SYMBOL(system_state);
/*
EXPORT_SYMBOL(system_state);
/*
@@
-117,7
+110,7
@@
EXPORT_SYMBOL(system_state);
extern void time_init(void);
/* Default late time init is NULL. archs can override this later. */
extern void time_init(void);
/* Default late time init is NULL. archs can override this later. */
-void (*late_time_init)(void);
+void (*
__initdata
late_time_init)(void);
extern void softirq_init(void);
/* Untouched command line saved by arch-specific code. */
extern void softirq_init(void);
/* Untouched command line saved by arch-specific code. */
@@
-144,14
+137,14
@@
unsigned int __initdata setup_max_cpus = NR_CPUS;
* greater than 0, limits the maximum number of CPUs activated in
* SMP mode to <NUM>.
*/
* greater than 0, limits the maximum number of CPUs activated in
* SMP mode to <NUM>.
*/
-#ifndef CONFIG_X86_IO_APIC
-static inline void disable_ioapic_setup(void) {};
-#endif
+
+void __weak arch_disable_smp_support(void) { }
static int __init nosmp(char *str)
{
setup_max_cpus = 0;
static int __init nosmp(char *str)
{
setup_max_cpus = 0;
- disable_ioapic_setup();
+ arch_disable_smp_support();
+
return 0;
}
return 0;
}
@@
-161,14
+154,14
@@
static int __init maxcpus(char *str)
{
get_option(&str, &setup_max_cpus);
if (setup_max_cpus == 0)
{
get_option(&str, &setup_max_cpus);
if (setup_max_cpus == 0)
-
disable_ioapic_setup
();
+
arch_disable_smp_support
();
return 0;
}
early_param("maxcpus", maxcpus);
#else
return 0;
}
early_param("maxcpus", maxcpus);
#else
-#define setup_max_cpus NR_CPUS
+const unsigned int setup_max_cpus = NR_CPUS;
#endif
/*
#endif
/*
@@
-380,12
+373,7
@@
EXPORT_SYMBOL(nr_cpu_ids);
/* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */
static void __init setup_nr_cpu_ids(void)
{
/* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */
static void __init setup_nr_cpu_ids(void)
{
- int cpu, highest_cpu = 0;
-
- for_each_possible_cpu(cpu)
- highest_cpu = cpu;
-
- nr_cpu_ids = highest_cpu + 1;
+ nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1;
}
#ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA
}
#ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA
@@
-420,8
+408,7
@@
static void __init smp_init(void)
* Set up the current CPU as possible to migrate to.
* The other ones will be done by cpu_up/cpu_down()
*/
* Set up the current CPU as possible to migrate to.
* The other ones will be done by cpu_up/cpu_down()
*/
- cpu = smp_processor_id();
- cpu_set(cpu, cpu_active_map);
+ set_cpu_active(smp_processor_id(), true);
/* FIXME: This should be done in userspace --RR */
for_each_present_cpu(cpu) {
/* FIXME: This should be done in userspace --RR */
for_each_present_cpu(cpu) {
@@
-461,7
+448,7
@@
static void __init setup_command_line(char *command_line)
* gcc-3.4 accidentally inlines this function, so use noinline.
*/
* gcc-3.4 accidentally inlines this function, so use noinline.
*/
-static
void noinline
__init_refok rest_init(void)
+static
noinline void
__init_refok rest_init(void)
__releases(kernel_lock)
{
int pid;
__releases(kernel_lock)
{
int pid;
@@
-477,6
+464,7
@@
static void noinline __init_refok rest_init(void)
* at least once to get things moving:
*/
init_idle_bootup_task(current);
* at least once to get things moving:
*/
init_idle_bootup_task(current);
+ rcu_scheduler_starting();
preempt_enable_no_resched();
schedule();
preempt_disable();
preempt_enable_no_resched();
schedule();
preempt_disable();
@@
-527,9
+515,9
@@
static void __init boot_cpu_init(void)
{
int cpu = smp_processor_id();
/* Mark the boot cpu "present", "online" etc for SMP and UP case */
{
int cpu = smp_processor_id();
/* Mark the boot cpu "present", "online" etc for SMP and UP case */
-
cpu_set(cpu, cpu_online_map
);
-
cpu_set(cpu, cpu_present_map
);
-
cpu_set(cpu, cpu_possible_map
);
+
set_cpu_online(cpu, true
);
+
set_cpu_present(cpu, true
);
+
set_cpu_possible(cpu, true
);
}
void __init __weak smp_setup_processor_id(void)
}
void __init __weak smp_setup_processor_id(void)
@@
-540,15
+528,6
@@
void __init __weak thread_info_cache_init(void)
{
}
{
}
-void __init __weak arch_early_irq_init(void)
-{
-}
-
-void __init __weak early_irq_init(void)
-{
- arch_early_irq_init();
-}
-
asmlinkage void __init start_kernel(void)
{
char * command_line;
asmlinkage void __init start_kernel(void)
{
char * command_line;
@@
-560,9
+539,14
@@
asmlinkage void __init start_kernel(void)
* Need to run as early as possible, to initialize the
* lockdep hash:
*/
* Need to run as early as possible, to initialize the
* lockdep hash:
*/
- unwind_init();
lockdep_init();
debug_objects_early_init();
lockdep_init();
debug_objects_early_init();
+
+ /*
+ * Set up the the initial canary ASAP:
+ */
+ boot_init_stack_canary();
+
cgroup_init_early();
local_irq_disable();
cgroup_init_early();
local_irq_disable();
@@
-582,7
+566,6
@@
asmlinkage void __init start_kernel(void)
setup_arch(&command_line);
mm_init_owner(&init_mm, &init_task);
setup_command_line(command_line);
setup_arch(&command_line);
mm_init_owner(&init_mm, &init_task);
setup_command_line(command_line);
- unwind_setup();
setup_per_cpu_areas();
setup_nr_cpu_ids();
smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
setup_per_cpu_areas();
setup_nr_cpu_ids();
smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
@@
-625,7
+608,8
@@
asmlinkage void __init start_kernel(void)
sched_clock_init();
profile_init();
if (!irqs_disabled())
sched_clock_init();
profile_init();
if (!irqs_disabled())
- printk("start_kernel(): bug: interrupts were enabled early\n");
+ printk(KERN_CRIT "start_kernel(): bug: interrupts were "
+ "enabled early\n");
early_boot_irqs_on();
local_irq_enable();
early_boot_irqs_on();
local_irq_enable();
@@
-665,6
+649,7
@@
asmlinkage void __init start_kernel(void)
enable_debug_pagealloc();
cpu_hotplug_init();
kmem_cache_init();
enable_debug_pagealloc();
cpu_hotplug_init();
kmem_cache_init();
+ kmemtrace_init();
debug_objects_mem_init();
idr_init_cache();
setup_per_cpu_pageset();
debug_objects_mem_init();
idr_init_cache();
setup_per_cpu_pageset();
@@
-710,7
+695,7
@@
asmlinkage void __init start_kernel(void)
rest_init();
}
rest_init();
}
-
static
int initcall_debug;
+int initcall_debug;
core_param(initcall_debug, initcall_debug, bool, 0644);
int do_one_initcall(initcall_t fn)
core_param(initcall_debug, initcall_debug, bool, 0644);
int do_one_initcall(initcall_t fn)
@@
-786,6
+771,7
@@
static void __init do_basic_setup(void)
{
rcu_init_sched(); /* needed by module_init stage. */
init_workqueues();
{
rcu_init_sched(); /* needed by module_init stage. */
init_workqueues();
+ cpuset_init_smp();
usermodehelper_init();
driver_init();
init_irq_proc();
usermodehelper_init();
driver_init();
init_irq_proc();
@@
-809,8
+795,11
@@
static void run_init_process(char *init_filename)
/* This is a non __init function. Force it to be noinline otherwise gcc
* makes it inline to init() and it becomes part of init.text section
*/
/* This is a non __init function. Force it to be noinline otherwise gcc
* makes it inline to init() and it becomes part of init.text section
*/
-static int noinline init_post(void)
+static noinline int init_post(void)
+ __releases(kernel_lock)
{
{
+ /* need to finish all async __init code before freeing the memory */
+ async_synchronize_full();
free_initmem();
unlock_kernel();
mark_rodata_ro();
free_initmem();
unlock_kernel();
mark_rodata_ro();
@@
-856,7
+845,7
@@
static int __init kernel_init(void * unused)
/*
* init can run on any cpu.
*/
/*
* init can run on any cpu.
*/
- set_cpus_allowed_ptr(current,
CPU_MASK_ALL_PTR
);
+ set_cpus_allowed_ptr(current,
cpu_all_mask
);
/*
* Tell the world that we're going to be the grim
* reaper of innocent orphaned children.
/*
* Tell the world that we're going to be the grim
* reaper of innocent orphaned children.
@@
-877,8
+866,6
@@
static int __init kernel_init(void * unused)
smp_init();
sched_init_smp();
smp_init();
sched_init_smp();
- cpuset_init_smp();
-
do_basic_setup();
/*
do_basic_setup();
/*