REQUEST=CHANGEGUARD option of IARV64

IARV64 REQUEST=CHANGEGUARD requests that a specified amount of a private memory object be changed from the guard area to the usable area or vice versa. To avoid an abend for exceeding the MEMLIMIT, specify the COND=YES parameter.

IARV64 REQUEST=CHANGEQUARD only applies to 64-bit non-2GB private memory objects. If a 64-bit common memory object or a 64-bit shared memory object is specified on the request, a DC2 abend with reason code X'xx0058xx' is issued.

Environment

The requirements for the caller are:

Environmental factor Requirement
Minimum authorization: Problem state and PSW key 8-15.
Dispatchable unit mode: Task or SRB
Cross memory mode: Any PASN, any HASN, any SASN
Note: The problem state caller running in PSW key 8-15 can use CHANGEGUARD only when the primary address space is the home address space.
AMODE: 31- or 64-bit
ASC mode: Primary or access register (AR)
Interrupt status: Enabled for I/O and external interrupts
Locks: A local lock may be held, subject to the following limitation:

When a local lock is held for a CHANGEGUARD request, the lock must be for the address space specified (or is set as the default) by the input ALETVALUE.

Control parameters: Control parameters must be in the primary address space and can reside both below and above the bar.

Programming requirements

None

Restrictions

This macro supports multiple versions. Some keywords are unique to certain versions. See PLISTVER parameter description.

Input register information

Before issuing the IARV64 macro, the caller does not have to place any information into any register unless using it in register notation for a particular parameter, or using it as a base register.

Output register information

When control returns to the caller, the GPRs contain:
Register
Contents
0
Reason code, if GPR 15 is non-zero
1
Used as a work register by the system
2-13
Unchanged
14
Used as a work register by the system
15
Return code
When control returns to the caller, the ARs contain:
Register
Contents
0-1
Used as work registers by the system
2-13
Unchanged
14-15
Used as work registers by the system

Some callers depend on register contents remaining the same before and after issuing a service. If the system changes the contents of registers on which the caller depends, the caller must save them before issuing the service, and restore them after the system returns control.

Performance implications

None

Syntax

The REQUEST=CHANGEGUARD option of the IARV64 macro is written as follows:

Syntax Description
   
   name name: symbol. Begin name in column 1.
   
One or more blanks must precede IARV64.
   
IARV64  
   
One or more blanks must follow IARV64.
   
REQUEST=CHANGEGUARD  
   
  ,CONVERT=TOGUARD  
  ,CONVERT=FROMGUARD  
   
  ,MEMOBJSTART=memobjstart memobjstart: RS-type address or address in register (2) - (12).
   
,CONVERTSTART=convertstart convertstart: RS-type address or address in register (2) - (12).
   
  ,CONVERTSIZE=convertsize convertsize: RS-type address or address in register (2) - (12).
  ,CONVERTSIZE64=convertsize64 convertsize64: RS-type address or address in register (2) - (12).
   
  ,RETCODE=retcode retcode: RS-type address or register (2) - (12).
   
  ,RSNCODE=rsncode rsncode: RS-type address or register (2) - (12).
   
  ,PLISTVER=IMPLIED_VERSION Default: PLISTVER=IMPLIED_VERSION
  ,PLISTVER=MAX  
  ,PLISTVER=0, 1, 2, 3, 4  
   
  ,MF=S Default: MF=S
  ,MF=(L,list addr) list addr: RS-type address or register (1) - (12).
  ,MF=(L,list addr,attr)  
  ,MF=(L,list addr,0D)  
  ,MF=(E,list addr)  

  ,MF=(E,list addr,COMPLETE)

 
   

Parameters

The parameters are explained as follows:

name
An optional symbol, starting in column 1, that is the name on the IARV64 macro invocation. The name must conform to the rules for an ordinary assembler language symbol.
REQUEST=CHANGEGUARD
A required parameter. REQUEST=CHANGEGUARD changes the amount of guard area in the specified memory object. It changes part of the memory object from a guard area to a usable area, or vice versa.

If the CHANGEGUARD service finds a PAGEFIXed area in the area to be converted into a guard area, the caller will be abnormally ended. If a request is made to guard a guard area or to unguard an area that is not guarded a return code 04 will be issued.

If you code COND=YES and there is insufficient storage to satisfy the request, instead of the request being abnormally ended, the request will complete, but a return code will be set to indicate that the request could not be completed successfully.

For a problem state program running in PSW key (8–15), the PSW key of the caller must match the storage key of the memory object and the memory object must be owned by one of the following:
  • The calling task
  • The job step task
  • An ancestor task up through the job step task
