cvs commit: src/sys/kern lwkt_thread.c src/sys/platform/pc32/i386 machdep.c src/sys/platform/vkernel/i386 cpu_regs.c src/sys/sys systm.h
Matthew Dillon
dillon at crater.dragonflybsd.org
Sun Jul 1 18:39:47 PDT 2007
dillon 2007/07/01 18:37:11 PDT
DragonFly src repository
Modified files:
sys/kern lwkt_thread.c
sys/platform/pc32/i386 machdep.c
sys/platform/vkernel/i386 cpu_regs.c
sys/sys systm.h
Log:
Implement an architecture function cpu_mplock_contested() which is
called by the LWKT thread scheduler when the only thread(s) it can
schedule need the MP lock and the scheduler was unable to acquire the
MP lock.
On real systems this function just executes the cpu 'pause' instruction,
and on virtual systems this functions sleeps for a millisecond.
Use umtx_sleep() instead of sigpause() in the virtual kernel's idle loop
to interlock threads scheduled via a signal with the idle loop sleep.
This fixes a race condition that caused the vkernel to stop scheduling
(but there may be more issues, stay tuned).
Revision Changes Path
1.109 +5 -2 src/sys/kern/lwkt_thread.c
1.126 +11 -0 src/sys/platform/pc32/i386/machdep.c
1.19 +22 -9 src/sys/platform/vkernel/i386/cpu_regs.c
1.72 +1 -0 src/sys/sys/systm.h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/lwkt_thread.c.diff?r1=1.108&r2=1.109&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/i386/machdep.c.diff?r1=1.125&r2=1.126&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/vkernel/i386/cpu_regs.c.diff?r1=1.18&r2=1.19&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/systm.h.diff?r1=1.71&r2=1.72&f=u
More information about the Commits
mailing list