in which the block resides. In general, an IOBLOK is queued from the
control block of the highest level I/O unit (taken from device up to
channel) in the subchannel path tkat is not available. Once the I/O operation is started, the IOBLOK is chained from the active IOBLOK pointer (RDEVAIOB) in the real device control block. Flags in the IOBLOK status fields may also indicate that a unit check has occurred,
that a sense is in progress, or that a fatal I/O error (unrecoverable)
has been recognized by error recovery procedures. After I/O control
releases control of the IOBLOK, it is stacked on the queue of IOBLOKS and CPEXBLOKs anchored at DMKDSPRQ in the dispatcher and control is
passed to the second-level interruption handler whose address is stored
in I/O INTERRUPTIONS I/O interruptions are either synchronous or asynchronous. Asynchronous
interruptions indicate the change in status of an I/O unit from the
not-ready to ready state or busy to not-busy state. In eitneL if the affected component has any pending requests queued fro. its control
block, they are restarted, and whether or not the given interrupt is
processed any further depends upon the status of the interrupting
component. Channel-available and control-unit-end interruptions restart
the interrupting component. An asynchronous device end is passed to the
user if the device is dedicated; otherwise, the device is restarted.
An interruption is considered to be synchronous
device has a nonzero pointer to an active IOBLOK. following processing occurs:
if the interrupting
In this case, the If a unit check has occurred, a sense is scheduled, and when the
sense is completed, the appropriate ERP is called. If an ERP is currently in control of the task (indicated by a flag in
the IOBLOK), return the IOBLOK to the appropriate ERP. If the operation is incomplete (for example, channel end is received
without device end), the IOBLOK is copied and the copy is stacked but
the original IOBLOK remains attached to RDEVAIOB to receive the final
interrupt; then, the control unit and the channel is restarted. If the operation is complete (that is, the device is available), the IOBLOK is detached fro. the device and stacked, and the device,
control unit and channel are restarted.
The restart operation usually dequeues the next IOBLOK that is queued
to the restarted component and queues it to the next higher component in
the subchannel path. When the channel level is reached, a SIO is issued
and exit is taken to the dispatcher after handling any nonzero condition
codes as previously described. VIRTUAL I/O INTERRUPTIONS When an I/O interruption is received, the IOBLOK is stacked for
dispatching and control is passed to the address specified in the IOBIRA (interrupt return address) field. For operations requested by DftKVIOEl, the return address is DMKVIOIN (virtual interrupt return address). When DMKVIOIN receives control fro. the dispatcher, it loads the virtual
address of the unit with which the interruption is associated from the IOBLOK and calls D!KSCNVU to locate the virtual device control blocks. 1-90 IBM VM/370 System Logic and Problem Deteraination--VQluae 1
D8KVIOIN then tests the IOBLOK status field to deter.ine the cause for
the interruption. If the block has been unstacked because of an
interruption, the field is zero. If the operation was not started, it
contains the condition code from the real SIO. Note: The VIRA should not see a real condition code 2 as the result of a 510, since channel-busy conditions are detected and reflected before any
real I/O operation is attempted.
A condition code of 3 is reflected virtual .achine and exit is taken
to the to the dispatcher. For a condition code of 1, the CSi status
field in the IOBLOK is examined to determine the cause for the CSi stored condition. The status is reflected to the virtual .achine and
various components of the virtual configuration may be freed, if the
status so indicates. For example, if the CSi status indicated both
channel end and device end, the operation was im.ediate and has completed. Thus, the CCi string (real) may be released and all virtual components marked available.
The CSi status returned for a virtual interruption must be tested in
the same manner, with the additional requirement that the status be
saved in the affected virtual I/O control blocks and that the CSt be
saved in the VDEVCSi field for the device causing the interruption. If
the unit check bit is on in the status field, the sense information saved in the associated IOERBLOK (pointed to by the IOBLOK) must be
retained so that a sense initiated by the virtual machine receives the
proper information.
In any case, when an interruption is received for a virtual device, a bit in the interruption mask, VCUDVINT, for the device;s control unit is
set to 1. The bit that is set is the one corresponding to the relative
address of the interrupting device on the control unit. For example, if
device 235 interrupts, the fifth bit in the VCUDVIRT mask in the VCUBLCK for control unit 30 on channel 2 is flagged. Similarly, the bit in the YCBCUINT in the affected YCBBLOK is also set; in this case, bit 3 in YCBBLOK for channel 2. If the interruption is a channel class interrupt (PCI or CE), the address of the interrupting unit (235) is stored in the VCBCEDEV field in the VCBBLOK. The final interruption flag is set in
the VMPEND field in the VMBLOK for the interrupted virtual .achine; the
bit set corresponds to the address of the interrupting channel. The
next time, the virtual machine is dispatched and becomes enabled for I/O. SCHEDULING I/O REQUESTS A task that requests an I/O operation must specify the device on which
the operation is to take place and must provide an IOBLOK that describes
the operation. Upon entry to DMKIOS, register 10 must point to the IOBLOK. The IOBLOK must contain at least a pointer to the channel
program to be started in IOBCAi and the address to which the dispatcher
is to pass control in IOBIRI. In addition, the flags and status fields
should be set to zero a If the operation is a control program function such as for spooling or paging, the entry point DftKIOSQR is
called. If the requester is the I/O executive (DftKVIOEX) attempting to start a virtual machine operation, the entry point DftKIOSQV is called and some additional housekeeping is done. In either
case, an attempt is made to find an available subchannel path from the
device to its control unit and channel. If an I/O unit in the path is
busy or scheduled, the IOBLOK for the request is queued to the control
block of the I/O unit. CP Iutroduction 1-91
Previous Page Next Page