Programming Interface Information:
This information is NOT intended to be used as Programming Interfaces of z/VM. |
FRMTE
Control Block Contents
FRMTE DSECT
Cross Reference (Contains links to field and bit definitions)
FRMTE Prolog
NAME : HCPFRMTE DESCRIPTION: FRAME TABLE ENTRY DSECT : FRMTE FUNCTION : A FRAME TABLE ENTRY DESCRIBES ONE 4K ALIGNED BLOCK OF REAL STORAGE. LOCATED BY : 64-bit address PFXFTBLG + (Host Real address of frame / 4096 * 32) VMDGFR1ST User owned frame forward anchor VMDGFRLST User owned frame backward anchor FRMFPNTG Field of HCPFRMTE for chained frames FRMBPNTG Field of HCPFRMTE for chained frames FRMFRNXTG Free storage FRMTE forward pointer SUBGANCH SUBBK FRMTE list anchor PF2FTOFTE host real address of FRMTE describing frame used for first page of Frame Table. PF2STOFTE host real address of FRMTE describing frame used for first page of SXS page management table. FRMTENXT host real address of FRMTE describing next frame used for frame table or SXS page management table. Used for PF2FTOFTE and PF2STOFTE chains. CREATED BY : HCPISV Entries allocated and initialize at ipl from storage below the 8E line in the System Execution Address Space. DELETED BY : NONE NOTES : THE FRMTES ARE CONTAINED IN THE FRAME TABLE. Space for the frame table is allocated at system initialization. THE SPACE FOR THE FRAME TABLE IS NEVER RELEASED. The frame table is contiguous in the System Execution Space (SXS), but NOT in real storage. Algorithms that convert between FRMTE address and real frame address must use the SXS address of the FRMTE. Serialized : There are rules that dictate the order in which serialization can be obtained on PTEs, FRMTEs, and SXSTEs. See HCPPGSER MACRO for more information. The following serialization discussion generally applies to FRMTEs with pageable FRMCSB0 frame codes (that is, frames where the FRMUSER x'80' bit is on in FRMCSB7G). Such FRMTEs are referred to as "pageable FRMTEs" in this discussion. Note that this includes most available frames (frames which have the FRMAVAIL bit set in FRMCSB7G, whether they are actually on the global available list, one of the processor local available lists, or in some other "in transit" state), since the previous use frame codes are not changed while a frame is available. Pageable FRMTEs are serialized primarily by the four FRMTE serialization bits: FRMAVAIL, FRMTRANS, FRMRELSE, and FRMSTEAL, all in FRMSTATEG FRMCSB7G. These four bits are essentially mutually exclusive spin locks. Under normal circumstances, they may be turned on *ONLY* one at a time and *ONLY* by a word concurrent interlocked instruction such as CS or CDS. That is, only *ONE* of the four bits is allowed to be on at any given time. If any one of the four serialization bits is on, none of the other three serialization bits may be turned on until it goes off, and no changes to the rest of the FRMTE are allowed by any task other than the one that currently "owns" the FRMTE (that is, the task that turned the current serialization bit on). Note while the four FRMTE serialization bits are somewhat similar to normal spin locks, they are unique in that the usual "no loss of control while a spin lock is held" rule does *NOT* necessarily apply. The reason for this exception is that FRMTEs may need to be left in these serialized states for long periods of time, so spin loops attempting to obtain pageable FRMTE serialization must only spin if the current state is known to be a "short term" state, and must take into consideration possible status changes in the remainder of FRMSTATEG (and possibly FRMPTEG as well). Generally, only word concurrent interlocked instructions should be used to manipulate pageable FRMTEs' FRMCSB7G. However, for performance reasons, there are special cases where a task which currently holds exclusive ownership of a FRMTE (by having turned one of the FRMCSB7G serialization bits on via CS or CDS) may release FRMTE serialization using a non-interlocked byte concurrent instruction, such as ST or NI. This technique is *ABSOLUTELY* dependent on mutual exclusivity of the four FRMCSB7G serialization bits, and use of word concurrent interlocked instructions in setting them on. A FRMCSB7G serialization bit may *ONLY* be turned off (regardless whether the instruction used is interlocked or not) if it is known without any doubt to be on and held by the running task. Turning an FRMCSB7G serialization bit which is already zero off *again* with a non-interlocked instruction such as NI "just in case" or to combine code paths is a dangerous exposure to lost FRMCSB7G updates. Occasionally, FRMTEs which are not on any queue or associated with any active PTE are said to be under "task local" serialization. In this case, the assumption is that no other task can get the address of the FRMTE, since no other control structures point to it. However, it must *ALWAYS* be kept in mind that the frame table scan function in HCPALF can find *ANY* FRMTE, regardless of state, since it processes the entire frame table sequentially, looking for pageable FRMTEs which are in a "stealable" state. Therefore, this "task local" serialization technique is only valid for non-pageable FRMTEs, where FRMCSB7G FRMUSER (x'80') is off. Also, it should be kept in mind that frame table scan approaches frame and page serialization backwards from most other code, in that it attempts to get the lowest level serialization first by (conditionally) obtaining FRMSTEAL, and working up (again, conditionally) from there. Therefore, frame table scan must obtain all serialization conditionally, and be able to release all held serialization and abandon the current FRMTE, if any serialization conflict is encountered. Otherwise, deadlocks with tasks obtain serialization in the normal "top down" fashion will result. This discussion not meant to be an exhaustive definition of FRMTE serialization. There are special circumstances such as system initialization where these rules do not apply, and other non-pageable frame code types have their own serialization mechanisms depending on usage. There are also some special pageable frame code types (such as MDC related FRMTEs and pageable page table FRMTEs) which are bound by these rules but have additional special serialization mechanisms as well. There may well be places in the existing code which do not abide by these rules and are not yet known to have caused any problems, but any such instances should be thoroughly investigated. Any code that violates the FRMCSB7G serialization bit mutual exclusivity rule for pageable FRMTEs while the system is in a normal running state is very likely in error, though, and should be addressed as soon as possible. The reason for all of this paranoia is that FRMTE serialization problems (such as lost FRMCSB7G updates) are notoriously difficult to debug. FRMTE serialization errors usually lead to unpredictable (but invariably bad) results which typically do not cause external symptoms immediately. By the time external symptoms arise, most in-storage evidence of the root cause has usually been overwritten. Known typical symptoms of FRMTE serialization errors include various loops and hangs, and MCW002 ABENDs, but other symptoms are quite possible.
FRMTE Control Block Content
FRMTE DSECT
Hex Dec Type/Val Lng Label (dup) Comments ---- ---- --------- ---- -------------- -------- 0000 0 Structure FRMTE FRAME TABLE ENTRY 0000 0 Dbl-Word 8 FRMGORGIN (0) Frame Table Entry Origin 0000 0 Address 8 FRMFPNTG 64-bit host logical address FRMTE forward pointer 0008 8 Address 8 FRMBPNTG 64-bit host logical address FRMTE backward pointer 0010 16 Address 8 FRMPTEG 64-bit host real address pointer to corresponding Page Table Entry when FRMCSB0 contains a pageable type frame code. PTE address is the same as the VPG64 address for the 4K block of virtual storage. The VPG64 is a more convenient mapping. FRMPTEG must be zeroed whenever a FRMTE is put on the global or local available list. When FRMSXS is on and FRMCSB0 does not contain a pageable type frame code, this field is redefined as FRMSXSTE, the 64-bit host logical address of the corresponding SXSTE. See FRMSXSTE redefinition of FRMPTEG. 0018 24 Signed 8 FRMSTATEG Frame status bits and flags. All bits are contained in a double word such that Compare & Swap-CSG can be used to serialize frame state changes. See the serialization section of this part prologue for a detailed discussion of FRMTE serialization rules. WARNING: Do *NOT* change any FRMTE serialization code without first *THOROUGHLY* understanding the FRMTE serialization rules 00000020 FRMLENTH *-FRMTE Length of frame table entry 0020 32 Dbl-Word 8 FRMNEXTG (0) Next sequential entry 0000 0 Signed 4 * High half of forward pointer 0004 4 Signed 4 * Low half of forward pointer 0008 8 Signed 4 * High half of backward pointer 000C 12 Signed 4 FRMBPNT1 Low half of backward pointer FRMBPNT1 is set by HCPHTTFF (front end of fast path page fault processor) to indicate to HCPPLPPL (back end of fastpath page processor) what type of page fault occurred. For a page fault satisfied by PGIN of an XSTORE block from a non-alternate PGMBK, the XSTORE block number is stored in FRMBPNT1. If the value in FRMBPNT1 is greater than X'FFFFFFFC', no XSTORE block was involved and FRMBFLAG will indicate the type of page fault that took place. 000C 12 Bitstring 1 * (3) High 3 bytes of block number 000F 15 Bitstring 1 FRMBFLAG Fast path status flag 1111 11.1 FRMALTMV X'FD' FRMALTMV Page in frame was moved from a page found in an alternate PGMBK 1111 111. FRMALTPG X'FE' FRMALTPG Page in frame was PGIN'd from an XSTORE block found in an alternate PGMBK 1111 1111 FRMFTPF X'FF' FRMFTPF Page in frame was cleared to satisfy a first time page fault These bits are static frame flag bits Redefinition for Minidisk Cache (FTC). 0000 0 Address 8 * Not redefined for MDC, original field name, FRMFPNTG, used 0008 8 Signed 4 * Skip high half of FRMBPNTG 000C 12 Signed 2 FRMTCSTE Offset within MDC segment table to the STE that this segment represents (Page table pages only) 000E 14 Bitstring 1 FRMPSCT Count of free PTE sets. Used in garbage collection only. (Page table pages only and must be initialized to 0) 000F 15 Bitstring 1 FRMASSEL Address space selector bits 11.. .... TCHASPAC X'C0' TCHASPAC These bits identify the address space used for caching Note: TCMALMSK and TCMALSHF depend on these bits ..11 1111 TCHIXMSK X'3F' TCHIXMSK Bits to hold DPSBK index See also TCMIXMSK. 0010 16 Address 8 FRMSTOG (0) STO for this address space (Segment table pages only) 0010 16 Signed 4 * Reserved for FRMSTOG high half 0014 20 Address 4 FRMSTO 31-bit STO for this address space 0018 24 Address 8 * May not be redefined for use in any way by MDC. Original field name, FRMSTATEG, and subdefinitions are used. 0010 16 Signed 4 * High half skipped 0014 20 Signed 2 FRMPS1ST First PTE set queued on frame for MDC garbage collection. (Page table pages only. Must be initialized to 0 when frame is allocated as a page table.) 0016 22 Signed 2 FRMPSLST Last PTE set queued on frame for MDC garbage collection. (Page table pages only. Must be initialized to 0 when frame is allocated as a page table.) 0010 16 Signed 4 * High half skipped 0014 20 Signed 4 FRMDCKEY MDC hash key here for MDC frames End of redefinition for Minidisk Cache (FTC). Redefinition for Emergency PGMBK Pool 0000 0 Address 8 * 0008 8 Address 8 * 0010 16 Address 8 FRMEMPGM A(next emergency PGMBK FRMTE) 0018 24 Address 8 * End of redefinition for Emergency PGMBK Pool Frame state word 0 contains the System Execution Space Page Number (bits 1:19) for a pageable type frame code if FRMSXS is also on. FRMSXS on in a pageable type frame code FRMTE indicates that the pageable page is also "aliased" into the System Execution Space. The SXPN allows code to locate the corresponding SXSTE (System Execution Space Management Table Entry, the structure by which System Execution Space Pages are managed) by ANDing off unrelated bits, then converting the resulting System Execution Space Page address to a SXSTE address using the SXSAE macro. 0018 24 Signed 4 FRMSTAW0 (0) Frame state word 0 0018 24 Bitstring 3 FRMSXPN System Execution Space Page Number (bits 1:19), when frame code is pageable and FRMSXS is on indicating the pageable page is aliased into the System Execution Space. 00FFF000 FRMSXPNM X'7FFFF000' Mask for isolating the System Execution Page Address from the SXPN. 00007FFF FRMSXPNMH X'7FFF' Mask for isolating the System Execution Page Address from the SXPN (high half). 0000F000 FRMSXPNML X'F000' Mask for isolating the System Execution Page Address from the SXPN (low half). 001B 27 Bitstring 1 * Reserved for IBM use The codes that include the x'80' (FRMUSER) bit in their definition indicate that the frame contains a pageable page. For most such frame codes, it means the page is represented by (more or less) standard pageable address space structures. Exceptions include the pageable PGMBK frame codes FRMPPGM (x'D1') and FRMPPGM2 (x'D5'), which are somewhat similar to normal address spaces, but with notable exceptions (such as each "page" really being an 8K pageable PGMBK requiring two frames), and also MDC data page frame code FRMFTADD (x'88'), which aren't really "pageable" per se, but are more properly described as "discardable" or "reclaimable" and are represented by completely different special case MDC structures. The codes that include the x'01' in their definition are a function of the FRMCP bit and are considered to be CP frames. Only frames with FRMCP bit on are included in a CP dump. An exception is VDISK frames, identified by frame code x'C3' (FRMSUTIL + x'40'), which are CP System Utility address space frames, and are CP owned and managed, but contain user data, and are therefore *NOT* included in CP dumps. The codes that include the X'02' in their definition are a function of the FRMDS bit and are considered to be data space frames. FRMDS bit is only allowed to be used to combine with FRMUSER or FRMSUSER and FRMCP to form FRMDTSP or FRMSUTIL. FRMPPGM is identified by the X'80' bit as pageable. FRMNPGM and FRMPPGM are associated with each other by the X'50' bits. Free storage frames are associated with each other by the X'60' bits. Notes : Any new frame code that contains the X'61' bits must be a type of free storage frame. There are places in the system that check for the X'61' bits to determine whether or not a frame is a free storage frames. All Mini-Disk Cache frame codes have the X'08' bit set (Notes : other frames codes that are not MDC may also use the x'08' bit). FRMFTADD is identified as pageable (more properly discardable/reclaimable by the X'80' bit. The code X'FF' is never a valid frame usage code in FRMCSB0. FRMNEVER is available to test whether a value is a frame usage code or not. For example, whether a parameter passed in SAVER2B3 is a frame usage code or not. When a frame is associated with a page in the System Execution Space (SXS), the frame use code in FRMCSB4G will match the page use code in SXSCSB4G of the SXSTE. All codes and bits should be kept in sync between FRMTE and SXSTE. 001C 28 Signed 4 FRMCSWRD (0) Cover for the 4 state bytes 001C 28 Bitstring 1 FRMCSB0 (0) 00000005 FRMNOTI X'05' FRMNOTI Frame is not initialized. TB/SSKE/ISKE has not been issued against this frame. 00000009 FRMFTTBL X'09' FRMFTTBL Frame used for MDC segment or page table. 0000000D FRMMDCHT X'0D' FRMMDCHT Frame used for MDC hash table. 00000010 FRMOFFLN X'10' FRMOFFLN Frame is offline and unavailable 00000011 FRMSXSTB X'11' FRMSXSTB SXS page mgt table frame 00000031 FRMPRFX X'31' FRMPRFX Prefix page frame 00000040 FRMVR X'40' FRMVR V=F user frame 00000041 FRMFRMTB X'41' FRMFRMTB Frame table frame 00000051 FRMNPGM X'51' FRMNPGM Frame is a non-pageable pgmbk 00000051 FRMNPGM1 FRMNPGM FRMNPGM1 First frame of a non-pageable PGMBK 00000055 FRMNPGM2 X'55' FRMNPGM2 Second frame of a non-pageable PGMBK Refer to FRMSXSTE to identify the SXSTE that describes the page. 00000069 FRMAFR X'69' FRMAFR Frame for absolute aligned free control block free storage 00000082 FRMDTSP X'82' FRMDTSP Frame used for a user's data space page 00000083 FRMSUTIL X'83' FRMSUTIL Frame used for CP utility address space page 00000088 FRMFTADD X'88' FRMFTADD Frame is part of the MDC address space. It contains user data. 000000C3 FRMSVDSK X'C3' FRMSVDSK Frame used for VDISK System Utility address space page 000000D1 FRMPPGM X'D1' FRMPPGM Frame is a pageable PGMBK 000000D1 FRMPPGM1 FRMPPGM FRMPPGM1 First frame of a pageable PGMBK 000000D5 FRMPPGM2 X'D5' FRMPPGM2 Second frame of a pageable PGMBK 0000007D FRMPDISO X'7D' FRMPDISO Isolate FRMUSER and FRMDTSP fields of FRMCSB4G. This is done to allow code to test, for either FRMUSER *or* FRMDTSP being on with one instruction. 000000FF FRMNEVER X'FF' FRMNEVER Equate to reserve a value which will never be a valid frame usage code. 00000001 FRMCP X'01' FRMCP FRAME IN USE BY CONTROL PROGRAM 00000021 FRMTRACE X'21' FRMTRACE CP TRACE TABLE FRAME 00000061 FRMFSTG X'61' FRMFSTG Frame used for logical free stg. Refer to FRMSXSTE to find the SXSTE that describes the page. 00000080 FRMUSER X'80' FRMUSER FRAME USED AS USER PAGE 00000081 FRMSUSER X'81' FRMSUSER IN USE AS SYSTEM VIRTUAL PAGE 000001FD FREMX 509 FREMX Maximum number of double-words that can be obtained without requiring full-page request. This value should be the same as that calculated and stored in HCPFREMX. 00000FE8 FREMXB FREMX*8 FREMXB Maximum number of bytes that can be obtained without requiring full-page request. 001C 28 Bitstring 1 FRMCSB4G (0) Compare and swap dword byte 4. CSG not necessarily required to alter these bits. 00000001 FRMCP X'01' FRMCP FRAME IN USE BY CONTROL PROGRAM 00000021 FRMTRACE X'21' FRMTRACE CP TRACE TABLE FRAME 00000061 FRMFSTG X'61' FRMFSTG Frame used for logical free stg. Refer to FRMSXSTE to find the SXSTE that describes the page. 00000080 FRMUSER X'80' FRMUSER FRAME USED AS USER PAGE 00000081 FRMSUSER X'81' FRMSUSER IN USE AS SYSTEM VIRTUAL PAGE 000001FD FREMX 509 FREMX Maximum number of double-words that can be obtained without requiring full-page request. This value should be the same as that calculated and stored in HCPFREMX. 00000FE8 FREMXB FREMX*8 FREMXB Maximum number of bytes that can be obtained without requiring full-page request. 00000005 FRMNOTI X'05' FRMNOTI Frame is not initialized. TB/SSKE/ISKE has not been issued against this frame. 00000009 FRMFTTBL X'09' FRMFTTBL Frame used for MDC segment or page table. 0000000D FRMMDCHT X'0D' FRMMDCHT Frame used for MDC hash table. 00000010 FRMOFFLN X'10' FRMOFFLN Frame is offline and unavailable 00000011 FRMSXSTB X'11' FRMSXSTB SXS page mgt table frame 00000031 FRMPRFX X'31' FRMPRFX Prefix page frame 00000040 FRMVR X'40' FRMVR V=F user frame 00000041 FRMFRMTB X'41' FRMFRMTB Frame table frame 00000051 FRMNPGM X'51' FRMNPGM Frame is a non-pageable pgmbk 00000051 FRMNPGM1 FRMNPGM FRMNPGM1 First frame of a non-pageable PGMBK 00000055 FRMNPGM2 X'55' FRMNPGM2 Second frame of a non-pageable PGMBK Refer to FRMSXSTE to identify the SXSTE that describes the page. 00000069 FRMAFR X'69' FRMAFR Frame for absolute aligned free control block free storage 00000082 FRMDTSP X'82' FRMDTSP Frame used for a user's data space page 00000083 FRMSUTIL X'83' FRMSUTIL Frame used for CP utility address space page 00000088 FRMFTADD X'88' FRMFTADD Frame is part of the MDC address space. It contains user data. 000000C3 FRMSVDSK X'C3' FRMSVDSK Frame used for VDISK System Utility address space page 000000D1 FRMPPGM X'D1' FRMPPGM Frame is a pageable PGMBK 000000D1 FRMPPGM1 FRMPPGM FRMPPGM1 First frame of a pageable PGMBK 000000D5 FRMPPGM2 X'D5' FRMPPGM2 Second frame of a pageable PGMBK 0000007D FRMPDISO X'7D' FRMPDISO Isolate FRMUSER and FRMDTSP fields of FRMCSB4G. This is done to allow code to test, for either FRMUSER *or* FRMDTSP being on with one instruction. 000000FF FRMNEVER X'FF' FRMNEVER Equate to reserve a value which will never be a valid frame usage code. 001C 28 Bitstring 1 * The actual byte These codes are primarily static frame use codes. Some codes are defined in HCPEQUAT (those which have their definitions commented out here). The following frames can be stolen by the steal task: FRMUSER - Both private and shared frames FRMDTSP - Data space frames (private and shared) FRMSUSER - System user frames FRMSVDSK - Vdisk space frames (system owned) FRMSUTIL - System utility frames FRMPPGM - Pageable PGMBK blocks FRMPPGM1 - Pageable PGMBK blocks (1st page) FRMPPGM2 - Pageable PGMBK blocks (2nd page) The following frames can be stolen by the Mini-Disk-Cache (MDC) steal task: FRMFTADD - Mini-Disk Cache address space pages. All the rest cannot be stolen. 001D 29 Bitstring 1 FRMCSB1 (0) ..1. .... FRMOWNED X'20' FRMOWNED Frame is on a user owned list ...1 .... FRMSHARE X'10' FRMSHARE Frame is shared storage frame .... 1... FRMRONLY X'08' FRMRONLY Frame is a read only frame (e.g., the frame is being used to back a read only page, PAGGPROT should be set in the associated PTE pointed to by FRMPTEG) .... .1.. FRMSXS X'04' FRMSXS Frame is in SXS and managed via SXS page management table. If on for a pageable type frame code FRMTE, the pageable page is aliased into the System Execution Space. If on for a non-pageable type frame code FRMTE, the frame is backing an normal allocated System Execution Space page (such as free storage, for example) .... ..1. FRMONQUE X'02' FRMONQUE Frame is currently on a queue or list. Check the frame code to determine what queue frame is on. FRMAFR - The absolute aligned free storage queue. FRMPPGM - The deferred PGMBK paging list or the paged PGMBK aging list FRMNPGM - The list of FRMTEs containing previously deallocated PTRM PTEs below current pointer. .... ...1 FRMERROR X'01' FRMERROR Frame is in error (storage check) 001D 29 Bitstring 1 FRMCSB5G (0) Compare and swap dword byte 5 Compare and swap not necessarily required to alter these bits. ..1. .... FRMOWNED X'20' FRMOWNED Frame is on a user owned list ...1 .... FRMSHARE X'10' FRMSHARE Frame is shared storage frame .... 1... FRMRONLY X'08' FRMRONLY Frame is a read only frame (e.g., the frame is being used to back a read only page, PAGGPROT should be set in the associated PTE pointed to by FRMPTEG) .... .1.. FRMSXS X'04' FRMSXS Frame is in SXS and managed via SXS page management table. If on for a pageable type frame code FRMTE, the pageable page is aliased into the System Execution Space. If on for a non-pageable type frame code FRMTE, the frame is backing an normal allocated System Execution Space page (such as free storage, for example) .... ..1. FRMONQUE X'02' FRMONQUE Frame is currently on a queue or list. Check the frame code to determine what queue frame is on. FRMAFR - The absolute aligned free storage queue. FRMPPGM - The deferred PGMBK paging list or the paged PGMBK aging list FRMNPGM - The list of FRMTEs containing previously deallocated PTRM PTEs below current pointer. .... ...1 FRMERROR X'01' FRMERROR Frame is in error (storage check) 001D 29 Bitstring 1 * The actual byte These bits are primarily static frame flag bits 001E 30 Bitstring 1 FRMCSB2 (0) 1... .... FRMFXASA X'80' FRMFXASA Indicates PTE associated with this FRMTE has a fixed ASA. This flag is used by slot alloc (HCPPGT) to keep track of which FRMTEs need ASAs. .1.. .... FRMNOOWN X'40' FRMNOOWN Frame is no-owned. ..1. .... FRMRFRSH X'20' FRMRFRSH Frame data is invalid. The frame must be refreshed before being used. ...1 .... FRMCTG X'10' FRMCTG Frame resides on a contiguous uncleared available list .... ...1 FRMLAVL X'01' FRMLAVL Frame resides on local available list. This bit can only be on for frames marked as available (FRMAVAIL bit is on.) Frames reside on the global available list when FRMAVAIL is on and FRMLAVL is off. 001E 30 Bitstring 1 FRMCSB6G (0) Compare and swap dword byte 6 Compare and swap not necessarily required to alter these bits. 1... .... FRMFXASA X'80' FRMFXASA Indicates PTE associated with this FRMTE has a fixed ASA. This flag is used by slot alloc (HCPPGT) to keep track of which FRMTEs need ASAs. .1.. .... FRMNOOWN X'40' FRMNOOWN Frame is no-owned. ..1. .... FRMRFRSH X'20' FRMRFRSH Frame data is invalid. The frame must be refreshed before being used. ...1 .... FRMCTG X'10' FRMCTG Frame resides on a contiguous uncleared available list .... ...1 FRMLAVL X'01' FRMLAVL Frame resides on local available list. This bit can only be on for frames marked as available (FRMAVAIL bit is on.) Frames reside on the global available list when FRMAVAIL is on and FRMLAVL is off. 001E 30 Bitstring 1 * The actual byte These bits denote dynamic frame states FRMCSB7G FRMTE serialization byte. Contains the four mutually exclusive FRMTE serialization bits. See the serialization section of this part prologue for a detailed discussion of FRMTE serialization rules. WARNING: Do *NOT* change any FRMTE serialization code without first *THOROUGHLY* understanding the FRMTE serialization rules!!!!!!!!!!!!!!!!!!! 001F 31 Bitstring 1 FRMCSB3 (0) 1... .... FRMAVAIL X'80' FRMAVAIL Frame is on the global available list, local available list, or the processor-local processed list. FRMPTEG must be cleared and FRMAVAIL must be set to one when a frame is on the global available list. FRMPTEG must be cleared plus FRMAVAIL, FRMLAVAL, and FRMUSER must be set to one when a frame is on the local available list. FRMPTEG must be non-zero plus FRMAVAIL, FRMLAVL, and FRMUSER must be set to one when a frame is on the processor local processed list. .1.. .... FRMTRANS X'40' FRMTRANS Frame is being translated ..1. .... FRMRELSE X'20' FRMRELSE Frame is being released ...1 .... FRMSTEAL X'10' FRMSTEAL Frame is being stolen Note: This state (FRMSTEAL) is sometimes used in situations where it is not feasible to use the locked/pinned frame interface. An example is HCPPAF saving pages on behalf of a guest request. END OF DEFINITION FOR FRAME TABLE ENTRIES 001F 31 Bitstring 1 FRMCSB7G (0) Compare and swap dword byte 7 1... .... FRMAVAIL X'80' FRMAVAIL Frame is on the global available list, local available list, or the processor-local processed list. FRMPTEG must be cleared and FRMAVAIL must be set to one when a frame is on the global available list. FRMPTEG must be cleared plus FRMAVAIL, FRMLAVAL, and FRMUSER must be set to one when a frame is on the local available list. FRMPTEG must be non-zero plus FRMAVAIL, FRMLAVL, and FRMUSER must be set to one when a frame is on the processor local processed list. .1.. .... FRMTRANS X'40' FRMTRANS Frame is being translated ..1. .... FRMRELSE X'20' FRMRELSE Frame is being released ...1 .... FRMSTEAL X'10' FRMSTEAL Frame is being stolen Note: This state (FRMSTEAL) is sometimes used in situations where it is not feasible to use the locked/pinned frame interface. An example is HCPPAF saving pages on behalf of a guest request. END OF DEFINITION FOR FRAME TABLE ENTRIES 001F 31 Bitstring 1 * The actual byte These bits are used to serialize frame state changes Redefinition for frames that are not chained. 0000 0 Signed 4 * Reserved for IBM use 0004 4 Signed 4 FRMID 4 character identifier Identifiers used in FRMID There identifiers are for visual recognition and are not intended to be used as flags. '*CP*' Frame in use by control program 'TRAC' CP trace table page 'FREE' Frame in use for free storage Refer to FRMSXSTE to identify the SXSTE that describes the page. 'AFR ' Aligned absolute free storage 'SXSA' SXS Page on available backed Q '*VF*' Virtual = Fixed user frame 'OFLN' Frame is offline and unavailable 'PRFX' Prefix page frame ' ' Locked user frame 'PPGM' Pageable PGMBK 'NPGM' Non-pageable PGMBK 'FTBL' FTC segment or page table frame '*RFT' Host Region First Table frame '*RST' Host Region Second Table frame '*RTT' Host Region Third Table frame '*SEG' Host Segment Table frame 'XDAT' SXS DAT table frame Note that FRMCSB4G still == FRMCP for FRMTEs marked with *RTF, *RTS, *RTT, *SEG, FRMT, SXST, and XDAT eyecatchers. 0008 8 Signed 4 * Reserved for IBM use 000C 12 Signed 4 * Reserved for IBM use 0010 16 Address 8 * Reserved for IBM use 0018 24 Signed 8 * FRMSTATEG (flags and status bits) Redefinition for absolute aligned free storage frames 0000 0 Address 8 FRMFRNXTG Next FRMTE with available blocks 0008 8 Signed 4 * Reserved for IBM use 000C 12 Signed 2 FRMVMFRG Fragment size 000E 14 Signed 2 FRMDWUSE Doublewords of storage in use 0010 16 Address 8 FRMCHNG Pointer to first free storage available block in this frame for real aligned free storage frames. 0010 16 Signed 4 * Reserved for IBM use 0014 20 Address 4 FRMCHN The FRMCHN field is used when contiguous frames are allocated and released by HCPPTEMF and HCPPTECR respectively. When used for this reason, FRMCHN will contain a number indicating the total number of contiguous frames in a contiguous set (from lowest to highest FRMTE address.) An allocated single frame may have a FRMCHN value of zero (indicating it was allocated via HCPPTFGF) or one (indicating it was allocated via HCPPTEMF). For this usage, FRMCHN must be signed positive value. Also, bytes 0 and 1 of this field contain the offset of the 1st free page table entry available in this frame (for non- pageable PGMBK frames only - NPGM) which were previously deallocated. 0018 24 Signed 8 * FRMSTATEG (flags and status bits) Redefinition for host DAT (region/segment) table frames This redefinition does not apply to System Execution Space (SXS) DAT tables with FRMID='XDAT'. 0000 0 Signed 4 * Reserved for IBM use 0004 4 Signed 4 * FRMID: eyecatcher, see FRMID definition above 0008 8 Address 8 FRMHDPBKG Pointer to Host DAT table Programming area block for the DAT table associated with this frame. Filled in for each FRMTE for multi-frame DAT tables. 0010 16 Address 8 * FRMCHNG: for multi-frame host DAT tables, contains the number of contiguous frames starting at and including this frame, by ascending address 0018 24 Signed 8 * FRMSTATEG: as above Redefinition for non-pageable frame code types for frames used to back normal allocated System Execution Space pages (not alias SX pages of resident pageable pages). These frames are mapped into the SXS and described by the System Execution Space Page Management Tables. This redefinition only applies when: FRMSXS = 1 FRMCSB0 = (any non-pageable frame code) 0010 16 Address 8 FRMSXSTE Address of the SXSTE that describes the SXS page that this frame is associated with in the SXS DAT tables. Redefinition for frame table and SXS page mgt table frames. This redefinition only applies when: FRMCSB0 = x'11' (FRMSXSTB) or x'41' (FRMFRMTB) This redefinition applies to frames used for both SXSTB and FRMTB, however the FRMTENXT chains are different for each. See PF2FTOFTE and PF2STOFTE chain anchors. These chains are used in dump processing. These FRMTEs are initialized during system initialization and remain unchanged for the life of the system. 0000 0 Bitstring 1 * Reserved for FRMDUMP 0001 1 Bitstring 1 * Reserved for IBM use. 0002 2 Bitstring 2 * Reserved for expansion of FRMPGNUM size. 0004 4 Signed 4 FRMPGNUM Page index into table in the SXS address order. Calculated by subtracting the table origin (PFXFTBLG or PFXSTBLG), then dropping low order 12 bits from this calculated offset and then taking the low order 4 bytes. The maximum value supported is sufficient for a 16T frame table which would map 2P of storage. This value is used by VM Dump Tool to identify the record within the dump that contains the content of this frame table frame. This is necessary because the frame table is dumped in logical address order near the beginning of the dump and these frames are not dumped as part of the storage dump portion of the dump. To find frame given real addr: - find FRMTE for that frame - if not FRMFRMTB then select record from storage section - else get FRMPGNUM from FRMTE. Use FRMPGNUM to select frame table record from frame table section of dump and use as the storage contents. 0008 8 Address 8 FRMTENXT Host real address of the FRMTE describing the next frame used for the frame table in order by frame table logical address. End of chain is indicated by x'FFFFFFFFFFFFFFFF'. 0010 16 Address 8 FRMFRMAD Host real address of the frame described by this FRMTE. 0018 24 Signed 8 * FRMSTATEG: as above Redefinition used during CP dump processing. This redefinition should never be used to modify FRMTEs in the frame table that will continue to be used by CP because it overlays the first byte of the FRMTE regardless of what the FRMTE is being used for. It is intended as a means of passing information to the dump tool that is not otherwise in the dump. The dump tool will adjust its reading of FRMTEs using this redefinition. This means that any uses of the first word or doubleword need to omit the first byte. Snapdump will also want to include this information in the FRMTEs, but the real frame table contents need to be left unchanged because the system will continue to run. Snapdump will use a work area to modify frame table frames before writing them to the dump. This redefinition does not cause a loss of information for any current usage since the first byte is used as part of doubleword pointer. The valid range of addresses used in the pointer are currently below 128G and dependent on the supported real storage size. The pointer may also contain a x'FFFFFFFFFFFFFFFF' (-1). Therefore the first byte will be either x'00' or x'FF' when it is used elsewhere. The data in the first byte is insignificant and can be discarded. Simple sign extension from the remaining portion of the address can be used to restore the first byte. If bit 8 is on then the pointer would have been a -1, otherwise the byte would have contained x'00'. The approach of using sign extension out of bit 8 is valid until the supported size of real storage increases beyond the 16 petabyte range. Any changes to the FRMTE must ensure that they do not result in a loss of information needed in dump analysis because of the overlay on the first byte. 0000 0 Bitstring 1 FRMDUMP Frame info for dump processing. 1111 111. FRMKEY X'FE' FRMKEY Mask to isolate key from FRMDUMP. Bits 0-6 for key + FRC bits. .... ...1 FRMDUMPD X'01' FRMDUMPD Mask to isolate bit indicating whether frame contents are in the storage dump portion of CP dump. Redefinition for PTRM PTE serialization. This is needed because a PTRM PTE represents 2 frames of data (a pageable PGMBK). If these 2 frames of data are acted on by different threads (say for independent I/O operations), they can both think they hold the serialization reflected in the PTRM PTE. To avoid this, any I/O process for pageable PGMBKs must first get this spin lock, thereby giving that thread the rights to the PTRM PTE and blocking all other processes from using the PTRM PTE. After the process is finished with the PTRM PTE, this spin lock is released. 0018 24 Signed 4 FRMPPPLK Fullword spin lock field. Should either contain binary zeros, or the address of the instruction (or one near it) that acquired the lock. Simple spin lock, acquired by CS instruction and released by storing binary zeros. Note that this field will ONLY be used in the 2nd FRMTE of the contiguous pair of FRMTEs that represent the frames of the pageable PGMBK.
FRMTE Storage Layout
*** FRMTE - FRAME TABLE ENTRY * * +-------------------------------------------------------+ * 0 | FRMFPNTG | * +-------------------------------------------------------+ * 8 | FRMBPNTG | * +-------------------------------------------------------+ * 10 | FRMPTEG | * +-------------------------------------------------------+ * 18 | FRMSTATEG | * +-------------------------------------------------------+ * *** FRMTE - FRAME TABLE ENTRY *** Overlay for FRMFPNTG in FRMTE * * +---------------------------+---------------------------+ * 0 |///////////////////////////|///////////////////////////| * +---------------------------+---------------------------+ * 8 * *** Overlay for FRMFPNTG in FRMTE *** Overlay for FRMBPNTG in FRMTE * * +---------------------------+---------------------------+ * 8 |///////////////////////////| FRMBPNT1 | * +---------------------------+---------------------------+ * 10 * *** Overlay for FRMBPNTG in FRMTE *** Overlay for FRMBPNT1 in FRMTE * * +--------------------+------+ * 8 ... C |////////////////////|:BFLAG| * +--------------------+------+ * 10 * *** Overlay for FRMBPNT1 in FRMTE *** Overlay for FRMFPNTG in FRMTE * * +-------------------------------------------------------+ * 0 |///////////////////////////////////////////////////////| * +---------------------------+-------------+------+------+ * 8 |///////////////////////////| FRMTCSTE |:PSCT |:ASSEL| * +---------------------------+-------------+------+------+ * 10 |///////////////////////////| FRMSTO | * +---------------------------+---------------------------+ * 18 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 20 * *** Overlay for FRMFPNTG in FRMTE *** Overlay for FRMPTEG in FRMTE * * +---------------------------+-------------+-------------+ * 10 |///////////////////////////| FRMPS1ST | FRMPSLST | * +---------------------------+-------------+-------------+ * 18 * *** Overlay for FRMPTEG in FRMTE *** Overlay for FRMPTEG in FRMTE * * +---------------------------+---------------------------+ * 10 |///////////////////////////| FRMDCKEY | * +---------------------------+---------------------------+ * 18 * *** Overlay for FRMPTEG in FRMTE *** Overlay for FRMFPNTG in FRMTE * * +-------------------------------------------------------+ * 0 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 8 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 10 | FRMEMPGM | * +-------------------------------------------------------+ * 18 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 20 * *** Overlay for FRMFPNTG in FRMTE *** Overlay for FRMSTATEG in FRMTE * * +--------------------+------+------+------+------+------+ * 18 | FRMSXPN |//////|//////|//////|//////|//////| * +--------------------+------+------+------+------+------+ * 20 * *** Overlay for FRMSTATEG in FRMTE *** Overlay for FRMGORGIN in FRMTE * * +---------------------------+---------------------------+ * 0 |///////////////////////////| FRMID | * +---------------------------+---------------------------+ * 8 |///////////////////////////|///////////////////////////| * +---------------------------+---------------------------+ * 10 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 18 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 20 * *** Overlay for FRMGORGIN in FRMTE *** Overlay for FRMGORGIN in FRMTE * * +-------------------------------------------------------+ * 0 | FRMFRNXTG | * +---------------------------+-------------+-------------+ * 8 |///////////////////////////| FRMVMFRG | FRMDWUSE | * +---------------------------+-------------+-------------+ * 10 | FRMCHNG | * +-------------------------------------------------------+ * 18 * *** Overlay for FRMGORGIN in FRMTE *** Overlay for FRMCHNG in FRMTE * * +---------------------------+---------------------------+ * 10 |///////////////////////////| FRMCHN | * +---------------------------+---------------------------+ * 18 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 20 * *** Overlay for FRMCHNG in FRMTE *** Overlay for FRMGORGIN in FRMTE * * +---------------------------+---------------------------+ * 0 |///////////////////////////|///////////////////////////| * +---------------------------+---------------------------+ * 8 | FRMHDPBKG | * +-------------------------------------------------------+ * 10 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 18 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 20 * *** Overlay for FRMGORGIN in FRMTE *** Overlay for FRMPTEG in FRMTE * * +-------------------------------------------------------+ * 10 | FRMSXSTE | * +-------------------------------------------------------+ * 18 * *** Overlay for FRMPTEG in FRMTE *** Overlay for FRMGORGIN in FRMTE * * +------+------+-------------+---------------------------+ * 0 |//////|//////|/////////////| FRMPGNUM | * +------+------+-------------+---------------------------+ * 8 | FRMTENXT | * +-------------------------------------------------------+ * 10 | FRMFRMAD | * +-------------------------------------------------------+ * 18 |///////////////////////////////////////////////////////| * +-------------------------------------------------------+ * 20 * *** Overlay for FRMGORGIN in FRMTE *** Overlay for FRMGORGIN in FRMTE * * +------+ * 0 |:DUMP | 1 * +------+ * *** Overlay for FRMGORGIN in FRMTE *** Overlay for FRMSTAW0 in FRMTE * * +---------------------------+ * 18 | FRMPPPLK | 1C * +---------------------------+ * *** Overlay for FRMSTAW0 in FRMTE
FRMTE Cross Reference
Symbol Dspl Value -------------- ---- ----- FREMX 001C 000001FD FREMX 001C 000001FD FREMXB 001C 00000FE8 FREMXB 001C 00000FE8 FRMAFR 001C 00000069 FRMAFR 001C 00000069 FRMALTMV 000F FD FRMALTPG 000F FE FRMASSEL 000F FRMAVAIL 001F 80 FRMAVAIL 001F 80 FRMBFLAG 000F FRMBPNTG 0008 FRMBPNT1 000C FRMCHN 0014 FRMCHNG 0010 FRMCP 001C 00000001 FRMCP 001C 00000001 FRMCSB0 001C FRMCSB1 001D FRMCSB2 001E FRMCSB3 001F FRMCSB4G 001C FRMCSB5G 001D FRMCSB6G 001E FRMCSB7G 001F FRMCSWRD 001C FRMCTG 001E 10 FRMCTG 001E 10 FRMDCKEY 0014 FRMDTSP 001C 00000082 FRMDTSP 001C 00000082 FRMDUMP 0000 FRMDUMPD 0000 01 FRMDWUSE 000E FRMEMPGM 0010 FRMERROR 001D 01 FRMERROR 001D 01 FRMFPNTG 0000 FRMFRMAD 0010 FRMFRMTB 001C 00000041 FRMFRMTB 001C 00000041 FRMFRNXTG 0000 FRMFSTG 001C 00000061 FRMFSTG 001C 00000061 FRMFTADD 001C 00000088 FRMFTADD 001C 00000088 FRMFTPF 000F FF FRMFTTBL 001C 00000009 FRMFTTBL 001C 00000009 FRMFXASA 001E 80 FRMFXASA 001E 80 FRMGORGIN 0000 FRMHDPBKG 0008 FRMID 0004 FRMKEY 0000 FE FRMLAVL 001E 01 FRMLAVL 001E 01 FRMLENTH 0018 00000020 FRMMDCHT 001C 0000000D FRMMDCHT 001C 0000000D FRMNEVER 001C 000000FF FRMNEVER 001C 000000FF FRMNEXTG 0020 FRMNOOWN 001E 40 FRMNOOWN 001E 40 FRMNOTI 001C 00000005 FRMNOTI 001C 00000005 FRMNPGM 001C 00000051 FRMNPGM 001C 00000051 FRMNPGM1 001C 00000051 FRMNPGM1 001C 00000051 FRMNPGM2 001C 00000055 FRMNPGM2 001C 00000055 FRMOFFLN 001C 00000010 FRMOFFLN 001C 00000010 FRMONQUE 001D 02 FRMONQUE 001D 02 FRMOWNED 001D 20 FRMOWNED 001D 20 FRMPDISO 001C 0000007D FRMPDISO 001C 0000007D FRMPGNUM 0004 FRMPPGM 001C 000000D1 FRMPPGM 001C 000000D1 FRMPPGM1 001C 000000D1 FRMPPGM1 001C 000000D1 FRMPPGM2 001C 000000D5 FRMPPGM2 001C 000000D5 FRMPPPLK 0018 FRMPRFX 001C 00000031 FRMPRFX 001C 00000031 FRMPSCT 000E FRMPSLST 0016 FRMPS1ST 0014 FRMPTEG 0010 FRMRELSE 001F 20 FRMRELSE 001F 20 FRMRFRSH 001E 20 FRMRFRSH 001E 20 FRMRONLY 001D 08 FRMRONLY 001D 08 FRMSHARE 001D 10 FRMSHARE 001D 10 FRMSTATEG 0018 FRMSTAW0 0018 FRMSTEAL 001F 10 FRMSTEAL 001F 10 FRMSTO 0014 FRMSTOG 0010 FRMSUSER 001C 00000081 FRMSUSER 001C 00000081 FRMSUTIL 001C 00000083 FRMSUTIL 001C 00000083 FRMSVDSK 001C 000000C3 FRMSVDSK 001C 000000C3 FRMSXPN 0018 FRMSXPNM 0018 00FFF000 FRMSXPNMH 0018 00007FFF FRMSXPNML 0018 0000F000 FRMSXS 001D 04 FRMSXS 001D 04 FRMSXSTB 001C 00000011 FRMSXSTB 001C 00000011 FRMSXSTE 0010 FRMTCSTE 000C FRMTENXT 0008 FRMTRACE 001C 00000021 FRMTRACE 001C 00000021 FRMTRANS 001F 40 FRMTRANS 001F 40 FRMUSER 001C 00000080 FRMUSER 001C 00000080 FRMVMFRG 000C FRMVR 001C 00000040 FRMVR 001C 00000040 TCHASPAC 000F C0 TCHIXMSK 000F 3F
Copyright IBM Corporation, 1990, 2009