,CONVERT=TOGUARD
,CONVERT=FROMGUARD
A required parameter that specifies whether to add or remove guard areas.
,CONVERT=TOGUARD
Convert the specified amount of usable areas to the guard areas. The data in the converted areas will be released. This operation reduces the amount of virtual storage that contributes toward the MEMLIMIT for the address space identified by ALETVALUE. If CONVERTSTART is used then a guard area is created from a usable area starting with the address specified continuing for the number of segments specified by CONVERTSIZE. If CONVERTSTART is not used when GUARDLOC=LOW was specified on the GETSTOR request, the first usable virtual address space in the memory object is increased. If CONVERTSTART is not used when GUARDLOC=HIGH was specified on the GETSTOR request, the last usable virtual address space in the memory object is decreased.
,CONVERT=FROMGUARD
Convert the specified amount of guard area to be usable area. Any previously guarded pages that were converted as part of this request will appear as pages of zeros. Any pages that were already within a usable area will be unchanged. This operation increases the amount of area that contributes toward the MEMLIMIT for the address space designated by ALETVALUE.

If CONVERTSTART is used then a usable area is created from a guard area starting with the address specified continuing for the number of segments specified by CONVERTSIZE. If CONVERTSTART is not used when GUARDLOC=LOW is specified, the first usable virtual address space in the memory object is decreased. If CONVERTSTART is not used when GUARDLOC=HIGH is specified, the last usable virtual address space in the memory object is increased.

,MEMOBJSTART=memobjstart
MEMOBJSTART and CONVERTSTART are a set of mutually exclusive keys. This set is required; only one keyword must be specified. An input parameter that belongs to required a set of mutually exclusive keys. It is the name (RS-type), or address in register (2)-(12), of an eight-byte input that contains the address of the first byte in the memory object.
,CONVERTSTART=convertstart
CONVERSTART and MEMOBJSTART are a set of mutually exclusive keys. This set is required; only one keyword must be specified. An input parameter that belongs to a required set of mutually exclusive keys. CONVERTSTART specifies the address to add a guard area (continuing to the virtual address specified by adding the bytes defined in CONVERTSIZE to CONVERTSTART minus one) when CONVERT(TOGUARD) is requested, and specifies the address to remove from the guard area (continuing to the virtual address space specified by adding the bytes defined by CONVERTSIZE to CONVERTSTART minus one) when CONVERT(FROMGUARD) is requested.

Two contiguous guard areas will be consolidated into one contiguous guard area whenever possible. For example, if the guard area that was defined when the memory object was created is contiguous with a guard area created using CONVERTSTART, then the two guard areas are combined into one.

Specifying MEMOBJSTART will change the guard area only at the beginning or the end of the memory object. Whether the guard area is at the beginning or the end is specified on the IARV64 REQUEST=GETSTOR GUARDLOC=[HIGH|LOW]

IBM® recommends that if CONVERTSTART is used to manage the guard areas within a memory object that all REQUEST=CHANGEGUARD use CONVERTSTART.

To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.

,CONVERTSIZE=convertsize
CONVERTSIZE and CONVERTSIZE64 are a set of mutually exclusive keys. This set is required; only one key must be specified. A fullword integer input parameter, that indicates the number of contiguous megabytes that should be removed from the guard area (FROMGUARD) or that should be changed to being part of the guard area (TOGUARD).

For CONVERT=TOGUARD and MEMOBJSTART, CONVERTSIZE or CONVERTSIZE64 must not be larger than the number of usable pages in the memory object to allow successful completion. For CONVERT=FROMGUARD, CONVERTSIZE must not be larger than the number of remaining pages in the default guard area of the memory object to allow successful completion.

To code: Specify the RS-type address, or address in register (2)-(12), of a fullword field.

,CONVERTSIZE64=convertsize64
CONVERTSIZE64 and CONVERTSIZE are a set of mutually exclusive keys. This set is required; only one key must be specified. A doubleword integer input parameter, that indicates the number of contiguous megabytes that should be removed from the guard area (FROMGUARD) or that should be changed to being part of the guard area (TOGUARD).

For CONVERT=TOGUARD and MEMOBJSTART, CONVERTSIZE or CONVERTSIZE64 must not be larger than the number of usable pages in the memory object to allow successful completion. For CONVERT=FROMGUARD, CONVERTSIZE must not be larger than the number of remaining pages in the default guard area of the memory object to allow successful completion.

To code: Specify the RS-type address, or address in register (2)-(12), of a doubleword field.

,COND=NO
,COND=YES
An optional input parameter that specifies whether the request is unconditional or conditional. When you code COND=YES and there is insufficient storage to satisfy the request, instead of the request being abnormally ended the request will complete but a return code will be set to indicate that the request could not be completed successfully. In all cases the request will be abnormally ended for invalid requests, including violation of environmental restrictions. The default is COND=NO.
,COND=NO
The request is unconditional. The request will be abnormally ended when the request cannot be satisfied.
,COND=YES
The request is conditional. The request will not be abnormally ended when a MEMLIMIT violation occurs.
,ALETVALUE=aletvalue
,ALETVALUE=0
An optional input parameter that indicates the ALET of the address space in which the memory object resides.

