9ns: Add fs_files and tree_files
[akaros.git] / kern / src / init.c
index f5be4f8..1304f28 100644 (file)
 #include <process.h>
 #include <trap.h>
 #include <syscall.h>
-#include <kclock.h>
 #include <manager.h>
 #include <testing.h>
 #include <kmalloc.h>
 #include <hashtable.h>
 #include <radix.h>
 #include <mm.h>
-#include <frontend.h>
 #include <ex_table.h>
 #include <percpu.h>
 
@@ -42,7 +40,7 @@
 #include <ext2fs.h>
 #include <kthread.h>
 #include <linker_func.h>
-#include <ip.h>
+#include <net/ip.h>
 #include <acpi.h>
 #include <coreboot_tables.h>
 
@@ -56,7 +54,7 @@
                }                                                                               \
        } while (0)
 
-int booting = 1;
+bool booting = TRUE;
 struct proc_global_info __proc_global_info;
 struct sysinfo_t sysinfo;
 static char boot_cmdline[MAX_BOOT_CMDLINE_SIZE];
@@ -139,9 +137,10 @@ void kernel_init(multiboot_info_t *mboot_info)
        printk("Boot Command Line: '%s'\n", boot_cmdline);
 
        exception_table_init();
+       num_cores = get_early_num_cores();
        pmem_init(multiboot_kaddr);
-       kmem_cache_init();              // Sets up slab allocator
        kmalloc_init();
+       vmap_init();
        hashtable_init();
        radix_init();
        acpiinit();
@@ -149,7 +148,6 @@ void kernel_init(multiboot_info_t *mboot_info)
        percpu_init();
        kthread_init();                                 /* might need to tweak when this happens */
        vmr_init();
-       file_init();
        page_check();
        idt_init();
        /* After kthread_init and idt_init, we can use a real kstack. */
@@ -179,7 +177,7 @@ static void __kernel_init_part_deux(void *arg)
        eth_audio_init();
 #endif /* CONFIG_ETH_AUDIO */
        get_coreboot_info(&sysinfo);
-       booting = 0;
+       booting = FALSE;
 
 #ifdef CONFIG_RUN_INIT_SCRIPT
        if (run_init_script()) {
@@ -257,12 +255,19 @@ void _panic(const char *file, int line, const char *fmt,...)
        cprintf("\n");
        va_end(ap);
 
-dead:
        monitor(NULL);
-       /* We could consider turning the lock checker back on here, but things are
-        * probably a mess anyways, and with it on we would probably lock up right
-        * away when we idle. */
-       //pcpui->__lock_checking_enabled++;
+       if (pcpui->cur_proc) {
+               printk("panic killing proc %d\n", pcpui->cur_proc->pid);
+               proc_destroy(pcpui->cur_proc);
+       }
+       /* Yikes!  We're claiming to be not in IRQ/trap ctx and not holding any
+        * locks.  Obviously we could be wrong, and could easily deadlock.  We could
+        * be in an IRQ handler, an unhandled kernel fault, or just a 'normal' panic
+        * in a syscall - any of which can involve unrestore invariants. */
+       pcpui->__ctx_depth = 0;
+       pcpui->lock_depth = 0;
+       if (pcpui->cur_kthread)
+               kth_panic_sysc(pcpui->cur_kthread);
        smp_idle();
 }