VM

Follow these instructions for VM.

Points at which QMF calls the governor

Function calls to the governor exit routine either precede or follow a specific type of QMF activity. For example, QMF passes control to the governor exit before and after running a command.

When it calls the governor, QMF always branches to an entry point named DSQUnGVx. Therefore, you cannot use the entry point to determine the type of exit. Use instead the control-block field GOVFUNCT. Its value is a positive integer that identifies the type of exit.

What happens upon entry to the governor exit routine

QMF calls the governor exit routine by branching to the address of the entry point DSQUnGV2.

Branching to the entry point

QMF calls the governor exit routine by branching to the address of the entry point DSQUnGV2. Upon entry to the governor exit routine:

Establishing addressability for function calls

Because QMF always branches to an entry point named DSQUnGV2 when it calls the governor, you cannot use these entry points to determine the type of function call; instead, use the GOVFUNCT field of the DXEGOVA control block.

In the IBM-supplied governor exit routine, GOVFUNCT contains a character value that identifies the type of function call. This character value, in turn, equates to a 1-byte binary integer from 1 to 10. For example, on a function call for the start of a QMF session, the value of GOVFUNCT is GOVINIT, which equates to a numeric value of X'1'.

Both character and numeric values for each type of function call are shown below.

Figure 236. Character and numeric values for the GOVFUNCT field of DXEGOVA
GOVINIT  EQU   1             -------- INITIALIZATION OF SESSION
GOVTERM  EQU   2             -------- TERMINATION OF SESSION
GOVSCMD  EQU   3             -------- START COMMAND
GOVECMD  EQU   4             -------- END COMMAND
GOVCONN  EQU   5             -------- CONNECT COMMAND
GOVSDBAS EQU   6             -------- START DATA BASE
GOVEDBAS EQU   7             -------- END DATA BASE
GOVSACTV EQU   8             -------- SUSPEND QMF ACTIVITY
GOVRACTV EQU   9             -------- RESUME QMF ACTIVITY
GOVABEND EQU   10            -------- QMF ABEND OPERATION

To improve performance in your own exit routine, you can follow the convention the IBM-supplied governor uses, and equate the values of GOVFUNCT with binary numbers by using a branch table. QMF uses the branch table to find the addresses to branch to for each type of function call.

Figure 237 shows an example of some code that identifies branch addresses for the IBM-supplied governor.

Figure 237. Identifying the type of function call and branching to the appropriate address
XR    R07,R07               ZERO REGISTER 7
         IC    R07,GOVFUNCT          IDENTIFY EXIT TYPE
         SLL   R07,2                 DETERMINE BRANCH TABLE OFFSET
         LA    R15,FUNBTAB(R07)      GET BRANCH TABLE ADDRESS
         L     R15,0(R15)            GET BRANCHING ADDRESS
         BALR  R14,R15               BRANCH TO THE APPROPRIATE CODE
            . . .
            . . .
            . . .
            . . .
FUNBTAB  DS    0F
         DC    A(BYPASS)          VALUE "0"  - UNUSED
         DC    A(INIT)            VALUE "1"  - QMF INITIALIZATION
            . . .
            . . .
            . . .
         DC    A(SUSPEND)         VALUE "10" - QMF ABEND IN PROCESS

Because the governor program runs on the same level as the main QMF program, ensure you preserve the QMF environment at every function call. Use the standard assembler RETURN statement to return control to QMF after every call.

[ Previous Page | Next Page | Contents | Index ]