IEA4XFR — Transfer service

Description

Call IEA4XFR service to release a paused task, and, when possible, give the task immediate control. This service can also, optionally, pause the task under which the transfer request is made. If the caller does not request that its task be paused, the caller's task remains dispatchable.

Environment

The requirements for the caller are:

Environmental factor Requirement
Minimum authorization: Problem state and any PSW key.
Dispatchable unit mode:
  • When supervisor state and PSW key 0: Task or SRB.
  • When problem state, or not PSW key 0: Task.
Cross memory mode:
  • For auth_level=IEA_UNAUTHORIZED: PASN=HASN=SASN
  • For auth_level=IEA_AUTHORIZED: Any PASN, any HASN, any SASN
AMODE: 64-bit
ASC mode: Primary mode.
Interrupt status: Enabled for I/O and external interrupts.
Locks: When supervisor state and PSW key 0 and a current_du_pause_element_token of 16 bytes of binary zeros are specified, the local lock may be held. Otherwise, no locks may be held.
Control parameters: Must be in the primary address space and addressable by the caller.

Programming requirements

Either link the object code of the calling program with the linkable stub routine (IEA4CSS from SYS1.CSSLIB), or load the calling program and then call the service. The high-level language (HLL) definitions for the callable service are:

HLL Definition Description
IEAASM 390 Assembler declarations
IEAC C/390 and C++/390 declarations

Restrictions

When the calling program specifies auth_level=IEA_UNAUTHORIZED, the caller must be in task mode and can only transfer to another task in its home address space. All pause element tokens (PETs) used when auth_level=IEA_UNAUTHORIZED must have been obtained using an authorization level of IEA_UNAUTHORIZED.

Input register information

Before calling the Transfer service, the caller must ensure that the following general purpose registers (GPRs) contain the specified information:
Register
Contents
1
Address of the parameter address list.
13
Address of a 144-byte register save area.

Output register information

When control returns to the caller, the general purpose registers (GPRs) contain:
Register
Contents
0-1
Used as work registers 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 access registers (ARs) contain:
Register
Contents
0-1
Used as work registers by the system
2-14
Unchanged
15
Used as a work register 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

Syntax Description
SYSSTATE AMODE64=YES  
CALL IEA4XFR

 
,(return_code
,auth_level
,current_du_pause_element_token
,updated_pause_element_token
,current_du_release_code
,target_du_pause_element_token
,target_du_release_code)
 

Parameters

The parameters are explained as follows:

return_code
Returned parameter
  • Type: Integer
  • Character Set: N/A
  • Length: 4 bytes

Contains the return code from the transfer service.

,auth_level
Supplied parameter
  • Type: Integer
  • Character Set: N/A
  • Length: 4 bytes

Indicates the maximum authorization level of the pause element being deallocated. The calling program can use constants IEA_UNAUTHORIZED and IEA_AUTHORIZED, defined by IEAASM and IEAC. The following levels are supported:

Variable Value (HEX) Meaning
IEA_UNAUTHORIZED 0 The pause elements must have been allocated with auth_level=_UNAUTHORIZED.
IEA_AUTHORIZED 1 The pause elements must have been allocated with auth_level=_AUTHORIZED.
,current_du_pause_element_token
Supplied parameter
  • Type: Character string
  • Character Set: N/A
  • Length: 16 bytes

Contains a pause element token that identifies the pause element used to pause the current task. When a PET is used on a call to the pause service, it cannot be reused on a second call to pause or as a current_du_pause_element_token on transfer. A new PET is returned to updated_pause_element_token. The new PET now properly defines the pause element and should be used the next time when a pause, transfer, release, or deallocate_pause_element request is using the same pause element.

If the value specified is 16-bytes of binary zeros, the current task will not be paused. The updated_pause_element_token and current_du_release_code are unpredictable.

CAUTION:
Do not specify the same PET for both current_du_pause_element_token and target_pause_element_token.
,updated_pause_element_token
Returned parameter
  • Type: Character string
  • Character Set: N/A
  • Length: 16 bytes

Contains a new pause element token that identifies the pause element originally identified by the PET specified in current_du_pause_element_token. The PET originally specified in current_du_pause_element_token cannot be reused after a successful call to pause or transfer service.

If you set the current_du_pause_element_token to zeros, the contents of updated_pause_element_token are unpredictable.

