Active messages using dynamically allocated memory
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 23 Oct 2009 05:15:03 +0000 (22:15 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 23 Oct 2009 05:15:03 +0000 (22:15 -0700)
commit7fe268368d662bcc76e9da14b63a1ea4bde1e166
tree9ed2640a6055753d1f92d54c127c3f37f0d15716
parent97715407f66686eef8c807ab8fb45fe1c3b739e5
Active messages using dynamically allocated memory

This should avoid the active message deadlock issues.  This uses the
slab allocator to create new messages, so a core doesn't run out of
slots for amsgs.  You could still run out of memory...

Note that the amsg is allocated on one core and freed on the other.
This really wants a magazine layer or something similar per-core, so
these allocations and frees don't contend on a global cache lock.

We can gut some things in a future commit, such as the sync variety of
send_amsg, and any of the TODO (AMDL)s.

Also note there is something seriously wrong, perhaps just with KVM, in
which an interrupt coming in around the time of proc_startcore can make
someone "forget" they are holding the lock.  Or rather other people spin
waiting for a lock that never gets released (though the guilty party
progresses as if it was normal).  (TODO).
12 files changed:
kern/arch/i386/arch.h
kern/arch/i386/smp_boot.c
kern/arch/i386/trap.c
kern/include/smp.h
kern/include/trap.h
kern/src/Makefrag
kern/src/init.c
kern/src/kfs.c
kern/src/manager.c
kern/src/monitor.c
user/apps/roslib/mhello.c
user/apps/roslib/mproctests.c [new file with mode: 0644]