REQUEST=PAGEFIX allows you to fix physical pages within one or more nonshared memory objects. It makes virtual storage areas, above the bar, reside in central storage (also called real storage) and ineligible for page-out while the address space specified by the ALETVALUE is swapped into central storage.
The requirements for the caller are:
Environmental factor | Requirement |
---|---|
Minimum authorization: | Can be used only by callers running in supervisor state or with PSW key 0-7. |
Dispatchable unit mode: | Task or SRB |
Cross memory mode: | Any PASN, any HASN, any SASN |
AMODE: | 31- or 64-bit |
ASC mode: | Primary or access register (AR) |
Interrupt status: | Enabled for I/O and external interrupts. Enabled for I/O and external interrupts. Enabled or disabled for 64-bit common memory objects allocated with TYPE=DREF, or TYPE=PAGEABLE and the storage is in the first reference state. |
Locks: | A local lock may be held. |
Control parameters: | Control parameters must be in the primary address space and can reside both above and below the bar. |
None
Pages that are fixed must be unfixed before the task owning the memory object terminates. Otherwise the address space where the memory object resides is terminated.
This macro supports multiple versions. Some keywords are unique to certain versions. See PLISTVER parameter description.
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.
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.
None
The REQUEST=PAGEFIX 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=PAGEFIX | |
,LONG=YES | Default: LONG=YES |
,LONG=NO | |
,RANGLIST=ranglist | ranglist: RS-type address or address in register (2) - (12). |
,ALETVALUE=aletvalue | aletvalue: RS-type address or address in register (2) - (12). |
,ALETVALUE=0 | Default: ALETVALUE=0 |
,NUMRANGE=numrange | numrange: RS-type address or address in register (2) - (12). |
,NUMRANGE=1 | Default: NUMRANGE=1 |
,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, 2, 3, 4, 5 | |
,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) |
|
A required parameter. REQUEST=PAGEFIX specifies that the data within the specified ranges be pagefixed.
PAGEFIX can only be requested for 64-bit private memory objects that are created using GETSTOR CONTROL=AUTH, and 64-bit common storage memory objects. PAGEFIX cannot be requested for 64-bit shared memory objects. 64-bit private or common storage memory objects backed by fixed 1 MB-page frames, or 64-bit private memory objects backed by fixed 2GB-page frames will be ignored.
PAGEFIX cannot be requested for a private memory object that was created using GETSTOR CONTROL=UNAUTH.
PAGEFIX cannot be requested for guard areas.
PAGEFIX specifies that the virtual storage areas are to reside in real storage and are ineligible for page-out while the address space is swapped in. This parameter does not prevent pages from being paged out when the entire address space is swapped out of real storage.
PAGEFIXed pages may be backed anywhere in real storage.
A page is considered PAGEFIXed until the number of valid PAGEUNFIXes issued for the page is equal to the number of valid PAGEFIXes previously issued for that page.
While a page is PAGEFIXed, the memory object, allocated with DETACHFIXED=NO, cannot be freed; if the system finds a PAGEFIXed area in the memory object, it abnormally ends the DETACH caller.
While a page is PAGEFIXed, the memory object allocated with DETACHFIXED=YES, can be freed successfully.
I/O can be done only to pages of memory objects that have been PAGEFIXed.
All I/O into virtual storage above the bar for an address space must be associated with the address space, that is, the ASID in the IOSB must be the ASID for the address space which owns the memory object. This is required so that I/O for the address space will be automatically purged during MEMTERM processing of the address space that owns the virtual storage above the bar or during I/O quiesce processing in preparation for swapping out the address space. The I/O must also be associated with the task which owns the memory object or one of its siblings. This is required so that all I/O is terminated and cleanup performed before the memory object is detached during task termination.
A resource manager must be provided to handle outstanding I/O when the task owning the memory object terminates. The resource manager must run before RSM's task termination resource manager and must ensure that all I/O into the virtual storage above the bar is complete and any fixed storage is unfixed. This is required for both normal and abnormal task termination. For example, this resource manager will be invoked through ABEND of the task termination if any virtual storage above the bar owned by the task is PAGEFIXED. This resource manager must ensure that all I/O into the memory object is complete. This is required for both normal and abnormal task termination.
PAGEFIX can be used only by callers running in supervisor state or with PSW key 0-7.
The address specified must be within a memory object returned by GETSTOR CONTROL=AUTH or GETCOMMON.
The value must always be on a physical 4 KB-page boundary.The number of 4 KB-pages specified starting with the specified VSA must lie within a single memory object.
The length of this field is 8 bytes.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
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.
To code: Specify the RS-type address, or address in register (2)-(12), of a fullword field.
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
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.
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.