Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src/sys/rump/librump



Module Name:    src
Committed By:   pooka
Date:           Thu Oct 15 00:28:47 UTC 2009

Modified Files:
        src/sys/rump/librump/rumpkern: Makefile.rumpkern emul.c locks.c
            ltsleep.c misc_stub.c percpu.c rump.c rump_private.h
        src/sys/rump/librump/rumpkern/arch/i386: rumpcpu.c
        src/sys/rump/librump/rumpuser: rumpuser_int.h rumpuser_pth.c
Added Files:
        src/sys/rump/librump/rumpkern: scheduler.c

Log Message:
Add initial work on a rump virtual cpu scheduler.  This is necessary
for kernel code which has been written to avoid MP contention by
using cpu-local storage (most prominently, select and pool_cache).

Instead of always assuming rump_cpu, the scheduler must now be run
(and unrun) on all entry points into rump.  Likewise, rumpuser
unruns and re-runs the scheduler around each potentially blocking
operation.  As an optimization, I modified some locking primitives
to try to get the lock without blocking before releasing the cpu.

Also, ltsleep was modified to assume that it is never called without
the biglock held and made to use the biglock as the sleep interlock.
Otherwise there is just too much drama with deadlocks.  If some
kernel code wants to call ltsleep without the biglock, then, *snif*,
it's no longer supported and rump and should be modified to support
newstyle locks anyway.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/rump/librump/rumpkern/Makefile.rumpkern
cvs rdiff -u -r1.100 -r1.101 src/sys/rump/librump/rumpkern/emul.c
cvs rdiff -u -r1.28 -r1.29 src/sys/rump/librump/rumpkern/locks.c
cvs rdiff -u -r1.18 -r1.19 src/sys/rump/librump/rumpkern/ltsleep.c
cvs rdiff -u -r1.23 -r1.24 src/sys/rump/librump/rumpkern/misc_stub.c
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/librump/rumpkern/percpu.c
cvs rdiff -u -r1.123 -r1.124 src/sys/rump/librump/rumpkern/rump.c
cvs rdiff -u -r1.30 -r1.31 src/sys/rump/librump/rumpkern/rump_private.h
cvs rdiff -u -r0 -r1.1 src/sys/rump/librump/rumpkern/scheduler.c
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c
cvs rdiff -u -r1.3 -r1.4 src/sys/rump/librump/rumpuser/rumpuser_int.h
cvs rdiff -u -r1.35 -r1.36 src/sys/rump/librump/rumpuser/rumpuser_pth.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



Home | Main Index | Thread Index | Old Index