Tomas Hruby [Mon, 10 May 2010 14:27:22 +0000 (14:27 +0000)]
PM signal handling check too strict
- this panic may be unnecessarily triggered if PM gets the delayed
stop signal from kernel before it gets reply from VFS to the UNPAUSE
call.
- after this change PM does not proceed to delivering the signal until
the reply from VFS is received. Perhaps PM could deliver the signal
straight away as it knows that the process does not run. Possibly
i dangerous.
- the signal is deliverd immediately after the UNPAUSE reply as the
pending signals are always checked at the moment.
Ben Gras [Sat, 8 May 2010 18:00:03 +0000 (18:00 +0000)]
kernel: new DEBUG_RACE option. try to provoke race conditions between processes.
it does this by
- making all processes interruptible by running out of quantum
- giving all processes a single tick of quantum
- picking a random runnable process instead of in order, and
from a single pool of runnable processes (no priorities)
This together with very high HZ values currently provokes some race conditions
seen earlier only when running with SMP.
Tomas Hruby [Fri, 7 May 2010 11:22:49 +0000 (11:22 +0000)]
A small mini_receive() cleanup
- this patch substitutes *xpp for sender to increase readability of
mini_receive().
- makes sure that the dequeued sender has p_q_link == NULL and that
this condition holds when enqueuing the sender again.
- it is a sanity check to make sure that the new sender is not
enqueued already. Before this change the dequeued sender's p_q_link
may not be NULL and it was only set to NULL when enqueued again.
Ben Gras [Wed, 5 May 2010 11:35:04 +0000 (11:35 +0000)]
secondary cache feature in vm.
A new call to vm lets processes yield a part of their memory to vm,
together with an id, getting newly allocated memory in return. vm is
allowed to forget about it if it runs out of memory. processes can ask
for it back using the same id. (These two operations are normally
combined in a single call.)
It can be used as a as-big-as-memory-will-allow block cache for
filesystems, which is how mfs now uses it.
Tomas Hruby [Mon, 3 May 2010 17:38:54 +0000 (17:38 +0000)]
deadlock() - more info
- deadlock() is more verbose in case of a detected deadlock. First, it
lists all processses in the deadlock group. Then it prints the proc
extra info, not only stack trace and register dump
Tomas Hruby [Mon, 3 May 2010 17:37:18 +0000 (17:37 +0000)]
debugging - printing processes on serial
- this patch moves the former printslot() from arch_system.c to
debug.c and reimplements it slightly. The output is not changed,
however, the process information is printed in a separate function
print_proc() in debug.c as such a function is also handy in other
situations and should be publicly available when debugging.
Thomas Veerman [Mon, 3 May 2010 15:12:39 +0000 (15:12 +0000)]
- Add test52 to test FPU context switching
- Make test/run count how many tests it's going to perform instead of having to
manually update it ourselves.
RS CHANGES:
- Crash recovery is now implemented like live update. Two instances are kept
side by side and the dead version is live updated into the new one. The endpoint
doesn't change and the failure is not exposed (by default) to other system
services.
- The new instance can be created reactively (when a crash is detected) or
proactively. In the latter case, RS can be instructed to keep a replica of
the system service to perform a hot swap when the service fails. The flag
SF_USE_REPL is set in that case.
- The new flag SF_USE_REPL is supported for services in the boot image and
dynamically started services through the RS interface (i.e. -p option in the
service utility).
- Fixed a free unallocated memory bug for core system services.
Tomas Hruby [Mon, 26 Apr 2010 23:21:26 +0000 (23:21 +0000)]
Changed pagefault delivery to VM
this patch changes the way pagefaults are delivered to VM. It adopts
the same model as the out-of-quantum messages sent by kernel to a
scheduler.
- everytime a userspace pagefault occurs, kernel creates a message
which is sent to VM on behalf of the faulting process
- the process is blocked on delivery to VM in the standard IPC code
instead of waiting in a spacial in-kernel queue (stack) and is not
runnable until VM tell kernel that the pagefault is resolved and is
free to clear the RTS_PAGEFAULT flag.
- VM does not need call kernel and poll the pagefault information
which saves many (1/2?) calls and kernel calls that return "no more
data"
- VM notification by kernel does not need to use signals
- each entry in proc table is by 12 bytes smaller (~3k save)
Ben Gras [Mon, 26 Apr 2010 22:07:21 +0000 (22:07 +0000)]
cd boot workaround for bioses that didn't want to boot >4 image sectors.
boot is a normal binary with a.out again. use 'cdbootblock,' a CDBOOT
variant of bootblock, both from bootblock.s, as the first boot image
that then loads boot, exactly like the bootblock loads boot when booting
from harddisk. the sector numbers (2048 byte iso sectors) are patched in
by writeisofs, like installboot does for bootblock. bootblock unchanged.
Tomas Hruby [Tue, 13 Apr 2010 10:45:08 +0000 (10:45 +0000)]
PM remembers what it should schedule
- while PM implements fork also for RS it needs to remember what to
schedule and what not. PM_SCHEDULED flag serves this purpose.
- PM only schedules processes that are descendaints of init, i.e. normal
user processes
- after a process is forked PM schedules for the first time only
processes that have PM_SCHEDULED set. The others are handled iether
by kernel or some other scheduler
Ben Gras [Mon, 12 Apr 2010 11:25:24 +0000 (11:25 +0000)]
let vm use physically fragmented memory for allocations.
map_copy_ph_block is replaced by map_clone_ph_block, which can
replace a single physical block by multiple physical blocks.
also,
. merge map_mem.c with region.c, as they manipulate the same
data structures
. NOTRUNNABLE removed as sanity check
. use direct functions for ALLOC_MEM and FREE_MEM again
. add some checks to shared memory mapping code
. fix for data structure integrity when using shared memory
. fix sanity checks