Specifications
Operating System Routines
EXE$INSIOQ, EXE$INSIOQC
EXE$INSIOQ, EXE$INSIOQC
Insert an IRP in a device’s pending-I/O queue and call the driver’s start-I/O
routine if the device is not busy.
Module
SYSQIOREQ
Input
Location Contents
R3 Address of IRP
R5 Address of UCB
UCB$B_FLCK Fork lock index
UCB$L_STS UCB$V_BSY set indicates device is busy, clear
indicates device is idle
UCB$L_IOQFL Address of pending-I/O queue listhead
UCB$W_QLEN Length of pending-I/O queue
Output
Location Contents
R0, R1, R2 Destroyed. Other registers (used by the driver’s
start-I/O routine) are destroyed if the start-I/O
routine is called.
UCB$L_STS UCB$V_BSY set.
UCB$W_QLEN Incremented.
Synchronization
EXE$INSIOQ and EXE$INSIOQC immediately raise to fork IPL and, in a
multiprocessing environment, obtain the corresponding fork lock. As a result,
their callers must not be executing at an IPL higher than fork IPL or hold a
spinlock ranked higher than the fork lock.
EXE$INSIOQ unconditionally releases ownership of the fork lock before returning
control to the caller without possession of the fork lock. If a fork process must
retain possession of the fork lock, it should call EXE$INSIOQC instead.
3–32