|
@@ -536,6 +536,29 @@ void __init __weak thread_info_cache_init(void)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
+void pre_alloc_dyn_array(void)
|
|
|
+{
|
|
|
+#ifdef CONFIG_HAVE_DYN_ARRAY
|
|
|
+ unsigned long size, phys = 0;
|
|
|
+ struct dyn_array **daa;
|
|
|
+
|
|
|
+ for (daa = __dyn_array_start ; daa < __dyn_array_end; daa++) {
|
|
|
+ struct dyn_array *da = *daa;
|
|
|
+
|
|
|
+ size = da->size * (*da->nr);
|
|
|
+ print_fn_descriptor_symbol("dyna_array %s ", da->name);
|
|
|
+ printk(KERN_CONT "size:%#lx nr:%d align:%#lx",
|
|
|
+ da->size, *da->nr, da->align);
|
|
|
+ *da->name = __alloc_bootmem(size, da->align, phys);
|
|
|
+ phys = virt_to_phys(*da->name);
|
|
|
+ printk(KERN_CONT " ==> [%#lx - %#lx]\n", phys, phys + size);
|
|
|
+
|
|
|
+ if (da->init_work)
|
|
|
+ da->init_work(da);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
asmlinkage void __init start_kernel(void)
|
|
|
{
|
|
|
char * command_line;
|
|
@@ -567,6 +590,7 @@ asmlinkage void __init start_kernel(void)
|
|
|
printk(KERN_NOTICE);
|
|
|
printk(linux_banner);
|
|
|
setup_arch(&command_line);
|
|
|
+ pre_alloc_dyn_array();
|
|
|
mm_init_owner(&init_mm, &init_task);
|
|
|
setup_command_line(command_line);
|
|
|
unwind_setup();
|