MVS SP2.2.0 introduced "SWA above the line", taking 3 byte SWA block 
pointers and turning them into 20 bit tokens that could be then translated 
into a 31 bit address using services provided by the MVS Scheduler 
component.  The algorithm has not been changed in the last 30 years. It 
was not difficult to skip the provided services and "roll your own" 
translation by testing the low order bit to determine if the 3 bytes were 
an address or a token and then locate the block yourself, referencing data 
areas.  You need to stop doing this. Instead, use the IEFQMREC service or 
SWAREQ ReadLocate (RL), or obtain the information in some other supported 
way such as LISTDSI.

The existing IEFQMREQ macro and the SWAREQ RL service, particularly the 
UNAUTH=YES option, are the best options for translating SWA tokens to 
addresses within an address space.  SWAREQ RL UNAUTH=YES supports SRB and 
cross memory execution (although all storage accesses are done in the 
primary address space.)  See: z/OS: MVS Programming: Authorized Assembler 
Services Reference.

REXX EXECs that attempt to use the STORAGE function to find SWA blocks to 
collect information may be able to use the LISTDSI function to get that 
information instead, as it allows either the DD name or the data set name 
to be used as input and returns information about the data set and DD. See 
LISTDSI documentation in :  z/OS TSO/E REXX Reference and z/OS TSO/E 
CLISTs.

Peter Relson
z/OS Core Technology Design

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to