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 RELOCATION CONSIDERATIONS : 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. 001C 28 Bitstring 1 FRMCSB4G (0) Compare and swap dword byte 4. CSG not necessarily required to alter these bits. 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. never been passed out for use. 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. FRMSUAVL X'02' FRMSUAVL This bit has meaning only when a frame is on a global available list. It identifies a frame that was changed from FRMSUSER to FRMUSER when added to the list. The purpose of the bit is to aid debugging. .... ...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. Note: FRMLAVL+FRMAVAIL+FRMSTEAL is used by frame table scan to remember that a frame was removed from an available list. If the attempt is aborted, FRMLAVL is turned off, and the frame is returned to an available list. 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. FRMSUAVL X'02' FRMSUAVL This bit has meaning only when a frame is on a global available list. It identifies a frame that was changed from FRMSUSER to FRMUSER when added to the list. The purpose of the bit is to aid debugging. .... ...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. Note: FRMLAVL+FRMAVAIL+FRMSTEAL is used by frame table scan to remember that a frame was removed from an available list. If the attempt is aborted, FRMLAVL is turned off, and the frame is returned to an available list. 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. Note: This state (FRMSTEAL) is used in situations where a FRMTE has just been removed from an available list, or is about to be coalesced back to the available lists, and is not otherwise serialized. 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. Note: This state (FRMSTEAL) is used in situations where a FRMTE has just been removed from an available list, or is about to be coalesced back to the available lists, and is not otherwise serialized. 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 Frame count into FRMTB in the SXS address order. Frames that contain FRMTEs for the FRMTB have FRMTEs. Every frame is controlled by a FRMTE. Say that the first FRMTE is at HLA 300_00000000. That FRMTE is somewhere in storage. We can LRAG and get the HRA. Let's say HLA 300_00000000 is backed by the real frame at 83283000. That's a frame in storage, so there is a FRMTE that describes it. That FRMTE is found by AEFRM 83283000. Let's say that AEFRM gives us 300_01065060. 300_01065060 is the FRMTE for the 1st frame of the FRMTB. Its FRMPGNUM is 00000000. And where is this FRMTE in the dump? LRAG 300_01065060 tells us. Let's pretend that LRAG gives us 8279A060. The 2nd frame of FRMTEs is at 300_00001000, the next page HLA. LRAG can get us its HRA. Let's say that HRA is 78987000. Notice there is no connection to the HRA of the first frame. The backing frames can be anywhere. 78987000 is described by a FRMTE. AEFRM 78987000 gives us its FRMTE, 300_00F130E0. 300_00F130E0 is the FRMTE for the 2nd frame of the FRMTB. Its FRMPGNUM is 00000001. And where is this FRMTE in the dump? LRAG 300_00F130E0 tells us. Let's pretend that LRAG gives us 82F450E0. If the DAT tables are broken, then we can't use LRAG. We might know from PFXFTBLG that the 1st FRMTE is at HLA 300_00000000, but without LRAG we'll never find it in the dump. That's where PF2FTOFTE and FRMTENXT come in. When the FRMTB was built, it was determined that the 1st frame of FRMTEs was at HRA 83283000. Dump processing, and the VM Dump Tool, can use PF2FTOFTE to find that 1st frame of FRMTEs. At initialization PF2FTOFTE is initialized: LRAG 300_00000000 --> 83283000, AEFRM 83283000 --> 300_01065060. LRAG 300_01065060 --> 8279A060. This value 8279A060 is stored in PF2FTOFTE. At HRA 8279A060, 128 FRMTEs of the FRMTB can be found. The next real frame of FRMTEs is found from chained the 1st FRMTE of the FRMTB. 8279A060 points to the FRMTE for the 2nd frame of the FRMTB, 82F450E0. This is what these 2 FRMTEs would look like R8279A060 00000000 00000000 00000000 82F450E0 00000000 83283000 00000000 41000000 R82F450E0 00000000 00000001 00000000 nxtFRMTE 00000000 78987000 00000000 41000000 The FRMTE at R8279A060 has HRA to the next FRMTE 00000000_82F450E0 as well as the HRA for the original HLA (300_00000000 --> 00000000_83283000) And so on. So, if DAT does not work, one could chase the chain anchored at PF2FTOFTE. To find the frame of FRMTEs for some page of FRMTEs, say 300_01000000), one would determine how many of these chained FRMTEs to chase: 300_01200000 - PFXFTBLG, which is probably 300_01200000 - 300_00000000 = 01200000 shift right 12 bits = x1200 So, one would chase x1200 FRMTENXT pointers to get to the FRMTE with FRMPGNUM = x11FF. PF2STOFTE anchors an analogous chain for the FRMTEs of the frames that contain the SXSTB. 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 -------------- ---- ----- 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 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 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 FRMSUAVL 001E 02 FRMSUAVL 001E 02 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 FRMTRANS 001F 40 FRMTRANS 001F 40 FRMVMFRG 000C FRMVR 001C 00000040 FRMVR 001C 00000040 TCHASPAC 000F C0 TCHIXMSK 000F 3F
Copyright IBM Corporation, 1990, 2011