Restrictions on MVS Services Available to DSPs and Installation Exit Routines

All MVS™ control program services, with the following exceptions, are available to user-written DSPs. User exits run under a DSP.

Do not use MVS macros that either implicitly or explicitly use the MVS WAIT function, except under the control of a JES3 subtask (see the IATXCSF macro). These macros include:
ATTACH         FIND        PURGE
BLDL           LINK        WAIT
CLOSE          LOAD        WTO
DOM            LOCATE      WTOR
DYNALLOC       OPEN        XCTL

DSPs should not use these macros. Use of these macros disrupts the flow of processing on the global main and can cause a degradation in system performance by possibly causing JES3 itself to wait.The queued access methods, QSAM and QISAM, use these macros and, therefore, should not be invoked.

If your program needs to use one of the above macros, you must first establish a JES3 subtask environment in which to use the macro. To do so, include the IATXCSF macro in your program. IATXCSFpasses control to a JES3 subtask.

Do not use the MVS macros LOAD, DELETE, STIMER, and PCLINK because they interfere with JES3's processing procedures. Use the ALOAD and ADELETE macros instead of LOAD and DELETE, and use the ATIME macro instead of STIMER. Use the MVS ESTAE and SETFRR macros only where absolutely necessary. Instead, use the JESTAE macro.

Under certain restrictions, your module may issue a DYNALLOC macro. First, be sure you issue the IATXCSF macro before the DYNALLOC macro to set up the JES3 subtask. Secondly, use the DYNALLOC macro only for jointly-managed or MVS-managed devices, not JES3-managed devices. Modules that run in a C/I FSS address space follow the same rules for using DYNALLOC as an authorized problem program.

If your DSP uses an MVS function that could cause an abnormal termination, be sure that you set up a JESTAE recovery environment.The purpose of the recovery environment is to insure that a failing DSP does not also bring down the JES3 primary task (IATNUC).

Your recovery routine should intercept the ABEND and pass control to a retry routine to retry the DSP. The retry routine should then decide what should happen to the DSP. Generally, there will be three choices of action:
  • Let the DSP continue processing
  • Reinitialize the DSP to handle the next request
  • End the DSP

The following example illustrates the use of the IATXCSF macro, which is described in IntroductionThe code to be executed under control of the subtask begins at label DRCLSBTK.

IATXCSF Macro Example

          TM    DCBOFLGS,DCBOFOPN          Is DCB open?
          BC    ALLOFF,DRTTB347            No, avoid closing it
          IATXCSF ENTER=DRCLSBTK           Call subtask to close it
          .
          .
          .
* THE FOLLOWING CODE EXECUTES
* AS A SUBTASK OF JES3
DRCLSBTK  DS    0H                         Subtask to close DCB
          LR    R4,R14                     Save return address
          CLOSE (ICTPRDCB),MF=(E,ICTMFLOP)  Issue MVS CLOSE macro
          LR    R14,R4                     Restore return address
          SR    R15,R15                    Clear return code
          BR    R14                        Return to caller