x86: sends the EOI later in the IRQ path
[akaros.git] / kern / src / env.c
index 17abc26..4a3930c 100644 (file)
@@ -63,7 +63,7 @@ WRITES(e->env_pgdir, e->env_cr3, e->procinfo, e->procdata)
 
        // Map in the kernel to the top of every address space
        // should be able to do this so long as boot_pgdir never has
-       // anything put below UTOP
+       // anything put below ULIM
        // TODO check on this!  had a nasty bug because of it
        // this is a bit wonky, since if it's not PGSIZE, lots of other things are
        // screwed up...
@@ -83,6 +83,8 @@ WRITES(e->env_pgdir, e->env_cr3, e->procinfo, e->procdata)
                goto env_setup_vm_error_i;
        if (!(e->procdata = get_cont_pages(LOG2_UP(PROCDATA_NUM_PAGES), 0)))
                goto env_setup_vm_error_d;
+       /* Normally we'd 0 the pages here.  We handle it in proc_init_proc*.  Don't
+        * start the process without calling those. */
        for (int i = 0; i < PROCINFO_NUM_PAGES; i++) {
                if (page_insert(e->env_pgdir, kva2page((void*)e->procinfo + i *
                                PGSIZE), (void*SNT)(UINFO + i*PGSIZE), PTE_USER_RO) < 0)
@@ -93,9 +95,6 @@ WRITES(e->env_pgdir, e->env_cr3, e->procinfo, e->procdata)
                                PGSIZE), (void*SNT)(UDATA + i*PGSIZE), PTE_USER_RW) < 0)
                        goto env_setup_vm_error;
        }
-       memset(e->procinfo, 0, sizeof(struct procinfo));
-       memset(e->procdata, 0, sizeof(struct procdata));
-
        /* Finally, set up the Global Shared Data page for all processes.  Can't be
         * trusted, but still very useful at this stage for us.  Consider removing
         * when we have real processes (TODO).