Ben Gras [Sun, 19 Jun 2005 23:16:08 +0000 (23:16 +0000)]
Fixed bug that caused the PM to brutalize the contents of the 'memory'
variable. Parsing worked, but future requests for the variable (such as
by the sysenv command) returned truncated data. This caused the system
(e.g. setup script) to think the amount of memory was tiny, and caused
the enabling of swapspace, while it is unnecessary.
Ben Gras [Sun, 19 Jun 2005 22:33:49 +0000 (22:33 +0000)]
Fixed nasty bug that would cause FS to loop forever in rw_scattered (while
syncing, for instance) if blocks are unwritable. This could happen if:
. write goes beyond device boundary to a block device
. write is done for a complete block or more; thus the
block is not retrieved first (at which point it would be noticed
it doesn't exist), but the buffer is simply allocated
. at write time, the device i/o doesn't succeed, but rw_scattered
doesn't understand this and loops forever trying to get the block
written.
Currently, if no blocks can be written, the loop aborts, leaving all
buffers intact but potentially dirty. When invalidate() is called on the
device, the buffers will disappear (even if dirty). Same story for if
the buffer is removed due to rmed from lru chain. There's not much we
can do about this, however - we can't keep these blocks around, forever
occupying a buffer in the buffer cache.
The second part of the solution is not to let unwritable buffers be
created in the first place. How to do this, however, without doing a
wasteful read first?
Ben Gras [Fri, 17 Jun 2005 13:45:40 +0000 (13:45 +0000)]
Select test-set imported from the minix contributions, with permission
to modify and distribute from Jose Manuel Gomez, the author
(jmgomez@linuxmail.org).
Jorrit Herder [Fri, 17 Jun 2005 09:09:54 +0000 (09:09 +0000)]
* Fixed bug relating to nested locking in interrupt handlers. The nested lock
caused interrupts to be reenabled (due to unlock), which caused a race. The
problems were especially visible on slower machines.
* Relocated free memory parsing to process manager. This saved quite some
code at the kernel level. Text size was reduced by about 650 bytes.
* Removed locks for updating the realtime in the clock's main loop and the
get_uptime function. Interrupts are no longer reentrant, so realtime is
immediately updated.
Jorrit Herder [Tue, 7 Jun 2005 14:43:35 +0000 (14:43 +0000)]
Removed debug dumps from the PM and FS servers. The dumps are now done by the
IS servers, which obtains a copy of the data through the getsysinfo() system
call. CTRL-F1 now is a special TTY key to shows function key mappings.
Jorrit Herder [Tue, 7 Jun 2005 12:34:25 +0000 (12:34 +0000)]
Kernel cleanup.
Reduced kernel size by 512KB by moving private buffer into cstart() function.
Replaced assertions with erroneous return values. Removed assertions relating
to isuserp(rp), since all processes should become user processes; system
processes are now treated similar to other processes.
Ben Gras [Mon, 6 Jun 2005 11:40:32 +0000 (11:40 +0000)]
small compile fixes; initial select() stubs; release.sh script doesn't
need /tmp any more since 16MB root device; increase to 3.0.5 to make new
CD with working FXP driver. (not tagged 3.0.5 yet as at driver bios-copy
workaround hasn't been done.)
Jorrit Herder [Mon, 6 Jun 2005 09:30:44 +0000 (09:30 +0000)]
Fixed bug relating to FS and MEMORY during startup;
Relocated some syslib functions to utils library;
Changed location of 'Multiuser startup ..." echo in /etc/rc
Jorrit Herder [Fri, 3 Jun 2005 13:55:06 +0000 (13:55 +0000)]
Various updates.
* Removed some variants of the SYS_GETINFO calls from the kernel;
replaced them with new PM and utils libary functionality. Fixed
bugs in utils library that used old get_kenv() variant.
* Implemented a buffer in the kernel to gather random data.
Memory driver periodically checks this for /dev/random.
A better random algorithm can now be implemented in the driver.
Removed SYS_RANDOM; the SYS_GETINFO call is used instead.
* Remove SYS_KMALLOC from the kernel. Memory allocation can now
be done at the process manager with new 'other' library functions.
Ben Gras [Fri, 3 Jun 2005 08:59:54 +0000 (08:59 +0000)]
prettified rtl driver:
. no more kmalloc
. no more umaps + physcopies / abscopies
. the status register is directly readable from the drivers own
address space now, and no physcopy is needed to read it
. map+physcopy call combinations are replaced by vircopy calls
Jorrit Herder [Wed, 1 Jun 2005 14:31:00 +0000 (14:31 +0000)]
Cleaned up src/lib/utils library. Renamed server_ functions to more logical
names. All system processes can now either use panic() or report() from
libutils, or redefine their own function. Assertions are done via the standard
<assert.h> functionality.
Ben Gras [Wed, 1 Jun 2005 09:39:45 +0000 (09:39 +0000)]
exec now uses phys_zero system call to zero bss segments (instead of
using phys_copy to copy zeroes there for every kb), which is a big
optimisation in some cases
fixed a bug that was introduced when function keys became notifies
Ben Gras [Wed, 1 Jun 2005 09:36:07 +0000 (09:36 +0000)]
Added sys_physzero library call for corresponding system call; modified
system-printf() so it returns number of characters printed (for use in
smart formatting)
Ben Gras [Tue, 31 May 2005 15:22:06 +0000 (15:22 +0000)]
Fix for 'the kermit problem' (keyrepeats happening before the keyrepeat
timeout). A fix is to treat the alarm and interrupt cases differently and
only call the interrupt handler when an actual interrupt has been seen. No
apparent adverse effects.
Jorrit Herder [Tue, 31 May 2005 14:43:04 +0000 (14:43 +0000)]
Replaced flagalrm() timers with another technique to check for timeouts.
This allowed removing the p_flagarlm timer from the kernel's process table.
Furthermore, I merged p_syncalrm and p_signalrm into p_alarm_timer to save
even more space. Note that processes can no longer have both a signal and
synchronous alarm timer outstanding as of now.
Jorrit Herder [Tue, 31 May 2005 09:50:51 +0000 (09:50 +0000)]
Moved stime, time, times POSIX calls from FS to PM. Removed child time
accounting from kernel (now in PM). Large amount of files in this commit
is due to system time problems during development.
Ben Gras [Mon, 30 May 2005 15:09:51 +0000 (15:09 +0000)]
Disabled clearing screen in tty driver, started console printing after an
initial 1-line scroll at last line. If clearing screen in trailer of boot
monitor is disabled, all previous boot monitor and console messages are
preserved on rebooting.
All that's needed now is a scrollback buffer to see all old messages..
(Even from the boot monitor, bios, previous boots...)
Ben Gras [Mon, 30 May 2005 15:02:52 +0000 (15:02 +0000)]
Added 'bootdelay' feature in boot monitor, it pauses a given number of ms
so the list of programs in the image and their sizes can be seen before the
kernel starts filling the screen.
Added some formatting fixes in installboot and boot monitor itself,
some of the segments were larger than the formatting allowed.
Jorrit Herder [Fri, 27 May 2005 13:10:58 +0000 (13:10 +0000)]
Fixed a bug in PM: sending of reply messages didn't check if destination
process is still alive. This caused a panic in some situations, e.g., when
all processes are killed on a shutdown.
Jorrit Herder [Fri, 27 May 2005 12:44:14 +0000 (12:44 +0000)]
Improved NOTIFY system: fixed a minor error, ignore pending notifications
on SENDREC system calls. To be done: resource (buffer pool) management;
make it structurally impossible to run out of buffers.
Jorrit Herder [Thu, 26 May 2005 13:17:57 +0000 (13:17 +0000)]
Optimized scheduling code. Old code is still available withing DEAD_CODE
and NEW_SCHED_Q definitions. Some minor problems are being traced at the
moment. This commit is meant to backup my files.
--- Jorrit
Ben Gras [Tue, 24 May 2005 14:57:45 +0000 (14:57 +0000)]
this test breaks on the new pre-i/o i/o buffer check. it wants to read
more than its buffer allowed, so it is reasonable that it breaks. reducing
read request size 'fixes' it.
Ben Gras [Tue, 24 May 2005 12:30:29 +0000 (12:30 +0000)]
Added 2 checks to mapping function - one for overflow (virtual address +
size wraparound), one to see if the size fits in the designated segment.
It seems this check wasn't done. This came to light when trying to pre-check
the users buffer for read() and write() in using the vectored virtual
copy system call in servers/fs/read.c.
Jorrit Herder [Tue, 24 May 2005 10:06:17 +0000 (10:06 +0000)]
New NOTIFY system call! Queued at kernel. Duplicate messages (with same source
and type) are overwritten with newer flags/ arguments. The interface from
within the kernel is lock_notify(). User processes can make a system call with
notify(). NOTIFY fully replaces the old notification mechanism.