DragonFly commits List (threaded) for 2009-04
DragonFly-126.96.36.1998.g6179d master sys/kern init_main.c sys/platform/vkernel/i386 trap.c sys/platform/vkernel/platform machintr.c
Author: Matthew Dillon <email@example.com>
Date: Wed Apr 22 12:56:37 2009 -0700
Fix vkernel issues - enable ithread preemption, races, and more.
signalintr() was improperly entering a critical section, preventing
sched_ithd() from being able to preempt the current thread. Adjust
so the code matches the pc32 code.
lwp0 was being assigned cpu_heavy_switch instead of cpu_lwkt_switch,
which works fine on pc32 but blows up the vkernel if process 0 gets
preempted, because vkernel LWKT processes are not assigned vmspaces.
Properly use cpu_lwkt_switch() to fix the problem.
We were not checking for pending reschedule requests when the
vmspace_ctl() call got interrupted by a signal. NOTE: There is
still a race after the check prior to re-entry into vmspace_ctl()
which needs to be closed.
Tracked-down-by: corecode, dillon
Summary of changes:
sys/kern/init_main.c | 2 +-
sys/platform/vkernel/i386/trap.c | 9 +++++----
sys/platform/vkernel/platform/machintr.c | 9 ++++++---
3 files changed, 12 insertions(+), 8 deletions(-)
DragonFly BSD source repository