--- - branch: MAIN date: Thu Oct 15 00:28:47 UTC 2009 files: - new: '1.52' old: '1.51' path: src/sys/rump/librump/rumpkern/Makefile.rumpkern pathrev: src/sys/rump/librump/rumpkern/Makefile.rumpkern@1.52 type: modified - new: '1.101' old: '1.100' path: src/sys/rump/librump/rumpkern/emul.c pathrev: src/sys/rump/librump/rumpkern/emul.c@1.101 type: modified - new: '1.29' old: '1.28' path: src/sys/rump/librump/rumpkern/locks.c pathrev: src/sys/rump/librump/rumpkern/locks.c@1.29 type: modified - new: '1.19' old: '1.18' path: src/sys/rump/librump/rumpkern/ltsleep.c pathrev: src/sys/rump/librump/rumpkern/ltsleep.c@1.19 type: modified - new: '1.24' old: '1.23' path: src/sys/rump/librump/rumpkern/misc_stub.c pathrev: src/sys/rump/librump/rumpkern/misc_stub.c@1.24 type: modified - new: '1.6' old: '1.5' path: src/sys/rump/librump/rumpkern/percpu.c pathrev: src/sys/rump/librump/rumpkern/percpu.c@1.6 type: modified - new: '1.124' old: '1.123' path: src/sys/rump/librump/rumpkern/rump.c pathrev: src/sys/rump/librump/rumpkern/rump.c@1.124 type: modified - new: '1.31' old: '1.30' path: src/sys/rump/librump/rumpkern/rump_private.h pathrev: src/sys/rump/librump/rumpkern/rump_private.h@1.31 type: modified - new: '1.1' old: '0' path: src/sys/rump/librump/rumpkern/scheduler.c pathrev: src/sys/rump/librump/rumpkern/scheduler.c@1.1 type: added - new: '1.6' old: '1.5' path: src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c pathrev: src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c@1.6 type: modified - new: '1.4' old: '1.3' path: src/sys/rump/librump/rumpuser/rumpuser_int.h pathrev: src/sys/rump/librump/rumpuser/rumpuser_int.h@1.4 type: modified - new: '1.36' old: '1.35' path: src/sys/rump/librump/rumpuser/rumpuser_pth.c pathrev: src/sys/rump/librump/rumpuser/rumpuser_pth.c@1.36 type: modified id: 20091015T002847Z.521c2334134df2a6b86c5ceea7df78880ecfb831 log: | 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. module: src subject: 'CVS commit: src/sys/rump/librump' unixtime: '1255566527' user: pooka