UP

Error logging involves getting error reports from the kernel and from various domains that hold the DEVIO key. There are two ERRORWAIT keys. The KERRORWAIT key (a primary key) waits on an error log message (usually in OBR (an OS term ) format) from the kernel. A similar key exists for domains, DERRORWAIT. In addition there is a DERRORLOG key that logs messages for the DERRORWAIT key to report. One domain will wait on the KERRORWAIT and use the DERRORLOG key to transfer those messages to the DERRORWAIT key. Several domains can wait on the DERRORWAIT key simultaneously each processing them differently (one may write action messages to the console, one may write all messages to a log, and one may send all OBR records to a file destined to be sent to VM for processing by EREP).

The disposition of old messages is restricted by practical matters of implementation and old messages will be forgotten after some lengthy period dependent on the volume of messages as a function of time. A given message will be delivered to all waiting domains and may be delivered to domains not yet waiting if they call the ERRORWAIT key with a sequence number lower than a message previously given to waiting domains (unless a sufficient time has passed and the message is subsequently forgotten - this time should be measured in days for DERRORWAIT and hours for KERRORWAIT given a healthy system).

Preservation of kernel error messages across crashes can be assured by journalling the calls to DERRORLOG made by the domain that holds the KERRORWAIT key.

These keys are located as follows {after the command file FIRST has been run}:

Messages are a maximum of 3000 bytes.

See (p2,kerrorwait) for definition of KERRORWAIT key.

DERRORF(0;sb,m,sb ==> rc;DERRORWAIT,DERRORLOG)

DERRORWAIT(oc,((8,sequence),(2,class mask)) ==> c, ((8,sequence), (2,message class), (ml,message))

DERRORWAIT(kt ==> x'12F')

DERRORLOG(0,(2,message class)(ml,message) ==> c)

DERRORLOG(kt ==> x'22F')