Vcore versioning for __preempt / __startcore (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 12 Oct 2012 01:50:13 +0000 (18:50 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 16 Oct 2012 21:42:20 +0000 (14:42 -0700)
commitf10893344fa7b115bbc345cf8690bfba40344ad7
tree4b59e40b9b1ab1c7350de021dc1cf9a342230be9
parent93ccf065dea14428f6b779767034027ac24ff501
Vcore versioning for __preempt / __startcore (XCC)

Replaces preempt_served with a better mechanism to detect preemptions.
Instead of spinning while holding the proc_lock (in __map_vcore()), we
spin in the __startcore (or __set_curtf()) handlers from KMSG context.
This sets up a happens-before ordering where we wait to make sure a
preempt happened before starting a core.

The old code can use the vcoremap, but one of the issues is that
syscalls can run for a vcore/cur_tf after that vcore has been unmapped
and then remapped again.  Simply detecting this isn't enough btw, since
it can be a real pain to deal with (imagine a page fault, or a trap of
some sort).  Better documentation to follow.

Reinstall your kernel headers and rebuild your parlib/userspace.
kern/include/process.h
kern/include/ros/procinfo.h
kern/src/process.c