diff --git a/proc.c b/proc.c
index d74a5e902f8ab4724c570d5a6ed71037b2454e04..2ed2952557bccbf969ed47a706af6875715b0fd8 100644
--- a/proc.c
+++ b/proc.c
@@ -55,7 +55,7 @@ growproc(int n)
 
   newmem = kalloc(cp->sz + n);
   if(newmem == 0)
-    return 0xffffffff;
+    return -1;
   memmove(newmem, cp->mem, cp->sz);
   memset(newmem + cp->sz, 0, n);
   oldmem = cp->mem;
@@ -159,8 +159,10 @@ userinit(void)
   p->mem = kalloc(p->sz);
   p->cwd = namei("/");
   memset(p->tf, 0, sizeof(*p->tf));
-  p->tf->es = p->tf->ds = p->tf->ss = (SEG_UDATA << 3) | DPL_USER;
   p->tf->cs = (SEG_UCODE << 3) | DPL_USER;
+  p->tf->ds = (SEG_UDATA << 3) | DPL_USER;
+  p->tf->es = p->tf->ds;
+  p->tf->ss = p->tf->ds;
   p->tf->eflags = FL_IF;
   p->tf->esp = p->sz;
   
@@ -168,6 +170,7 @@ userinit(void)
   p->tf->esp -= 4;
   *(uint*)(p->mem + p->tf->esp) = 0xefefefef;
 
+  // On entry to user space, start executing at beginning of initcode.S.
   p->tf->eip = 0;
   memmove(p->mem, _binary_initcode_start, (int)_binary_initcode_size);
   safestrcpy(p->name, "initcode", sizeof(p->name));
@@ -298,7 +301,7 @@ sleep(void *chan, struct spinlock *lk)
 //PAGEBREAK!
 // Wake up all processes sleeping on chan.
 // Proc_table_lock must be held.
-void
+static void
 wakeup1(void *chan)
 {
   struct proc *p;