REQUEST=DETACH option of IARV64

REQUEST=DETACH allows you to free one or more memory objects.

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: that problem state caller running in PSW key 8-15 can use GETSTOR/DETACH only when primary = home.
AMODE: 31- or 64-bit
ASC mode: Primary or access register (AR)
Interrupt status: Enabled for I/O and external interrupts
Locks: No locks may be held.
Control parameters: Control parameters must be in the primary address space.

Programming requirements

None.

Restrictions

No data space ALETs can be specified.

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=DETACH 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=DETACH  
   
  ,MATCH=SINGLE Default: MATCH=SINGLE
  ,MATCH=USERTOKEN  
   
  ,MEMOBJSTART=memobjstart memobjstart: RS-type address or address in register (2) - (12).
   
  ,USERTKN=usertkn usertkn: RS-type address or address in register (2) - (12).
  ,USERTKN=NO_USERTKN Default: USERTKN=NO_USERTKN
   
  ,USERTKN=usertkn usertkn: RS-type address or address in register (2) - (12).
   
  ,OWNER=YES Default: OWNER=YES
   
  ,TTOKEN=ttoken ttoken: RS-type address or address in register (2) - (12).
  ,TTOKEN=NO_TTOKEN Default: TTOKEN=NO_TTOKEN
   
  ,COND=NO Default: COND=NO
  ,COND=YES  
   
  ,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  
   
  ,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=DETACH
A required parameter. REQUEST=DETACH frees one or more memory objects. Note that problem state programs running in PSW key (8-15) can use this function only when primary = home.

A memory object can be affected by DETACH when MATCH=SINGLE USERTKN=NO_USERTKN is specified, even when the memory object has an associated user token. Other invocations of DETACH will affect memory objects only when a matching user token is passed.

All I/O into each memory object specified must be complete before the DETACH is requested. If the DETACH service finds a PAGEFIXed page in the memory object, the memory object will be not be freed, but any prior pages will have indeterminate data and the caller will be abnormally ended.

,MATCH=SINGLE
,MATCH=USERTOKEN
An optional parameter that indicates which memory objects are to be freed. The default is MATCH=SINGLE.
,MATCH=SINGLE
specifies that the input contains MEMOBJSTART for a single memory object.
,MATCH=USERTOKEN
specifies that the input contains a user token that was passed to GETSTOR. Note that memory objects not associated with a user token are not affected. (Such objects would have to have been created using GETSTOR NOUSERTKN). If you code MATCH=USERTOKEN, COND=YES and no matching user token exists, the system returns a return code instead of abending the caller. All memory objects associated with this user token are to be freed.

If the system encounters an error in processing a qualifying memory object (e.g. unexpected pagefixed page), the processing ends. The system does not process that page or any further pages or memory objects and abends the caller.

,MEMOBJSTART=memobjstart
When MATCH=SINGLE is specified, a required input parameter that contains the address of the first byte in the memory object.

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

,USERTKN=usertkn
,USERTKN=NO_USERTKN
When MATCH=SINGLE is specified, an optional input parameter that identifies the user token to uniquely identify the memory object, as previously passed to GETSTOR.

When the memory object is not associated with the input token value, it will not be processed. The default is NO_USERTKN.

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

,USERTKN=usertkn
When MATCH=USERTOKEN is specified, a required input parameter that identifies the user token.

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

,OWNER=YES
An optional parameter that specifies whether the owning task still exists. The default is OWNER=YES.
,OWNER=YES
The owning task must still exist (it may be in termination however). The TTOKEN is provided or defaulted for the owning task.
,TTOKEN=ttoken
,TTOKEN=NO_TTOKEN
When OWNER=YES is specified, an optional input parameter that identifies the task that owns the memory object. The TTOKEN is returned by the TCBTOKEN macro.

If TTOKEN is not specified, the task issuing the DETACH request must be the owner of the memory object.

When the TTOKEN parameter is used by problem state programs with PSW key 8-15, the target task must represent the calling task OR the jobstep task for the calling task OR the mother task. The mother task may not be given however when the calling task is itself a jobstep task.

If the TTOKEN parameter is not specified, and the caller is a TCB, the currently dispatched task must be the owner of the memory object. When OWNER YES is specified by an SRB, the caller will be abnormally ended if the TTOKEN value is not supplied. The default is NO_TTOKEN.

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

,COND=NO
,COND=YES
An optional parameter that specifies whether the request is unconditional or conditional. 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. A REQUEST=DETACH, MATCH=USERTOKEN which does not select any memory objects will not be abnormally ended.
,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
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, if you use the currently available parameters.
  • 1, supports both the following parameters and parameters from version 0:
    • CONVERTSIZE64
    • CONVERTSTART
    • GUARDSIZE64
To code: Specify one of the following:
  • IMPLIED_VERSION
  • MAX
  • A decimal value of 0 or 1
,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.