,current_du_release_code
Returned parameter
  • Type: Character string
  • Character Set: N/A
  • Length: 3 bytes

Contains the release code set by the issuer of the release or transfer service that released the current task from the paused condition.

If you set the current_du_pause_element_token to zero, the contents are unpredictable.

,target_du_pause_element_token
Supplied parameter
  • Type: Character string
  • Character Set: N/A
  • Length: 16 bytes

Contains a pause element token that identifies the pause element to release the target task. Any PET that specifies a pause element not currently being used to pause a task is valid. When a PET for a previously released pause element is used to try to pause a task, the task is not paused; however, the value specified in target_du_release_code will still be returned to the caller of pause or transfer service.

If the task was paused and is now dispatchable, the task will immediately be given control on the current processor.

CAUTION:
Do not use the same PET for both current_du_pause_element_token and target_du_pause_element_token.
,target_du_release_code
Supplied parameter
  • Type: Character string
  • Character Set: N/A
  • Length: 3 bytes

Contains the release code returned to the caller of the pause or transfer service that used (or will use) the same PET to pause a task.

ABEND codes

None.

Return codes

When the service returns control to the resource manager, GPR 15 and the return_code parameter contain a hexadecimal return code.

Return Code in: Decimal (Hex) Equate symbol Meaning and Action
00 (00) IEA_SUCCESS Meaning: Successful completion.

Action: None.

04 (04) IEA_PE_TOKEN_BAD Meaning: Program error. The specified pause element token is not valid. The system rejects the service call.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

08 (08) IEA_PE_TOKEN_STALE Meaning: The specified pause element token is stale; that is, it was valid but has been used on the Pause or Transfer service. This service requires the updated PET returned on Pause or Transfer.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

12 (0C) IEA_DUPLICATE_PAUSE Meaning: The work unit has already been paused using the specified pause element token. The system rejects the service call.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

16 (10) IEA_SLEEP_DISRUPTED Meaning: RTM has terminated the task or SRB; no release is necessary.

Action: None

20 (14) IEA_SPACE_TERMINATING Meaning: The address space that contains the task or SRB is terminating; no release is necessary.

Action: None

24 (18) IEA_LOCK_HELD Meaning: Program error. The caller is holding one or more locks; no locks must be held. The system rejects the service call.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

32 (20) IEA_PE_BAD_STATE Meaning: Program error. The pause element associated with the pause element token specified in the call is not in a valid state. The system rejects the service call.

Action: Check the calling program for a probable coding error, such as attempting to perform a Pause or Transfer using a pause element token that has already been used to Pause or Transfer by another unit of work. Correct the program and rerun it.

36 (24) IEA_UNSUPPORTED_MVS_RELEASE Meaning: Environmental error. The system release does not support this service. The system rejects the service call.

Action: Run the program on a system that supports the service.

40 (28) IEA_INVALID_AUTHCODE Meaning: Program error. The auth_level value specified in the call is not valid. The system rejects the service call.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

44 (2C) IEA_INVALID_MODE Meaning: Program error. The calling program is not in primary ASC mode, which this service requires. The system rejects the service call.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

52 (34) IEA_ALREADY_SUSPENDED Meaning: The pause element was already paused.

Action: Check the calling program for a probable coding error and correct the program and rerun it.

60 (3C) IEA_AUTH_TOKEN Meaning: Program error. The caller specified auth_level=UNAUTHORIZED, but the pause element token was allocated with auth_level=AUTHORIZED. The system rejects the service call.

Action: Program error. The specified pause element token is not valid. The system rejects the service call.

64 (40) IEA_PE_NOT_HOME Meaning: Program error. The caller specified auth_level=UNAUTHORIZED, but the pause element token was for a pause element allocated to another address.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

68 (44) IEA_XFER_TO_SELF Meaning: Program error. The specified current_du_pause_element_token and target_du_pause_element_token are the same.

Action: Check the calling program for a probable coding error. Correct the program and rerun it.

72 (48) IEA_XFER_FAILED Meaning: The transfer failed, and the current_du_pause_element_token is no longer useable.

Action: Reissue the transfer request using the updated_du_pause_element_token. Deallocate the current_du_pause_element_token.

4095 (FFF) IEA_UNEXPECTED_ERROR Meaning: This service routine encountered an unexpected error. The system rejects this service request.

Action: Search problem reporting databases for a fix for the problem. If no fix exists, contact the IBM® Support Center.