IBM Support

OA64875: INCOMPATIBLE RESULTS FROM THE VSMLIST MACRO WHEN NON-EXECUTABLE 31 BIT VIRTUAL STORAGE IS ALLOCATED.

A fix is available

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Incompatible results may result from VSMLIST when
    non-executable
    memory is allocated.  Two subpool descriptors may be
    returned for the same subpool/key/TCB, but the VSMLIST
    invoker might not be set up to process it.
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED: Users of HBB77E0                             *
    ****************************************************************
    * PROBLEM DESCRIPTION: VSMLIST was incompatibly changed at     *
    *                      HBB77C0.                                *
    ****************************************************************
    Instruction execution protection (IEP) was introduced in z/OS
    V2R2 for machines that support it.  VSMLIST was changed
    at V2R4 to report on storage areas that are subject
    to IEP.  When VSMLIST
    SPACE=ALLOC/FREE is invoked for private area storage it is
    possible that two subpool descriptors will be returned for
    the same subpool/key/task, one for the non-IEP allocated
    blocks and a second for the IEP allocated blocks.  This may
    cause an application to fail to process areas of storage if the
    application was designed to only expect a single subpool
    descriptor.
    

Problem conclusion

  • To address this incompatibility, the following new keywords
    are introduced on VSMLIST:  MERGE=YES|NO and ATTRBITS.
    When MERGE=YES is specified or defaulted, VSMLIST returns at
    most one subpool descriptor per subpool/key/task.  When
    ATTRBITS is specified, additional information is included in
    the low order 3 bits and high order bit of the allocated block
    descriptor and size.  Bit 29 of the allocated block address
    contains the IEP status of the block.  Bits 0, 30 and 31
    are set as described under REALPGFMSIZE.
    The VSMLIST invoker is responsible for using VSMD_Area_Mask
    and VSMD_Size_Mask to mask the allocated block address and
    size prior to use.
    
    
    z/OS MVS Programming Reference VOL 4  SA23-1375-xx
    
    | MERGE=YES
    | MERGE=NO
    
    | Indicates whether there should only be one
    | subpool descriptor per
    | subpool/key/task.   When MERGE=NO is specified,
    | if there are some
    | storage blocks associated with a  subpool/key/task  that are
    | subject to Instruction Execution Protection (IEP) and
    | some that are not, then two subpool descriptors will
    | be generated.  VSMDIEP in the IGVVSMD data area will be
    | set in the subpool descriptor
    | associated with the blocks subject to IEP.
    | When MERGE=YES is specified
    | (or defaulted) only one subpool descriptor will be generated.
    | In this case, the invoker can distinguish IEP from
    | non-IEP blocks by specifying ATTRBITS on the VSMLIST
    | invocation and testing bit 29 of the address field of
    | the allocated block descriptor.
    
    
    
    
      REAL31
      ,REAL64
      ,REALPGFMSZ
    | ,ATTRBITS
    | Indicates that the high order bit and the 3 lower order bits
      of the address field of the allocated
      block descriptor should be set to show the value
    | specified on the LOC and EXECUTION parameter of the GETMAIN,
      STORAGE, or CPOOL macro invocation used to obtain
      that storage area. If the storage block was
      allocated using any LOC specification of GETMAIN or STORAGE,
      except for LOC=(*,24), one or more of
      these indicators are turned on. If the storage block
      was allocated using the LOC=(*,24) specification of
     |GETMAIN or STORAGE, the indicators (other than bit 29)
      are turned off.
    
      Note: The asterisk character (*) indicates that any of
      the allowable values for the first suboperand of
      the LOC keyword.
    
      REAL31
      If the storage block is backed in real 31-bit or 64-bit
      storage, the high bit indicator is on (one). If
      the storage block is backed in real 24-bit storage,
      the high bit indicator is off (zero). The low bit
      and second lowest bit indicators are always off.
    
      REAL64
      If the storage block is backed in real 64-bit storage,
      the low bit indicator is on (one) and the high
      bit indicator is off (zero). If the storage block is backed
      in real 31-bit storage, the high bit indicator
      is on (one) and the low bit indicator is off (zero).
      If the storage block is backed in real 24-bit
      storage, the high bit indicators are off (zero).
      The 2nd lowest bit indicator is always off (zero).
    
    
      REALPGFMSZ
      Specifies the following indicators:
      - If the storage block was obtained with the PAGEFRAMESIZE1MB
      parameter, the second lowest
      bit indicator is on (one), the low bit indicator is on (one)
      and the high bit indicator is off (zero).
      - If the storage block is backed in real 64-bit storage but
      was not obtained with the
      PAGEFRAMESIZE1MG parameter, the low bit indicator is on,
      the 2nd lowest bit indicator is
      off (zero) and the high bit indicator is off (zero).
      - If the storage block is backed in real 31-bit storage, the
      high bit indicator is on (one), the low bit
      indicator is off (zero) and the 2nd lowest bit indicator
      is off (zero).
      - If the storage block is backed in real 24-bit storage,
      the high bit indicator, the low bit indicator
      and the second lowest bit indicators are off (zero).
    
    
    
    
    
    | ATTRBITS
    
    | Returns information regarding whether the allocated block
    | is subject to Instruction Execution Protection (IEP)
    | by setting bit 29 in the address field of the allocated
    | block descriptor.   Additionally, bits 0,29-31 of the
    | allocated block size may be set in the future to indicate
    | additional attributes of the allocated block.   The invoker
    | is responsible for clearing bits 0, 29-31 of both
    | the allocated
    | block address and size in order to get the address
    | and size of the block.   The behavior of the REALPGFMSIZE
    | keyword is obtained when ATTRBITS is specified, namely bits
    | 0, 30 and 31 in the allocated block address are set as
    | described under REALPGFMSIZE.
    
     Note:
     | 1. If REAL31, REAL64, REALPGFMSZ and ATTRBITS are not
      specified,
      then none of these indicators are turned
      on.
      2. The REAL31 parameter provides the same function as
      the deprecated REAL parameter, which is still
      supported by VSMLIST.
    
    z/OS Data Areas Volume 4  GA32-0938-xx
    
      VSMD Mapping
    
      3 (3) ADDRESS 1 VSMDKEY STORAGE KEY (BITS 0 - 3)
      3 (3) BITSTRING 1 VSMDFLGS MISCELLANEOUS FLAGS
        .... 1... VSMDOWN X'08' IF ONE, THE SUBPOOL IS OWNED
        .... .1.. VSMDSHR X'04' IF ONE, THE SUBPOOL IS SHARED
        .... ..1. VSMDINV X'02' IF ONE, THE SUBPOOL IS
              INVALID
     |  .... ...1 VSMDIEP X'01' IF ONE, THE STORAGE IS NON
     |                  EXECUTABLE.  Only generated when MERGE=NO
     |                  is specified
      4 (4) ADDRESS 4 VSMDTCBP ADDRESS OF OWNING
    
      ...
    
      0  (0) ADDRESS    4 VSMDAREA      Address of block
     |    (0) BITSTRING
     |     1... ....  VSMDR31  Real 31 indicator
     |    (1) BITSTRING
     |     .... ....
     |    (2) BITSTRING
     |     .... ....
     |    (3) BITSTRING
     |     .... .1..    VSMDAIEP     Non-executable
     |     .... ..1.    VSMDLGPG     1M page
     |     .... ...1    VSMDR64      Real 64
    
    
      z/OS MVS Data Areas Volume 1 GA32-0935-xx
    
      GDA Mapping
    
       Only the following fields are part of the programming
       interface information:
        ...
     |  Gda_VSMLISTMergeAttrBits_Supported
    
    
      424   (1A8)  BITSTRING     1  GDAFLAGS0       Flags
      ...
          .... 1...    GDA_RUCSA_PROCESSED   X'08' Indicates
                              whether the RUCSA keyword was
                              processed yet.  Only off during
                              early IPL/NIP
     |     .... .1..    Gda_VSMLISTMergeAttrBits_Supported  X'04'x
     |                         Indicates
     |                         whether VSMLIST MERGE= and ATTRBITS
     |                         ATTRBITS are available. Note that
     |                         the feature is available POST
                              HBB77E0 GA.
    

Temporary fix

Comments

APAR Information

  • APAR number

    OA64875

  • Reported component name

    VSM - VIRT STOR

  • Reported component ID

    5752SC1CH

  • Reported release

    7E0

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2023-05-15

  • Closed date

    2023-07-26

  • Last modified date

    2023-09-01

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

    UJ93310

Modules/Macros

  • BPXPRFVE CSVFORKM IEAIPL04 IEWLFORK IGVSLIS1 IGVSLIST IGVVSMD
    IHAGDA   VSMLIST
    

Publications Referenced
SA231375xxGA320938xxGA320935xx  

Fix information

  • Fixed component name

    VSM - VIRT STOR

  • Fixed component ID

    5752SC1CH

Applicable component levels

  • R7E0 PSY UJ93310

       UP23/08/16 P F308

Fix is available

  • Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.

[{"Business Unit":{"code":"BU011","label":"Systems - zSystems software"},"Product":{"code":"SG19O"},"Platform":[{"code":"PF054","label":"z Systems"}],"Version":"7E0"}]

Document Information

Modified date:
01 September 2023