Fixes vmm_struct_cleanup
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Mar 2015 16:24:26 +0000 (12:24 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Mar 2015 19:18:55 +0000 (15:18 -0400)
commit4de918b92f3e2955e486eeabc123ae13f654ef70
tree3b69987c6a9b86aa67fd0eed84ea18dab822d61d
parentc9966e3e87036400280f5dd3527b78fb3be066c2
Fixes vmm_struct_cleanup

Cleanup is called from __proc_free, and I don't want to sleep in there.

Running the existing code with the lock debugger will flip out.  Even
attempting to qlock while holding a spinlock will panic, rightly so.
The lock held happens to be the parent's child lock, which it holds when
it decrefs the child.  Regardless, proc_decref is called all over the
place, and I'd rather not sleep in the release method.

I considered removing the qlock and having a multi-state atomic_t that
we CAS on, solving the issue of multiple potential initializers and
cleanup not checking the lock.  But that's a bit of overkill.
kern/arch/x86/vmm/vmm.c
kern/arch/x86/vmm/vmm.h
kern/src/process.c