WM Kernel Revision History

This list describes the major changes, additions and bug fixes made to the WM Kernel between released versions.

Version 1.12 (February 25, 1998)

New Features: opendir, readdir, rewinddir and closedir function for accessing host file system directories have been added.

Host compatible functions have been added to access I/O space.

A new host environment variable MIPS_OPTIONS has been added. The variable can be used to turn verbose mode on or off. When verbose mode is turned off, various system diagnostic messages are inhibited.

The getModuleInformation function returns information about the modules installed on the board from which the call is made.

The function returns the number of entries in a queue.

Little endian versions of the IO space access functions have been added.

Run Time Library Changes: If the host server returned an unsupport socket domain type, then the library routines aborted the task. The functions have been modified to return -1 and set errno to ENOSYS.

The names of the function for accessing pci configuration space have been changed to be compatible with the host library. Download function arguments have been changed from values to pointers to the values. Results are now returned via a pointer parameter instead of as the function value.

The values for the IPC_CREAT and IPC_EXCL were changed in the include/sys/ipc.h file.

Fixed in Release: Only one MIPS module can handle global interrupts under the WM Kernel. Previous kernels allowed applications on multiple processors to install global interrupt handlers. The kernel has been changed to only allow applications on one processor to install the global interrupt handlers. Ownership is assigned on a first come basis.

In earlier versions, each kernel cleared and reinitialized the global interrupt enable flags as part of kernel initialization. When a second kernel started, it was disabled if an application was running and had installed a global interrupt handler.

A global interrupt which occurred during a process schedule could result in a kernel crash.

Version 1.8 (December 12, 1997)

New Features: Total time for each interrupt handler was added to the profiler output.

A parameter was added to the openUpload function which specifies the number of buffers in the host shared memory area. When an upload has been completed, the semaphone is used to notify the application. By examining the value of the semaphone, the host server can prevent overflow of the buffer.

Versions of the kernel now exist for the new modules. The standard TDM version of the kernel uses the same kernel file for the PM4700A as the PM4600 and PM4700 modules. The PM5000 requires different kernel files. The pcisrv program detects the type of module and loads the correct kernel.

The kernel files for the PM5000 are:

    optimized: pci5000f.s3

    standard: pci5000r.s3

The alternate TDM versions of the kernel require different kernel files for the PM4700A.

    4700A optimized: pci4700ao.s3

    4700A standard: pci4700ad.s3

    5000 optimized: pci5000ao.s3

    5000 standard: pci5000ad.s3

Parameters and data structure for the alternate TDM driver have changed.

Fixed in Release: Memory allocated from the heap was word aligned instead of double word aligned. This could cause an address error if a value of type double was referenced in the allocated memory. Values of type double must be aligned on 8 byte boundries.

Version 1.1 (June 25, 1997)

New Features: Host Version Information has been added which returns the version of the host VME driver, host server program, type of host operating system and host operating system version.
Fixed in Release: If a signal was left pending because it was masked when a process terminated, the signal would get delivered during process cleanup because the process mask was cleared but the pending signal was not cleared. 

A random value was returned from the raise function because the signal being sent was delivered to the task before the return value was set. 

The sem_close function freed the memory which contained the handle for the semaphore but did not remove the handle so if the task used the semaphore pointer after the close it might still point to the correct handle value. 

When the kernel aborts a process it sends an abort information request to the server to print a register dump.  The response to the request was not handled correctly causing the process to get aborted a second time. 

The library function sched_getschuler uses a system call with an optional pointer parameter with a NULL value.  The system call aborted the process when it shouldn't have. 

The following prototypes were in stdio.h and should have been in unistd.h: 
    close, open, dup, read, write 
The prototypes were added to unistd.h but also have been left in stdio.h so existing programs will not be affected. 

Version 0.36 (May 16, 1997)

New Features: Kernel functions and corresponding library functions were added for clearing and invalidating the cache. A library function was added for the existing kernel flush function. 

ushell can now accept standard module specifications such as a run string parameter. Example: 'pci1c'. 
 
The buffer size used to transfer data between the kernel and the host server was increased to 16384 bytes.  Longer read and write requests are made as repeat requests to the server. 

Fixed in Release: There is an errata for the 4600 processor which involves cache flushing. Under certain conditions, the cache can fail to be flushed correctly. Testing has not been able to reproduce this when running applications under the WM Kernel. A simple two instruction patch was added to the cache flush function in the kernel to prevent the particular sequence of events which can result in the failure. 

A parameter was added to the ulimit function for compatibility.  The parameter specifies the function to be performed by ulimit.  The include file ulimit.h was added for the prototype and defines for the parameter. 

The kernel cache flush function ignored the starting address and length of the flush request for 4600 processors. The result was that the whole cache was flushed. The parameters allow the specification of only a part of the cache to be flushed. 

The prototype for tell and truncate were missing from unistd.h.

Version 0.35

New Features: getopt is a new function which has been added to the WM Kernel Application Library. It is a utility function for parsing program run string options. It is compatible with getopt on Sun Release 4.1. 

The maximum size command the root.s3 program can accept via the socket it reads from was increased from 256 bytes to 2000 bytes. 

The sysClearProcessCache system call was changed to allow task id < 0 to indicate the current task. 

 

Version 0.34
 

Fixed in Release: The interrupt handler for the timer interrupt for the PCI4600 version of the kernel was resetting both the count register and the compare register instead of only the compare register. This allowed the timer to drift a number of clock ticks each time the interrupt handler was entered. The handler has been changed to only modify the compare register. 

A bug was fixed in the global segment table code. The bug resulted in the kernel hanging if more then 10 global segments were allocated. 

The prototype for isPciDeviceName was missing from pci.h.

Version 0.33 (November 26, 1996)
 

New Features: The timer function sets up a timer which will send the SIGALRM signal to the user task continually until canceled.  The rate will be independent of how long the handler for the signal takes to execute. 
Fixed in Release: Task switching did not save and restore the full set of 4600 floating point registers for programs compiled to use the MIPS level 3 instruction set. 

The interrupt handler for the real time clock allowed the clock to drift. 
VME Board Access 

Boards which did not have a leading digit of 1 for their VME address could not be accessed. 

The com ports on PCI module boards are independent.  Each board that has a com port accesses it as COM0:.  The kernel would only allow one board to open COM0:.