The only supported values are 0 (primary) and 2 (home). The ALETVALUE parameter can be used only by callers running in supervisor state or with PSW key 0-7. The default is 0.

To code: Specify the RS-type address, or address in register (2)-(12), of a fullword field.

,RETCODE=retcode
An optional output parameter into which the return code is to be copied from GPR 15.

To code: Specify the RS-type address of a fullword field, or register (2)-(12).

,RSNCODE=rsncode
An optional output parameter into which the reason code is to be copied from GPR 0.

To code: Specify the RS-type address of a fullword field, or register (2)-(12).

,PLISTVER=IMPLIED_VERSION
,PLISTVER=MAX
,PLISTVER=0, 1, 2, 3, 4
An optional input parameter that specifies the version of the macro. PLISTVER determines which parameter list the system generates. PLISTVER is an optional input parameter on all forms of the macro, including the list form. When using PLISTVER, specify it on all macro forms used for a request and with the same value on all of the macro forms. The values are:
  • IMPLIED_VERSION, which is the lowest version that allows all parameters specified on the request to be processed. If you omit the PLISTVER parameter, IMPLIED_VERSION is the default.
  • MAX, if you want the parameter list to be the largest size currently possible. This size might grow from release to release and affect the amount of storage that your program needs.

    If you can tolerate the size change, IBM recommends that you always specify PLISTVER=MAX on the list form of the macro. Specifying MAX ensures that the list-form parameter list is always long enough to hold all the parameters you might specify on the execute form, when both are assembled with the same level of the system. In this way, MAX ensures that the parameter list does not overwrite nearby storage.

  • 0, supports all parameters except those specifically referenced in higher versions.
  • 1, supports both the following parameters and parameters from version 0:
    • CONVERTSIZE64
    • CONVERTSTART
    • GUARDSIZE64
    • V64SHARED
  • IMPLIED_VERSION, which is the lowest version that allows all parameters specified on the request to be processed. If you omit the PLISTVER parameter, IMPLIED_VERSION is the default.
  • MAX, if you want the parameter list to be the largest size currently possible. This size might grow from release to release and affect the amount of storage that your program needs.

    If you can tolerate the size change, IBM recommends that you always specify PLISTVER=MAX on the list form of the macro. Specifying MAX ensures that the list-form parameter list is always long enough to hold all the parameters you might specify on the execute form, when both are assembled with the same level of the system. In this way, MAX ensures that the parameter list does not overwrite nearby storage.

  • 0, supports all parameters except those specifically referenced in higher versions.
  • 1, supports both the following parameters and parameters from version 0:
    • CONVERTSIZE64
    • CONVERTSTART
    • GUARDSIZE64
    • V64SHARED
  • 2, supports both the following parameters and parameters from version 0 and 1:
    • AMOUNTSIZE
    • DETACHFIXED
    • DOAUTHCHECKS
    • DUMP
    • DUMPPRIORITY
    • DUMPPROTOCOL
    • LOCALSYSAREA
    • MEMLIMIT
    • OPTIONVALUE
    • ORDER
    • OWNERASID
    • OWNERCOM
    • TYPE
    • UNLOCKED
    • USERTOKEN
    • V64COMMON
  • 3, supports both the following parameters and parameters from versions 0, 1, 2:
    • ATTRIBUTE
    • OWNERJOBNAME
    • TRACKINFO
  • 4, supports both the following parameter and parameters from versions 0, 1, 2, 3:
    • DMAPAGETABLE
To code: Specify one of the following:
  • IMPLIED_VERSION
  • MAX
  • A decimal value of 0, 1, 2, 3, 4
,MF=S
,MF=(L,list addr)
,MF=(L,list addr,attr)
,MF=(L,list addr,0D)
,MF=(E,list addr)
,MF=(E,list addr,COMPLETE)
An optional input parameter that specifies the macro form.

Use MF=S to specify the standard form of the macro, which builds an inline parameter list and generates the macro invocation to transfer control to the service. MF=S is the default.

Use MF=L to specify the list form of the macro. Use the list form together with the execute form of the macro for applications that require reentrant code. The list form defines an area of storage that the execute form uses to store the parameters. Only the PLISTVER parameter may be coded with the list form of the macro.

Use MF=E to specify the execute form of the macro. Use the execute form together with the list form of the macro for applications that require reentrant code. The execute form of the macro stores the parameters into the storage area defined by the list form, and generates the macro invocation to transfer control to the service.

,list addr
The name of a storage area to contain the parameters. For MF=S and MF=E, this can be an RS-type address or an address in register (1)-(12).
,attr
An optional 1- to 60 character input string that you use to force boundary alignment of the parameter list. Use a value of 0F to force the parameter list to a word boundary, or 0D to force the parameter list to a doubleword boundary. If you do not code attr, the system provides a value of 0D.
,COMPLETE
Specifies that the system is to check for required parameters and supply defaults for omitted optional parameters.