PGS TITLE 'DMKPGS (CP) VM/370 - RELEASE 6' 00001000
PUNCH 'SPB' START ON PAGE BOUNDARY @VM03171 00002000
ISEQ 73,80 VALIDATE INPUT SERIALIZATION @V200820 00003000
COPY OPTIONS 00004000
COPY LOCAL OPTIONS 00005000
EJECT 00006000
DMKPGS CSECT 00007000
SPACE 3 00008000
EXTRN DMKPGTPR,DMKPGTSP @VA04554 00009000
EXTRN DMKPTRFT 00010000
EXTRN DMKCVTAB @V408246 00011000
EXTRN DMKDSPNP 00012000
EXTRN DMKPTRSC @VA03412 00013000
EXTRN DMKPTRRC 00014000
EXTRN DMKSTKCP @VA03145 00015000
EXTRN DMKPTRUL UNLOCK 'LOCKED' PAGE @V408246 00016000
EXTRN DMKBLDRT,DMKBLDRL @V304635 00017000
EXTRN DMKDSPCH @VA03145 00018000
EXTRN DMKVMASH @V60BC11 00019000
EXTRN DMKPAGQ,DMKPTRFQ @V408246 00020000
EXTRN DMKPTRRS @V408246 00021000
EXTRN DMKSYSOW @VA04554 00022000
EXTRN DMKDSPRQ @V400141 00023000
EXTRN DMKPTRPW @VA08037 00023100
AIF (NOT &VIRREAL).NOVR1 00024000
EXTRN DMKSLC 00025000
.NOVR1 ANOP 00026000
SPACE 3 00027000
USING PSA,R0 00028000
USING VMBLOK,R11 00029000
USING SAVEAREA,R13 00030000
EJECT 00031000
*. 00032000
* MODULE NAME - 00033000
* 00034000
* DMKPGS 00035000
* 00036000
* FUNCTION - 00037000
* 00038000
* 1. TO RELEASE THE PAGES OF A USER'S VIRTUAL STORAGE SPACE 00039000
* BOTH FROM REAL MAIN STORAGE AND FROM TEMPORARY SLOTS ON 00040000
* THE DASD PAGE STORAGE AREA. 00041000
* 2. TO LOCATE A NAMED SYSTEM WHICH RESIDES IN THE USER'S 00042000
* VIRTUAL STORAGE. 00043000
* 3. TO RELEASE A NAMED SYSTEM WHICH RESIDES IN THE USER'S 00044000
* VIRTUAL STORAGE. 00045000
* 00046000
* ATTRIBUTES - 00047000
* 00048000
* REENTRANT,PAGEABLE, CALLED VIA SVC 00049000
* 00050000
* ENTRY POINTS - 00051000
* 00052000
* DMKPGSPO - RELEASE THE USER'S ENTIRE VIRTUAL SPACE 00053000
* DMKPGSPP - RELEASE ONLY A SPECIFIED PART OF THE MEMORY 00054000
* DMKPGSPR - RELEASE AND UNLOCK SPECIFIED USERS'S STORAGE 00055000
* DMKPGSPS - RELEASE A NAMED SYSTEM FROM USER'S VIRTUAL STORAGE 00057000
* DMKPGSSS - RELEASE VIRTUAL STORAGE BUT BYPASS ANY VIRTUAL 00058000
* STORAGE WHICH CONTAINS A NAMED SYSTEM 00059000
* 00061000
* ENTRY CONDITIONS - 00062000
* 00063000
* 00066000
* FOR DMKPGSPO - 00067000
* GPR2 = PARM NOCLEAR IF STORAGE NOT TO BE RELEASED 00068000
* GPR11 = ADDRESS OF VMBLOK OF VIRTUAL MEMORY'S OWNER 00069000
* GPR12 = ADDRESS OF ENTRY POINT 00070000
* GPR13 = ADDRESS OF SAVEAREA 00071000
* 00072000
* FOR DMKPGSPP, DMKPGSSS AND DMKPGSPR 00073000
* GPR1 = ADDRESS OF 1'ST PAGE TO RELEASE 00074000
* GPR2 = ADDRESS OF LAST PAGE TO RELEASE 00075000
* 00076000
* FOR DMKPGSPS - 00080000
* GPR 1-2 = NAME OF THE NAMED SYSTEM TO RELEASE 00081000
* (GPR 1 = 0 MEANS THAT NO SHRTABLE EXISTS) 00082000
* 00083000
* EXIT CONDITIONS - 00084000
* 00085000
* NONE 00086000
* 00087000
* CALLS TO OTHER ROUTINES - 00088000
* 00089000
* DMKPTRAN - TO ENQUEUE ON IN-TRANSIT PAGES 00090000
* DMKPTRFT - TO RETURN PAGES TO THE FREE PAGE LIST 00091000
* DMKPTRUL UNLOCK A PAGE 00092000
* DMKVMASH CHECK FOR CHANGED SHARED PAGE 00093000
* DMKVMAPS UNSHARE A CHANGED SHARED PAGE 00094000
* DMKPTRRS CORE RESET FUNCTION 00095000
* DMKPGTPR - TO RELEASE A DASD PAGE SLOT 00096000
* DMKPGTSP - TO RELEASE A DASD PAGE ASSIGNED TO SYSTEM 00097000
* DMKFREE - TO GET STORAGE FOR NON-SHARED PAGE AND SWAP TABLES 00098000
* DMKFRET - TO RELEASE SHARED SYSTEM CONTROL TABLES WHEN USER 00099000
* COUNT IS ZERO 00100000
* DMKBLDRT - BUILD NEW SWAP/PAGE AND SEGMENT TABLES 00101000
* DMKBLDRL - RELEASE OLD SWAP/PAGE AND SEGMENT TABLES 00102000
* 00103000
* DMKSTKCP - TO STACK DEFERRED REQUESTS FOR EXECUTION 00104000
* DMKDSPCH - TO RETURN TO DISPATCHER 00105000
* EXTERNAL REFERENCES - 00106000
* 00107000
* DMKDSPNP - NUMBER OF DYNAMICALLY ASSIGNABLE PAGE FRAMES 00108000
* DMKPTRRC - NUMBER OF REIDENT, RESERVED PAGES 00109000
* DMKVMAS1 - ANCHOR FOR SHARED SYSTEMS (SHRTABLE POINTER) 00110000
* DMKVMAS2 - ANCHOR FOR NAMED SYSTEMS (SHRTABLE POINTER) 00111000
* DMKPTRSC - NUMBER OF RESIDENT SHARED PAGES @VA03412 00112000
* 00113000
* 00114000
* TABLES / WORKAREAS - 00115000
* 00116000
* CORTABLE, SWPTABLE, PAGTABLE, SEGTABLE, SHRTABLE 00117000
* 00118000
* REGISTER USAGE - 00119000
* 00120000
* GPR0 = SCRATCH 00121000
* GPR1 = VIRTUAL ADDRESS OF PAGE TO RELEASE 00122000
* GPR2 = REAL ADDRESS OF PAGE TO RELEASE 00123000
* GPR3 = SEGMENT ENTRY BASE 00124000
* GPR4 = PAGE TABLE ENTRY CLEARING REG 00125000
* GPR5 = SWPTABLE ENTRY BASE 00126000
* GPR6 = USED TO CLEAR CORSWPNT FIELD IN CORTABLE ENTRY 00127000
* GPR7 = CORTABLE ENTRY BASE 00128000
* GPR8 = NUMBER OF PAGES TO RELEASE 00129000
* GPR9 = PAGTABLE ENTRY BASE 00130000
* GPR10 - NOT USED 00131000
* GPR11 = VMBLOK BASE 00132000
* GPR12 = DMKPGS BASE 00133000
* GPR13 = SAVEAREA BASE 00134000
* GPR14 = EXTERNAL LINKAGE 00135000
* GPR15 = EXTERNAL LINKAGE 00136000
* 00137000
* NOTES - 00138000
* NONE 00139000
* 00140000
EJECT 00141000
* THE NAMED SYSTEM WHICH IS CONTAINED IN GPR 1-2 IS RELEASED 00272000
* FROM THE USER'S VIRTUAL STORAGE SPACE. RETURN IS THEN MADED 00273000
* TO THE CALLER WITH CC = 0. 00274000
* IF THE NAMED SYSTEM DOES NOT RESIDE IN THE USER'S VIRTUAL 00275000
* STORAGE, RETURN IS MADE TO THE CALLER WITH CC = 1. 00276000
SPACE 2 00277000
DC CL8'DMKPGS ' MODULE NAME @VA12777 00277100
DMKPGSPS RELOC @V304635 00278000
USING SEGTABLE,R3 @VA11919 00278100
USING SWPFLAG,R5 @VA11919 00278200
USING CORTABLE,R7 @VA11919 00278300
USING PAGCORE,R9 @VA11919 00278400
USING SHRTABLE,R10 @VA11919 00278500
XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTE @V304635 00279000
LTR R1,R1 IS SYSTEM NAME 0? @VA05638 00280000
BZ PURCONT YES, NO SHRTABLE EXISTS @VA05638 00281000
* BECAUSE PAGING ERROR ABORTED PROCESSING 00282000
MVI SAVEWRK1,PURGE PURGE NAMED SYSTEM PASSES IN @V304635 00283000
* R1-R2 00284000
SLR R1,R1 START LOOKING FOR NAMED SYSTEM @V304635 00285000
* HERE 00286000
SLR R2,R2 CLEAR FOR LAST ADDRESS @V304635 00287000
IC R2,VMSEG GET NUMBER OF SEGMENT TABLES @V304635 00288000
LA R2,1(,R2) ORIGIN TO BASE OF 1 @V304635 00289000
SLL R2,20 GET ADDR +1 PAGE OF LAST PAGE @V304635 00290000
BCTR R2,0 ENDING ADDRESS TO PURGE @V304635 00291000
B PGOUT1 JOIN COMMON CODE. @V407511 00292000
PURFINSH TM SAVEWRK1,PURGE PURGING A NAMED SYSTEM ? @V304635 00293000
BZ PURCONT NO - JUST RELEASING STORAGE @V304635 00294000
TM SAVEWRK1,SYSFND WAS NAMED SYSTEM FOUND ? @V304635 00295000
BZ SETCC1 NO - SET CONDITION CODE FOR @V304635 00296000
* CALLER 00297000
TM SAVEWRK1,SYSFRET SHOULD WE FRET THE SHRTABLE @V304635 00298000
BZ PURCONT NO - IN USE BY OTHER USERS @V304635 00299000
LM R0,R1,SAVEWRK7 GET LENGTH/ADDRESS OF SHRTABLE @V304635 00300000
CALL DMKFRET NOW FRET IT. @V304635 00301000
PURCONT L R3,VMSEG GET ADDRESS OF SEGTABLE @V304635 00302000
LA R3,0(,R3) 24 BIT ADDRESSING @V304635 00303000
ST R3,SAVEWRK2 SAVE BEGINING ADDRESS OF SEGTABLE@V304635 00304000
XC SAVEWRK3,SAVEWRK3 CLEAR HIGH SEGTABLE ADDRESS @V304635 00305000
SLR R4,R4 CLEAR FOR BCT LOOP @V304635 00306000
IC R4,VMSEG GET NUMBER OF 1 MEG SEGMENTS @V304635 00307000
LA R4,1(,R4) RAISE TO BASE OF 1 @V304635 00308000
SLL R4,4 TIMES 16 FOR NUM. SEG ENTRIES @V304635 00309000
* PER 1 MEG 00310000
ST R4,SAVEWRK4 SAVE IT. @V304635 00311000
L R3,SAVEWRK2 GET BEGINING OF SEGTABLE @V304635 00312000
LR R1,R3 SAVE IT @V304635 00313000
LR R2,R3 ALSO SAVE IT HERE @V304635 00314000
L R4,SAVEWRK4 GET NUMBER OF ENTRIES IN TABLE @V304635 00315000
HICORE DS 0H @V408246 00316000
CLI SEGPAGE+3,SEGINV UNDEFINED SEGMENT? @V408246 00317000
BNE B1 NO @V408246 00318000
ICM R15,B'0110',SEGPAGE+1 VALID PNTR? @V408246 00319000
BZ INVSEG YES, SKIP IT @V408246 00320000
B1 EQU * @V408246 00321000
ST R3,SAVEWRK3 SAVE THE ADDR. OF LAST VALID ONE @V304635 00322000
INVSEG LA R3,4(,R3) POINT TO NEXT SEGTABLE ENTRY @V304635 00323000
BCT R4,HICORE PROCESS ALL TABLE ENTRIES @V304635 00324000
SPACE 1 00325000
L R3,SAVEWRK3 GET ADDRESS OF HIGHEST VALID SEG.@V304635 00326000
LR R1,R3 NEEDED FOR CALCULATION @V304635 00327000
SLR R1,R2 R1 = NUMBER OF SEGMENTS @V304635 00328000
SLL R1,2 TIMES 16 PAGES FOR EACH SEGMENT @V304635 00329000
* ENTRY 00330000
IC R2,0(,R3) GET NUMBER PAGES IN LAST @V304635 00331000
* SEGMENT ENTRY 00332000
SRL R2,4 NUMBER PAGES TO LOW ORDER @V304635 00333000
N R2,F15 CLEAR OUT ALL BUT PAGE NUMBER @V304635 00334000
OR R1,R2 ADD IT TO R1 FOR CALL TO 'DMKBLD'@V304635 00335000
L R2,VMSTOR MINIMUM STORE SIZE @V408246 00336000
SRL R2,12 NO. OF PAGES @V408246 00337000
BCTR R2,0 NO. OF PAGES (BASE 0) @V408246 00338000
CR R1,R2 NEW SIZE AT LEAST MINIMUM? @V408246 00339000
BNL *+6 YES @V408246 00340000
LR R1,R2 NO, RESET TO MINIMUM @V408246 00341000
CALL DMKBLDRT,PARM=KEEPSEGS+OLDVMSEG COMPRESS @V304635 00342000
* SEGTABLE 00343000
SLL R1,12 ADD IN DISPLACEMENT @V304635 00344000
AL R1,F4096 PLUS 1 MORE PAGE FOR 'VMSIZE' @V304635 00345000
ST R1,VMSIZE NEW VIRTUAL MACHINE STORAGE SIZE @V304635 00346000
B EXIT @V408246 00347000
SETCC1 MVI SAVEWRK1+1,CC1 SET CC=1 FOR CALLER @V407511 00348000
B EXIT RETURN TO CALLER @V304635 00349000
EJECT 00350000
*. 00351000
* 00352000
* C. OPERATION OF DMKPGSPP - 00353000
* 00354000
* 1. IF THE USER IS IN PAGE WAIT, STACK A CPEXBLOK AND EXIT. 00355000
* OTHERWISE, BYPASS SHARED SEGMENT PROCESSING, JOINING 00356000
* PAGE-CLEAR CODE AT LABEL PGOUT1 BELOW (STEP 7). 00357000
* 00358000
* D. OPERATION OF DMKPGSSS - 00359000
* 00360000
* 1. RELEASE THE ADDRESS RANGE CONTAINED IN THE CALLERS GPR 1-2 00361000
* BUT BYPASS ANY NAMED SYSTEMS THAT MAY ALSO RESIDE IN 00362000
* THE ADDRESS RANGE TO BE RELEASED. 00363000
* THEN JOIN PAGE-CLEAR CODE AT LABEL (PGOUT1). 00364000
* 00365000
* E. OPERATION OF DMKPGSPR - 00366000
* 00367000
* 1. CALL DMKPTRPW TO INSURE THE USER IS NOT IN PAGE WAIT. 00368000
* THEN RELEASE THE ADDRESS RANGE CONTAINED IN REG1 THUR REG2. 00369000
* ALSO, UNLOCK ANY PAGES THAT MIGHT HAVE BEEN LOCKED. 00370000
* 00371000
* 00372000
*. 00373000
SPACE 00374000
DMKPGSPP RELOC 00375000
XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTES @V304635 00376000
B RELEASE JOIN COMMON CODE @V304635 00377000
SPACE 2 00378000
DMKPGSPR RELOC @VA04764 00379000
XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTES @VA04764 00380000
CALL DMKPTRPW @VA08037 00381100
OI SAVEWRK1,UNLOCK UNLOCK ANY LOCKED PAGES. @VA04764 00382000
B RELEASE JOIN WITH COMMON CODE @VA04764 00383000
SPACE 1 00384000
DMKPGSSS RELOC @V304635 00385000
XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTES @V304635 00386000
MVI SAVEWRK1,PARTIAL DON'T RELEASE NAMED SEGS @VA05039 00387000
SPACE 2 00388000
RELEASE SLR R3,R3 CLEAR @V304635 00389000
L R1,SAVER1 RESTORE CALLERS REGISTER @V304635 00390000
L R2,SAVER2 ALSO THIS ONE... @V304635 00391000
IC R3,VMSEG GET NUMBER OF SEGMENT TABLES @V304635 00392000
LA R3,1(,R3) CHANGE TO BASE 1. @V304635 00393000
SLL R3,20 ADDR. RANGE OF SEGTABLE. @V304635 00394000
BCTR R3,R0 ADDR. RANGE OF MEMORY @V304635 00395000
CLR R1,R3 RELEASING ABOVE MEMORY RANGE ? @V304635 00396000
BH EXIT YES - RETURN TO CALLER. @V304635 00397000
CLR R2,R3 LAST ADDR. GREATER THAN MEMORY @V304635 00398000
* SIZE ? 00399000
BNH *+6 NO - ITS O.K. TO USE IT. @V304635 00400000
LR R2,R3 LIMIT TO TOP OF MEMORY. @V304635 00401000
TM SAVEWRK1,PARTIAL WAS ENTRY FOR DMKPGSSS @V304635 00402000
BO PGOUT1 YES - RELEASE THE STORAGE RANGE @V407511 00403000
LR R4,R2 GET ENDING ADDRESS @V304635 00404000
SLR R4,R1 CALCULATE RANGE OF ADDRESSES @V304635 00405000
SRL R4,12 DROP DISPLACEMENT @V304635 00406000
SLR R5,R5 CLEAR @V304635 00407000
SRDL R4,4 SHIFT OUT THE PAGE NUMBER @V304635 00408000
LTR R5,R5 WAS IT PAGE 0 @V304635 00409000
BZ *+8 IF YES - SEGMENT COUNT IS OK @V304635 00410000
LA R4,1(,R4) ADD ONE TO SEGMENT COUNT @V304635 00411000
LTR R4,R4 MUST BE MIN. OF 1 SEGMENT @V304635 00412000
BNZ *+8 OK. IF ONE OR MORE @V304635 00413000
LA R4,1 SET SEGMENT TABLE COUNT FOR 1 @V304635 00414000
L R3,VMSEG GET ADDRESS OF SEGTABLE @V304635 00415000
LR R5,R1 FIRST ADDRESS TO RELEASE @V304635 00416000
SRL R5,16 LEAVE ONLY SEGMENT NUMBER @V304635 00417000
SLL R5,2 TIMES 4 FOR 4 BYTE ENTRIES @V304635 00418000
LA R3,0(R3,R5) POINT TO FIRST SEGTABLE ENTRY @V304635 00419000
PROCSHR DS 0H @V408246 00420000
ICM R10,B'0110',SEGPAGE+1 ANY PTE POINTER? @V408246 00421000
BZ PROCNEXT NO, SKIP @V408246 00422000
IC R10,SEGPAGE+3 GET REST OF PTE POINTER @V408246 00423000
N R10,CLCNTINV CLEAR UNWANTED BITS @V408211 00424000
SL R10,F8 POINT TO PAGE HEADER @V304635 00425000
L R10,0(,R10) GET POINTER TO (SHRTABLE) @V304635 00426000
LTR R10,R10 IS THERE ONE THERE ? @V304635 00427000
BZ PROCNEXT IF NOT - GET THE SEGTABLE ENTRY @V304635 00428000
CLC SHRSEGCT,F0 SHARED SEGMENT??? @V408246 00429000
BE PROCNEXT NOPE,BYPASS @V408246 00430000
LM R1,R2,SHRNAME GET NAME OF THIS SHRTABLE @V304635 00431000
CALL DMKPGSPS PURGE THE NAMED SYSTEM @V304635 00432000
B RELEASE CHECK OUT ALL SEGTABLE ENTRIES @V304635 00433000
SPACE 1 00434000
PROCNEXT LA R3,4(,R3) POINT TO NEXT SEGTABLE ENTRY @V304635 00435000
BCT R4,PROCSHR CONTINUE UNTIL COUNT EXHAUSHED @V304635 00436000
B PGOUT1 PROCESS MAINLINE ROUTINE @V407511 00437000
SPACE 1 00438000
EJECT 00439000
*. 00440000
* F. OPERATION OF DMKPGSPO 00441000
* 00442000
* 1. (SKIP PAGE WAIT CHECK..ENQUEUE INSTEAD) 00443000
* IF THE USER IS NOT USING A SHARED SEGMENT SYSTEM, SKIP TO 00444000
* STEP 6 BELOW; OTHERWISE, CONTINUE 00445000
* 2. DECREMENT AND TEST THE USE COUNT FOR THE SHARED SYSTEM; IF 00446000
* IT IS NOT ZERO, SKIP TO STEP 4 BELOW; OTHERWISE, CONTINUE 00447000
* 3. IF THE USE COUNT IS ZERO, UNCHAIN THE SHRTABLE FROM THE 00448000
* ACTIVE LIST AND FLAG THE SWPTABLE ENTRIES FOR ALL SHARED 00449000
* SEGMENTS AS NON-SHARED PAGES; FRET THE SHRTABLE AND 00450000
* SKIP TO STEP 5 00451000
* 4. IF USE COUNT IS NON-ZERO, INITIALIZE THE SEGMENT 00452000
* TABLE ENTRIES TO "NOT AVAILABLE" 00453000
* 5. DECREMENT COUNT OF SHARED SYSTEMS IN VMBLOK 00454000
* AND RETURN TO PGOUT2. 00455000
* 00456000
*. 00457000
SPACE 3 00458000
DMKPGSPO RELOC 00459000
XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTES @V304635 00460000
MVI SAVEWRK1,CALLPO FLAG ENTRY TO DMKPGSPO @V304635 00461000
TM SAVER2+3,NOCLEAR WAS NOCLEAR SPECIFIED ? @V304635 00462000
BZ *+8 NO @V304635 00463000
OI SAVEWRK1,NOCLEAR YES - SET FLAG BYTE @V304635 00464000
TM SAVER2+3,UNLOCK DID CALLER SPECIFY 'UNLOCK' @V304735 00465000
BZ *+8 NO @V304735 00466000
OI SAVEWRK1,UNLOCK UNLOCK ANY LOCKED PAGES @V304735 00467000
SPACE 1 00468000
TM SAVEWRK1,NOCLEAR WAS 'NOCLEAR' SPECIFIED @VM03225 00469000
BZ PGSPO1 IF NOT RELEASE ALL OF STORAGE @VM03225 00470000
TM VMOSTAT,VMSHR ANY SHARED NAMED SEGMENTS @VM03225 00471000
BO NEXTNAME IF YES - RELEASE THEM @VM03225 00472000
TM VMPSTAT,VMNSHR ANY NON-SHARED NAMED SEGMENTS @VM03225 00473000
BZ EXIT IF NOT, JUST RETURN TO CALLER @VM03225 00474000
SPACE 1 00475000
NEXTNAME SLR R2,R2 COUNT OF SEGTABLE ENTRIES @VM03225 00476000
L R3,VMSEG GET ADDRESS OF SEGTABLE @VM03225 00477000
SLDL R2,8 NUMBER OF SEGMENTS INTO R2 @VM03225 00478000
SRL R3,8 ADJUST TO 24 BIT ADDRESSING @VM03225 00479000
LA R2,1(,R2) CHANGE TO BASE OF 1 @VM03225 00480000
SLL R2,4 TIMES 16 ENTRIES PER SEGTABLE @VM03225 00481000
* LENGTH 00482000
NEWADDR DS 0H @V408246 00483000
ICM R9,B'0110',SEGPAGE+1 ANY PTE POINTER? @V408246 00484000
BZ NEXTADDR+6 NO, SKIP @V408246 00485000
IC R9,SEGPAGE+3 GET REST OF PTE POINTER @V408246 00486000
N R9,CLCNTINV CLEAR UNWANTED BITS @V408211 00487000
SL R9,F8 BACK-UP TO SHRTABLE POINTER @VM03225 00488000
L R10,0(,R9) GET POINTER TO SHRTABLE IF ANY @VM03225 00489000
LTR R10,R10 IS THIS A NAMED SEGMENT @VM03225 00490000
BZ NEXTADDR IF NOT - KEEP LOOKING @VM03225 00491000
CLC SHRSEGCT(L'SHRSEGCT),F0 SHARED SEGMENT ? @VA04403 00492000
BE NEXTADDR NO - PROCESS NEXT SEGMENT @VA04403 00493000
IC R2,VMSEG GET NUMBER OF SEGMENTS @VA07849 00493100
LA R2,1(R2) ADD ONE TO GET END OF STOR @VA07849 00493200
SLL R2,20 NOW MAKE IT AN ADDRESS @VA07849 00493300
BCTR R2,0 SUBTRACT ONE FOR END OF STOR @VA07849 00493400
BAL R14,GOTSHTBL RELEASE SHARED SYSTEM @VA04403 00494000
B NEXTNAME CHECK FOR MORE SHARED SYSTEMS @VA04403 00495000
SPACE 1 00496000
NEXTADDR XC 0(4,R9),0(R9) CLEAR POINTER TO SHRTABLE(MAYBE) @VA04403 00497000
LA R3,4(,R3) POINT TO NEXT SEGTABLE ENTRY @VA04403 00498000
BCT R2,NEWADDR PROCESS ALL SEGTABLE ENTRIES @VM03225 00499000
NI VMPSTAT,X'FF'-VMNSHR RESET NON-SHARE INDICATOR @VM03225 00500000
B EXIT @V408246 00501000
SPACE 2 00502000
EJECT 00503000
SPACE 00504000
* FOR PREVIOUS SHARED SYSTEM IPL--MUST CLEAN UP 00505000
SPACE 00506000
USING SHRTABLE,R10 00507000
GOTSHTBL DS 0H @VA08861 00508500
STM R1,R4,SAVEWRK3 ... @V304635 00509000
ST R14,SAVEWRK9 SAVE BRANCH RETURN REGISTER @V304635 00510000
TM SAVEWRK1,PURGE PURGING A NAMED SHARED SYSTEM? @V408246 00511000
BZ NOTPURGE NO @V408246 00512000
CLC SHRNAME,SAVER1 DO THE NAMES MATCH? @V408246 00513000
BNE GTRETURN NO, RETURN TO CALLER @V407511 00514000
NOTPURGE DS 0H @V408246 00515000
LR R14,R3 GET CURRENT SEGMENT TABLE ENTRY @V4M0191 00516000
L R15,VMSEG LOAD SEGMENT TABLE ORIGIN @VA07241 00517100
LA R15,0(,R15) CLEAR LENGTH BITS @VA07241 00517200
SLR R14,R15 GET DISPLACEMENT OF ENTRY @VA07241 00517300
SRL R14,2 GET CURRENT SEGMENT NUMBER @V4M0191 00518000
CLM R14,B'0001',SHRSEGNM ALREADY PROCESSED THIS @V4M0191 00519000
* NAMED SYSTEM @V4M0191 00520000
BH GTRETURN YES, JUST RETURN TO MAINLINE @V4M0191 00521000
NI SAVEWRK1+3,X'FF'-PGPROCIP-PGVMAFND-NPROTECT @V60B7AA 00522205
* RESET INTERNAL SHARED CONTROL FLG@V60BC11 00522210
C R11,LASTUSER ACTIVE? @V408246 00523000
BNE NOTCHG NO NEED TO CHECK @V408246 00524000
CALL DMKVMASH CHECK FOR CHANGED PAGE BEFORE @V408246 00525000
* RELEASE 00526000
BZ NOTCHG OK @V408246 00527000
USING VMABLOK,R1 @VA08861 00529150
ICM R1,B'1111',VMASSIST SEE IF THERE IS A VMABLOK? @VA08861 00529160
BZ ANOTCHG1 NO, CONTINUE @VA08861 00529170
ANOTCHG DS 0H @VA08861 00529180
CLC VMANAME,SAVER1 IS THIS OURS? @VA08861 00529190
BE NOTCHG YES,VMAPS DID NOT GET OURS 00529200
L R1,VMAFPNT GET THE NEXT IF ANY @VA08861 00529210
LTR R1,R1 IS THERE ANOTHER VMABLOK? @VA08861 00529220
BNZ ANOTCHG YES,GO SEE IF WE CAN FIND OUR @VA08861 00529230
* SHAREDNAME 00529240
DROP R1 @VA08861 00529250
ANOTCHG1 DS 0H @VA08861 00529260
TM SAVEWRK1,PURGE IS THIS A PURGE REQUEST? @VA08861 00529270
BNO GTRETURN NO,CONTINUE @VA08861 00529280
LM R1,R4,SAVEWRK3 RESTORE REGS OVER CALL TO VMASH @VA08861 00529290
NI SEGPAGE+3-SEGPAGE(R3),X'FF'-SEGINV RESET SEGINV @VA08555 00529600
B TESTPUR VMA MUST OF GOT THE VMABLOK @VA08861 00529851
NOTCHG DS 0H @V408246 00530000
CALL DMKPTRPW @VA08037 00531100
EJECT 00532000
* 00533000
* SEARCH FOR USER'S VMA BLOCK 00534000
* 00535000
GTVMABK DS 0H @V408246 00536000
TM SHRFLAG,SHRNOPRT RUNNING UNPROTECTED @V60BC11 00536200
BZ GTVMABK1 NO, SKIP SETTING INDICATOR @V60BC11 00536300
OI SAVEWRK1+3,NPROTECT SET UNPROTECTED INDICATOR @V60BC11 00536400
B NVMABK CONTINUE PROCESSING @V60BC11 00536500
GTVMABK1 DS 0H @V60BC11 00536600
LA R1,VMASSIST ANCHOR OF VMABLOKS @V408246 00537000
USING VMABLOK,R1 @V408246 00538000
CHKVMABK LR R15,R1 SAVE BACKWARD CHAIN POINTER @V408246 00539000
ICM R1,B'1111',VMAFPNT GET NEXT VMABLOK ON CHAIN @V408246 00540000
BZ GTRETURN NO MORE, DMKVMA MUST HAVE DONE IT@V407511 00541000
CLC SHRNAME,VMANAME IS THIS THE NAMED SYSTEM @V408246 00542000
BNE CHKVMABK IF NOT - GET THE NEXT ONE @V408246 00543000
TM SAVEWRK1,PURGE+CALLPO PURGING NAMED SYSTEM OR @VA07849 00544100
* ALL OF STORAGE 00544200
BZ CHKVMAB1 NO @VA07849 00544300
OI SAVEWRK1,SYSFND YES, INDICATE SYSTEM FOUND @V408246 00546000
CHKVMAB1 DS 0H @VA07849 00546100
L R14,VMAFPNT SAVE FORWARD CHAIN POINTER @V408246 00547000
LH R6,VMSHRSYS IS THIS LAST VMABLOK @VA09427 00547100
BCT R6,NOTLAST NO,WE ARE STILL SHARED SYSTEM @VA09427 00547300
NI VMOSTAT,255-VMSHR TURN OFF VMSHR @VA09427 00547500
NOTLAST DS 0H @VA09427 00547700
ST R14,0(,R15) STORE IT IN BACKWARD CHAIN BLOK @V408246 00548000
LA R0,VMASIZE GET SIZE OF ONE VMABLOK @V408246 00549000
CALL DMKFRET RELEASE THIS VMABLOK @V408246 00550000
NVMABK DS 0H @V60BC11 00550200
TM SAVEWRK1,PURGE PURGING A NAMED SHARED SYSTEM? @V60BC11 00550400
BZ *+8 NO @V60BC11 00550600
OI SAVEWRK1,SYSFND YES, INDICATE SYSTEM FOUND @V60BC11 00550800
DROP R1 @V408246 00551000
TM APSTAT1,PROCIPL RUNNING ON MAIN (IPL) PROC? @V60B7AA 00552100
BZ ATTPROC NO, LEAVE BIT TO INDICATE ATTACH @V407511 00553000
OI SAVEWRK1+3,PGPROCIP INDICATE MAIN (IPL) PROC. @V60B7AA 00554100
ATTPROC DS 0H @V407511 00555000
OI SAVEWRK1+3,PGVMAFND INDICATE VMABLOK FOUND FOR @V407511 00556000
* THIS NAMED SYSTEM @V407511 00557000
EJECT 00558000
* 00559000
* SEARCH SEGMENT TABLE FOR MATCHING PAGE TABLE POINTERS 00560000
* 00561000
L R3,SHRSEGCT LOAD NUMBER OF SHARED SEGMENTS @V408246 00562000
BCTR R3,0 -1 FOR ORIGIN 0 @V408246 00563000
MVI SAVEWRK1+2,INITPASS INIT TO NO SEGMENTS FOUND @V408211 00564000
SGFND DS 0H FIND SEGMENT BELONGING TO THIS @V408246 00565000
* SHARED SYS 00566000
SLR R9,R9 ZIP REG @V407511 00567000
IC R9,SHRSEGNM(R3) INSERT SEGMENT NUMBER @V407511 00568000
SLL R9,2 MULTIPLY BY 4 FOR INDEXING @V407511 00569000
AL R9,VMSEG LOAD ADDR SEGTABLE ENTRY @V407511 00570000
USING SEGTABLE,R9 @V407511 00571000
L R5,SEGPAGE LOAD ADDRESS OF PTO @V407511 00572000
N R5,CLINVBIT CLEAR INVALID BIT @V407511 00573000
LA R5,0(,R5) CLEAR PTE COUNT @V407511 00574000
EJECT 00575000
* 00576000
* FOUND STE WITH MATCHING PTO 00577000
* 00578000
SGFNDD DS 0H FOUND DESIRED SHARED SEGMENT @V408246 00579000
CLI SAVEWRK1+2,NOTINUSE IS THIS THE 1ST ONE FOUND? @V407511 00580000
BNH SGFNDE NO, AND SYSTEM NOT STILL IN USE @V408246 00581000
OI VMESTAT,VMINVPAG RAISE PAGE RESET FLAG @V408246 00582000
NI VMDSTAT,255-VMDSP ASSURE NO FAST REDSP @V408246 00583000
LH R1,SHRUSECT FIRST ONE, CHECK SYSTEM USE COUNT@V408246 00584000
BCT R1,GOTUSA STILL IN USE @V407511 00585000
LM R1,R2,SHRFPNT COUNT IS ZERO, UNCHAIN THE SHR @V408246 00586000
* TABLE 00587000
STCM R1,B'0111',SHRFPNT+1-SHRTABLE(R2) FROM THE @V60BC11 00588000
ST R2,SHRBPNT-SHRTABLE(,R1) ACTIVE LIST @V408246 00589000
MVI SAVEWRK1+2,NOTINUSE FLAG SYSTEM NO LONGER IN USE@V407511 00590000
SGFNDE DS 0H @V408246 00591000
SL R5,F16 BACK-UP TO PAGE TABLE HEADER @V408246 00592000
CLI SAVEWRK1+2,NOTINUSE SHARED SYSTEM STILL IN USE @V407511 00593000
BL GOTUSAA YES @V407511 00594000
L R4,PAGTSWP+SWPVM-SWPTABLE(,R5) SAVE OLD OWNER @V408211 00595000
ST R11,PAGTSWP+SWPVM-SWPTABLE(,R5) PROUD NEW OWNER @V408211 00596000
* OF THIS SEGMENT @V408211 00597000
STCK PAGSTMP-PAGTABLE(R5) NEW TIME STAMP @V408246 00598000
BC 12,CLOCKOK IS CLOCK FUNCTIONING? @V408246 00599000
DOWNWEGO DS 0H CLOCK DAMAGED - ABEND CVT001 @V408246 00600000
GOTO DMKCVTAB @V408246 00601000
CLOCKOK DS 0H CONTINUE @V408246 00602000
SR R0,R0 CLEAR @V408246 00603000
ST R0,PAGACT-PAGTABLE(,R5) CLEAR COUNTS @V408246 00604000
TM SAVEWRK1,PURGE+CALLPO PURGING NAMED SYSTEM OR @VA07849 00605100
* ALL OF STORAGE 00605200
BNZ SGFNDE1 YES, DON'T CLEAR SHRTABLE PTR @VA07849 00605300
ST R0,PAGSHR-PAGTABLE(,R5) CLEAR NAMED PNTR. @V408246 00608000
SGFNDE1 DS 0H @VA07849 00608100
LA R8,PAGTSWP+SWPFLAG-SWPTABLE(,R5) 1ST SWAP TABLE @V408211 00609000
* ENTRY @V408211 00610000
B GOTUSAB JOIN CODE BELOW @V407511 00611000
GOTUSA DS 0H SHARED SEGMENT STILL IN USE @V407511 00612000
STH R1,SHRUSECT UPDATE COUNT OF TOTAL USERS @V408246 00613000
MVI SAVEWRK1+2,INUSE FLAG SEGMENT FOUND AND SYSTEM @V407511 00614000
* IN USE 00615000
SL R5,F16 BACK-UP TO PAGE TABLE HEADER @V408246 00616000
GOTUSAA DS 0H @V407511 00617000
L R4,PAGTSWP+SWPVM-SWPTABLE(,R5) SAVE ORIG OWNER @V408211 00618000
CR R11,R4 IS THIS THE OWNER OF THE SEGMENT?@V408246 00619000
BNE *+10 NO @V408246 00620000
MVC PAGTSWP+SWPVM-SWPTABLE(4,R5),ASYSVM YES, GIVE TO@V408211 00621000
* SOMEONE ELSE @V408211 00622000
GOTUSAB DS 0H @V407511 00623000
SVC 20 GET ANOTHER SAVEAREA @VA07849 00623100
SLR R0,R0 ZIP REG 0 @VA07849 00623200
ST R0,SAVER12 ZERO BASE ADDR TO PREVENT SVC @VA07849 00623300
* FROM UNLOCKING MODULE 00623400
L R1,SAVER13 GET ADDR OF ORIGINAL SAVEAREA @VA07849 00623500
MVC SAVEWRK1,SAVEWRK1-SAVEAREA(R1) COPY FLAGS @VA07849 00623600
MVC SAVER1(8),SAVER1-SAVEAREA(R1) COPY SYSTEM NAME @VA07849 00623700
* DETERMINE IF THERE ARE TWO SETS OF PAGE AND SWAP TABLES TO PROCESS. 00624000
* THERE ARE TWO IF THE MP FEATURE IS INSTALLED AND THE SYSTEM IS 00624100
TM SAVEWRK1+3,NPROTECT RUNNING UNPROTECTED @V60BC11 00624130
BO GOTCOM1A YES, JOIN COMMON CODE @V60BC11 00624160
* GENERATED FOR AP MODE. 00624200
TM APSTAT1,MPFEAT IS THE MP FEATURE INSTALLED @V5BC0AB 00624300
BNO GOTCOM1A NO, JOIN COMMON CODE @V5BC0AB 00624400
L R14,PGSSYSAP EST. ADDRESSABILITY TO DMKSYSAP @V5BC0AB 00624500
CLI 0(R14),YES IS SYSTEM GENED FOR AP? @V5BC0AB 00624600
BNE GOTCOM1A NO, JOIN COMMON CODE @V5BC0AB 00624700
LR R1,R5 LOAD ORIG PAGTABLE ADDR IN R1 @V407511 00628000
TM SAVEWRK1+3,PGPROCIP START ON MAIN (IPL) PROC? @V60B7AA 00629100
BZ GOTAPU NO, STARTED ON ATTACHED @V407511 00630000
AL R1,DCPAGBMP YES, ADD TO GET ADDR OF ATTACHED @V407511 00631000
* PAGTABLE @V407511 00632000
B GOTCOM JOIN COMMON CODE @V407511 00633000
GOTAPU DS 0H @V407511 00634000
SL R1,DCPAGBMP SUBTRACT FOR ADDR. MAIN (IPL) PGT @V60B7AA 00635100
GOTCOM DS 0H @V407511 00636000
CLI SAVEWRK1+2,INUSE SYSTEM STILL IN USE @VA07849 00636200
BE GOTCOMP YES, SKIP RESETING HEADER @VA07849 00636400
USING PAGTABLE,R5 @V407511 00637000
MVC PAGTSWP+SWPVM-SWPTABLE(4,R1),PAGTSWP+SWPVM-SWPTABLE(R5) 00638000
* COPY THE VMBLOK ADDR OF OWNER @V4M0213 00639000
MVC PAGSTMP-PAGTABLE(,R1),PAGSTMP COPY TIME STAMP @V407511 00640000
MVC PAGACT-PAGTABLE(4,R1),PAGACT COPY COUNTER @V407511 00641000
MVC PAGSHR-PAGTABLE(,R1),PAGSHR COPY SHRTABLE PTR @VA07849 00642100
GOTCOMP DS 0H @V407511 00643000
LR R5,R1 PROCESS OTHER SET FIRST @VA07849 00643200
AL R1,F16 GET ADDRESS OF PTO @VA07849 00643400
STCM R1,B'0111',1(R9) UPDATE STE @VA07849 00643600
BAL R14,PROCPAGE GO PROCESS PAGTABLE @V407511 00644000
STM R3,R10,SAVER3 SAVE REGS R3 - R10 @VA07849 00644200
ST R2,SAVEWRK5 SAVE REG R2 @VA07849 00644400
L R1,0(,R9) LOAD ADDR PTR JUST PROCESSED @V407511 00645000
ST R1,SAVEWRK6 SAVE ORIGINAL STE @VA07849 00645200
LA R1,0(,R1) CLEAR PTE COUNT @VA07282 00645500
TM SAVEWRK1,NOCLEAR CALLER SPECIFY NOCLEAR OPT @VA07849 00645510
BZ GOTCOMPA NO, RELEASE THE PAGTABLE @VA07849 00645520
CLI SAVEWRK1+2,NOTINUSE LAST USER OF SYSTEM @VA07849 00645530
BNE GOTCOMP1 NO, SKIP RESETING PAGTABLE @VA07849 00645540
GOTCOMPA DS 0H @VA07849 00645550
LR R3,R9 ADDR OF STE TO REG 3 @VA07849 00645560
LR R9,R1 ADDR OF PTO TO REG 9 @VA07849 00645570
LR R5,R1 GET ADDR OF PTO @VA07849 00645580
SL R5,F16 BACKUP TO HEADER @VA07849 00645590
LA R5,PAGTSWP(,R5) GET ADDR OF SWPTABLE @VA07849 00645600
LA R5,SWPFLAG-SWPTABLE(,R5) ADDR FIRST SWPTABLE ENT@VA07849 00645610
L R1,SAVER13 GET ADDR ORIGINAL SAVEAREA @VA07849 00645620
L R2,SAVEWRK4-SAVEAREA(,R1) GET ENDING ADDRESS @VA07849 00645630
LR R1,R3 GET ADDR CURRENT STE @VA07849 00645640
LA R1,0(,R1) CLEAR PTE COUNT @VA07849 00645650
L R14,VMSEG GET ADDR START OF SEGTABLE @VA07849 00645660
LA R14,0(,R14) CLEAR SEGTABLE SIZE @VA07849 00645670
SR R1,R14 GET SEGMENT NUMBER * 4 @VA07849 00645680
SRL R1,2 GET SEGMENT NUMBER @VA07849 00645690
SLL R1,16 FORM VIRTUAL STARTING ADDRESS @VA07849 00645700
BAL R14,RELAPAGE RELEASE THE PAGTABLE @VA07849 00645710
LM R3,R10,SAVER3 RESTORE REGS R3 - R10 @VA07849 00645720
L R2,SAVEWRK5 RESTORE REG R2 @VA07849 00645730
L R1,SAVEWRK6 GET ORIGINAL STE VALUE @VA07849 00645740
ST R1,0(,R9) RESTORE STE @VA07849 00645750
LA R1,0(,R1) CLEAR PTE COUNT @VA07849 00645760
GOTCOMP1 DS 0H @VA07849 00645770
TM SAVEWRK1+3,PGPROCIP START ON MAIN (IPL) PROC? @V60B7AA 00646100
BZ GOTAPU1 NO, STARTED ON ATTACHED PROC @V407511 00647000
SL R1,DCPAGBMP BACK UP TO IPL PROC (1ST) PAGTABLE @V60B7AA 00648300
B GOTCOM1 CONTINUE PROCESSING @V407511 00649000
GOTAPU1 DS 0H @V407511 00650000
AL R1,DCPAGBMP BUMP TO ATTACHED PAGTABLE @VA07849 00651200
GOTCOM1 DS 0H @V407511 00652000
STCM R1,B'0111',SEGPAGE+1-SEGTABLE(R9) HOOK STE - PTO@VA07282 00653500
LR R5,R1 PTO ADDR TO R5 @V407511 00654000
LA R5,0(,R5) CLEAR COUNT @V407511 00655000
SL R5,F16 BACKUP TO HEADER @V407511 00656000
GOTCOM1A DS 0H @V407511 00657000
BAL R14,PROCPAGE PROCESS A PAGTABLE @V407511 00658000
TM SAVEWRK1,NOCLEAR CALLER SPECIFY NOCLEAR OPT @VA07849 00658010
BO GOTCOM4 YES, SKIP RELEASING PAGTABLE @VA07849 00658020
STM R3,R10,SAVER3 SAVE REGS R3 - R10 @VA07849 00658030
ST R2,SAVEWRK5 SAVE REG R2 @VA07849 00658040
L R1,0(,R9) GET ORIGIN STE VALUE @VA07849 00658050
ST R1,SAVEWRK6 SAVE ORIGINAL STE @VA07849 00658060
LR R3,R9 ADDR OF STE TO R3 @VA07849 00658070
LR R9,R1 ADDR OF PTO TO R9 @VA07849 00658080
LR R5,R1 GET ADDR OF PTO @VA07849 00658090
SL R5,F16 BACKUP TO HEADER @VA07849 00658100
LA R5,PAGTSWP(,R5) GET ADDR OF SWPTABLE @VA07849 00658110
LA R5,SWPFLAG-SWPTABLE(,R5) ADDR FIRST SWPTABLE ENT@VA07849 00658120
L R1,SAVER13 GET ADDR ORIGINAL SAVEAREA @VA07849 00658130
L R2,SAVEWRK4-SAVEAREA(,R1) GET ENDING ADDRESS @VA07849 00658140
LR R1,R3 GET ADDR CURRENT STE @VA07849 00658150
LA R1,0(,R1) CLEAR PTE COUNT @VA07849 00658160
L R14,VMSEG GET STARTING ADDR SEGTABLE @VA07849 00658170
LA R14,0(,R14) CLEAR SEGTABLE SIZE @VA07849 00658180
SR R1,R14 GET SEGMENT NUMBER * 4 @VA07849 00658190
SRL R1,2 GET SEGMENT NUMBER @VA07849 00658200
SLL R1,16 FORM VIRTUAL STARTING ADDRESS @VA07849 00658210
BAL R14,RELAPAGE RELEASE THE PAGTABLE @VA07849 00658220
LM R3,R10,SAVER3 RESTORE REGS R3 - R10 @VA07849 00658230
L R2,SAVEWRK5 RESTORE REG R2 @VA07849 00658240
CLC 0(4,R9),F1 WAS PAGTABLE RELEASED @VA07849 00658250
BE GOTCOM4 YES, DON'T HAVE TO RESET STE @VA07849 00658260
L R1,SAVEWRK6 GET STE ENTRY @VA07849 00658270
ST R1,0(,R9) RESTORE STE VALUE @VA07849 00658280
EJECT 00673000
* 00674000
* DONE PROCESSING PAGE ENTRIES FOR THIS SEGMENT 00675000
* 00676000
GOTCOM4 DS 0H @V407511 00677000
SVC 16 RETURN ADDITIONAL SAVEAREA @VA07849 00677200
CLI SAVEWRK1+2,NOTINUSE SHARED SEGMENT STILL IN USE?@V407511 00678000
BNE GOTCOM4A YES, RESET HEADER @VA07849 00679100
TM SAVEWRK1,NOCLEAR WAS NOCLEAR OPT SPECIFIED @VA07849 00679200
BZ GOTUSE NO, ALL DONE WITH PAGTABLE @VA07849 00679300
SLR R1,R1 YES, ZERO REG @VA07849 00679400
ST R1,PAGSHR ZERO POINTER TO SHRTABLE @VA07849 00679500
B GOTUSE CONTINUE PROCESSING NEXT PAGTABLE@VA07849 00679600
GOTCOM4A DS 0H @VA07849 00679700
LA R9,0(,R9) CLEAR COUNT FIELD @V408246 00680000
TM 3(R9),SEGINV VALID STE? @V408246 00681000
BO GOTUSD NO @V407511 00682000
STCK TEMPR2 GET CURRENT TIME @V407511 00683000
BC 3,DOWNWEGO ABEND CVT001 @V407511 00684000
L R7,TEMPR2 LOAD NEW TIME STAMP @V407511 00685000
ST R7,PAGSTMP TIME-STAMP SEGMENT @V407511 00686000
L R1,PAGACT LOAD CURRENT ACTIVE COUNT @V407511 00687000
TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 00688000
BO CSLOOP1 YES, USE COMPARE & SWAP LOGIC @V407511 00689000
S R1,UPDTACT NO, DECREMENT ACTIVE COUNT @V407511 00690000
ST R1,PAGACT STORE UPDATED COUNTER @V407511 00691000
B GOTUSD BRANCH AROUND ATTACHED CODE @V407511 00692000
CSLOOP1 DS 0H @V407511 00693000
LR R7,R1 LOAD FOR COMPARE & SWAP @V407511 00694000
S R7,UPDTACT DECREMENT ACTIVE COUNT @V407511 00695000
CS R1,R7,PAGACT UPDATE THE ACTIVE COUNTER @V407511 00696000
BNZ CSLOOP1 SOMEBODY BEAT ME TO IT, TRY AGAIN@V407511 00697000
GOTUSD DS 0H @V407511 00698000
LH R7,PAGTOT DECREMENT @V407511 00699000
BCTR R7,0 TOTAL SEGMENT USE COUNT @V408246 00700000
STH R7,PAGTOT @V407511 00701000
TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 00702000
BZ GOTUSD1 NO, SKIP SECOND UPDATE @V407511 00703000
TM SAVEWRK1+3,NPROTECT RUNNING UNPROTECTED @V60BC11 00703500
BO GOTUSD1 YES, SKIP SECOND UPDATE @V60BC11 00703510
TM SAVEWRK1+3,PGPROCIP START ON MAIN (IPL) PROC? @V60B7AA 00704100
BO DECRATT YES- PROCESS AP COPY NOW @V4M0125 00705000
SL R5,DCPAGBMP BACK TO HDR OF IPL PROC (1ST) PGT@V60B7AA 00706100
STH R7,PAGTOT SAVE NEW TOTAL COUNT @V4M0125 00707000
LA R5,PAGBMP(R5) RESTORE REGISTER @V4M0125 00708000
B GOTUSD1 @V4M0125 00709000
DECRATT DS 0H DECREMENT AP COUNT NOW @V4M0125 00710000
STH R7,PAGBMP+PAGTOT-PAGTABLE(,R5) UPDATE ATTACHED @V407511 00711000
* PROC TOTAL COUNTER (2ND SET OF TABLES) 00712100
GOTUSD1 DS 0H @V407511 00713000
LA R7,SEGINV INVALID FLAG @V408246 00714000
ST R7,0(,R9) INVALIDATE STE @V408246 00715000
EJECT 00716000
* 00717000
* CHECK FOR MORE PAGE TABLES IN SHARED, NAMED SYSTEM 00718000
* 00719000
GOTUSE DS 0H @V407511 00720000
S R3,F1 DECREMENT SEGMENT NUMBER INDEX @V4M0179 00721000
BNM SGFND IF MORE, KEEP LOOKING @V408246 00722000
SPACE 3 00723000
* 00724000
* ALL PTO'S HANDLED 00725000
* 00726000
CLI SAVEWRK1+2,NOTINUSE SHARED SYSTEM RESET? @V407511 00727000
BH GTRETURN NO SEGMENTS FOUND @V407511 00728000
BL DECVMSHR YES, DONE PROCESSING @V408246 00729000
LR R1,R10 GET ADDRESS @V408246 00730000
LH R0,SHRTSIZE AND SIZE OF SHRTABLE @V408246 00731000
TM SAVEWRK1,PURGE PURGING A NAMED SYSTEM ? @V408246 00732000
BZ FRETSHR NO - RELEASE THE SHRTABLE @V408246 00733000
STM R0,R1,SAVEWRK7 SAVE LENGTH/ADDRESS OF SHRTABLE @V408246 00734000
OI SAVEWRK1,SYSFND+SYSFRET FOUND BUT NOT FRETTED @V408246 00735000
B DECVMSHR DECREMENT USER SHARED COUNT @V408246 00736000
FRETSHR CALL DMKFRET FRET THE SHRTABLE @V408246 00737000
EJECT 00738000
* 00739000
* PROCESSESING FINISHED, DECREMENT COUNT 00740000
* 00741000
DECVMSHR LH R1,VMSHRSYS GET COUNT OF SHARED SYSTEMS @V408246 00742000
BCT R1,STVMSHR DECREMENT AND TEST @V408246 00743000
NI VMOSTAT,255-VMSHR IF ZERO, TURN OFF SHARED @V408246 00744000
STVMSHR STH R1,VMSHRSYS STORE NEW COUNT @V408246 00745000
GTRETURN DS 0H @V407511 00746000
LM R1,R4,SAVEWRK3 RESTORE REGISTERS @V407511 00747000
L R14,SAVEWRK9 RETURN ADDRESS FOR CALLER @V408246 00749000
BR R14 RETURN TO CALLER @V408246 00750000
DROP R10 @V408246 00751000
EJECT 00752000
PROCPAGE DS 0H @V407511 00753000
ST R14,SAVEWRK2 SAVE RETURN ADDRESS @V407511 00754000
PROUSAB1 DS 0H @V407511 00755000
TM 3(R9),SEGINV SEGMENT VALID? @V408246 00756000
BZ PROUSAC YES @V407511 00757000
NI 3(R9),255-SEGINV NO, VALIDATE IT @V408246 00758000
CLI SAVEWRK1+2,NOTINUSE LAST USER? @V407511 00759000
BE PROUSAC YES, BYPASS ACTIVE COUNTER @VA07282 00760500
L R0,PAGACT LOAD ACTIVE COUNTER @V407511 00761000
TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 00762000
BO CSLOOP2 YES, USE COMPARE & SWAP LOGIC @V407511 00763000
AL R0,UPDTACT NO, INCREMENT ACTIVE COUNT @V407511 00764000
ST R0,PAGACT STORE UPDATED COUNTER @V407511 00765000
B PROUSAC BRANCH AROUND ATTACHED CODE @V407511 00766000
CSLOOP2 DS 0H @V407511 00767000
LR R1,R0 LOAD FOR COMPARE & SWAP @V407511 00768000
AL R1,UPDTACT INCREMENT ACTIVE COUNT @V407511 00769000
CS R0,R1,PAGACT UPDATE ACTIVE COUNTER @V407511 00770000
BNZ CSLOOP2 SOMEBODY BEAT ME, TRY AGAIN @V407511 00771000
PROUSAC DS 0H @V407511 00772000
LR R1,R9 @V407511 00773000
L R2,VMSEG ADDRESS OF 1ST STE @V408246 00774000
LA R2,0(,R2) CLEAR COUNT FIELD @V408246 00775000
SR R1,R2 @V407511 00776000
SLL R1,14 ADDRESS OF 1ST PAGE IN SEGMENT @V407511 00777000
SR R7,R7 CLEAR @V408246 00778000
IC R7,0(,R9) (PTE COUNT * 16) - 16 @V408246 00779000
LA R7,16(,R7) PTE COUNT * 16 @V408246 00780000
SRL R7,4 PTE COUNT @V408246 00781000
LA R8,PAGTSWP+SWPFLAG-SWPTABLE(,R5) POINT TO 1ST @V408211 00782000
* SWPTABLE ENTRY @V408211 00783000
USING SWPFLAG,R8 @V408246 00784000
EJECT 00785000
* 00786000
* PROCESS INDIVIDUAL TABLE ENTRIES FOR EACH PAGE IN THIS 00787000
* SEGMENT 00788000
* 00789000
PROUSB DS 0H @V407511 00790000
C R4,PAGTSWP+SWPVM-SWPTABLE(,R5) WAS SEGMENT @V408211 00792000
* OWNER SWITCHED? @V408211 00793000
BE PROUSBA NO, BYPASS BACKING COUNT RESET @V407511 00794000
CLI SAVEWRK1+2,NOTINUSE SHARED SEGMENT STILL IN USE?@V407511 00795000
BNE *+8 YES @V408246 00796000
NI SWPFLAG,X'FF'-SWPSHR NO, RESET SHARED FLAG @V408246 00797000
TM SWPFLAG,SWPRECMP BACKING STORE ALLOCATED? @V408246 00798000
BO PROUSBA @V407511 00799000
SR R2,R2 CLEAR @V408246 00800000
IC R2,SWPCODE GET VOLUME INDEX CODE @V408246 00801000
SLL R2,3 GET VOLUME INDEX CODE @V408246 00802000
AL R2,=A(DMKSYSOW) POINT TO OWNED LIST ENTRY @V408246 00803000
LH R2,OWNDRDEV-OWNDLIST(,R2) GET RDEVBLOK INDEX @V408246 00804000
SLL R2,3 CONVERT TO BYTE INDEX @V408246 00805000
AL R2,ARIODV POINT TO RDEVBLOK @V408246 00806000
USING RDEVBLOK,R2 @V408246 00807000
LA R15,VMPDRUM-VMBLOK ASSUME DRUM @V408246 00808000
CLI RDEVTYPE,TYP2305 CORRECT? @V408246 00809000
BE *+8 YES @V408246 00810000
LA R15,VMPDISK-VMBLOK NO, RESET TO DISK COUNTER @V408246 00811000
LH R0,0(R15,R4) DECREMENT @V408246 00812000
S R0,F1 ORIGINAL OWNER'S COUNT @V408246 00813000
BM *+8 ERROR, BYPASS STORE @V408246 00814000
STH R0,0(R15,R4) @V408246 00815000
LH R0,0(R15,R11) INCREMENT @V408246 00816000
A R0,F1 NEW OWNER'S COUNT @V408246 00817000
STH R0,0(R15,R11) @V408246 00818000
DROP R2 @V408246 00819000
EJECT 00820000
PROUSBA DS 0H PROCESS PAGE'S PAGE TABLE ENTRY @V407511 00821000
TRANS 2,1,OPT=(DEFER) MAKE SURE PAGE ISNT INTRANSIT @VA12777 00822500
BNZ PROUSC PAGE NOT AVAILABLE @V407511 00823000
SRL R2,12 REAL PAGE NUMBER @V408246 00824000
SLL R2,4 PAGE NUMBER * 16 @V408246 00825000
A R2,ACORETBL CORE TABLE ENTRY FOR THIS PAGE @V408246 00826000
DROP R7 @V408246 00827000
USING CORTABLE,R2 @V408246 00828000
CLI SAVEWRK1+2,NOTINUSE SHARED SEGMENT STILL IN USE?@V407511 00829000
BNE PROUSBB YES @V407511 00830000
NI CORFLAG,255-CORSHARE NO, UNSHARE PAGE @V408246 00831000
L R14,=A(DMKPTRSC) POINTER TO SHARED PAGE COUNTER @V408246 00832000
L R15,0(,R14) DECREMENT @V408246 00833000
BCTR R15,0 COUNT OF SHARED PAGES @V408246 00834000
ST R15,0(,R14) @V408246 00835000
L R14,CORFPNT CURRENT OWNER OF PAGE @V408246 00836000
TM CORFLAG,CORCFLCK FRAME LOCKED ?? @VA07798 00836200
BO PROUSBA1 YES, SKIP UPDATE OF FRAME COUNT @VA07798 00836400
LH R15,VMPAGES-VMBLOK(,R14) DECREMENT @V408246 00837000
BCTR R15,0 OLD OWNER'S COUNT @V408246 00838000
LTR R15,R15 VMPAGES TO GO NEGATIVE ? @VA07224 00838100
BM PGS1 YES - TERMINATE CP @VA07224 00838200
STH R15,VMPAGES-VMBLOK(,R14) @V408246 00839000
PROUSBA1 DS 0H @VA07798 00839200
LR R14,R11 NEW OWNER OF PAGE @V408246 00840000
TM CORFLAG,CORCFLCK FRAME LOCKED? @VA09446 00840100
BO PROUSBD YES, SKIP UPDATE OF FRAME COUNT @VA09446 00840200
B PROUSBC @V407511 00841000
PROUSBB DS 0H @V407511 00842000
CL R11,CORFPNT THIS PAGE BELONG HERE? @V408246 00843000
BNE PROUSC @V407511 00844000
L R14,PAGTSWP+SWPVM-SWPTABLE(,R5) NEW OWNER @VA09446 00844100
TM CORFLAG,CORCFLCK FRAME LOCKED ?? @VA07798 00844200
BO PROUSBD YES, SKIP UPDATE OF FRAME COUNT @VA09446 00844450
LH R15,VMPAGES DECREMENT @V408246 00845000
S R15,F1 IN-CORE PAGE COUNT @V408246 00846000
BM PGS1 VMPAGES NEGATIVE - TERMINATE CP @VA07224 00846100
STH R15,VMPAGES @V408246 00847000
PROUSBC DS 0H @V407511 00849000
LA R15,1 INCREMENT @V408246 00850000
AH R15,VMPAGES-VMBLOK(,R14) IN-CORE PAGE COUNT @V408246 00851000
STH R15,VMPAGES-VMBLOK(,R14) @V408246 00852000
PROUSBD DS 0H @VA09446 00852500
ST R14,CORFPNT UPDATE FRAME OWNERSHIP @VA09446 00853100
TM CORFLAG,CORRSV RESERVED PAGE? @V408246 00854000
BZ PROUSC NO @V407511 00855000
NI CORFLAG,255-CORRSV YES, RESET @V408246 00856000
L R14,=A(DMKDSPNP) POINTER TO PAGE COUNT @V408246 00857000
L R15,0(,R14) INCREMENT @V408246 00858000
AL R15,F1 PAGEABLE PAGE COUNT @V408246 00859000
ST R15,0(,R14) @V408246 00860000
L R14,=A(DMKPTRRC) POINTER TO RESERVE COUNT @V408246 00861000
L R15,0(,R14) DECREMENT @V408246 00862000
SL R15,F1 RESERVED PAGE COUNT @V408246 00863000
ST R15,0(,R14) @V408246 00864000
PROUSC DS 0H @V407511 00865000
LA R8,8(,R8) NEXT SWAPTABLE ENTRY @V408246 00866000
A R1,F4096 NEXT VIRTUAL PAGE ADDRESS IN @V408246 00867000
* THIS SEG. 00868000
BCT R7,PROUSB PROCESS REST OF SEGMENT @V407511 00869000
DROP R2,R8 @V408246 00870000
USING CORTABLE,R7 @V408246 00871000
L R14,SAVEWRK2 RESTORE RETURN ADDRESS @V407511 00872000
BR R14 @V407511 00873000
EJECT 00874000
*. 00875000
* 6. SET UP TO RELEASE SHARED SYSTEMS AND 00876000
* TO RELEASE ALL (IF NOCLEAR NOT SPECIFIED) 00877000
* PAGES OF THE USER'S VIRTUAL STORAGE SPACE 00878000
* (ALSO RESET ANY INSTRUCTIONS MODIFIED BY TRACE OR ADSTOP). 00879000
* 7. SAVE THE ADDR OF LAST PAGE TO RELEASE 00880000
* IN R2. (PAGOUT CODE IS 00881000
* JOINED BY PARTIAL PAGE-OUT HERE). 00882000
* 8. LOCATE THE PAGTABLE AND SWPTABLE FOR THE SEGMENT TO BE 00883000
* RELEASED; INDEX TO THE CORRECT ENTRY FOR THE 1ST PAGE 00884000
* 8A IF ENTRY WAS DMKPGSPO, SKIP TO STEP 8C 00885000
* 8B IF SHRTABLE POINTER NON-ZERO, GO TO STEP 2 00886000
* 8C IF NOCLEAR SPECIFIED SKIP TO STEP 10 00887000
* 9. ENQUEUE ON THE PAGE VIA A CALL TO DMKPTRAN; WHEN PAGING 00888000
* ACTIVITY HAS STOPPED, CONTINUE 00889000
* 10. IF THE PAGE IS NOT RESIDENT, SKIP TO STEP 11; OTHERWISE, 00890000
* DECREMENT THE RESIDENT PAGE COUNT, UNCHAIN THE CORTABLE 00891000
* ENTRY FROM THE USER PAGE LIST, AND CALL DMKPTRFT TO PLACE 00892000
* THE PAGE ON THE FREE PAGE LIST 00893000
* 11. IF THE DASD PAGE SLOT IS MARKED READ-ONLY, SKIP TO STEP 12; 00894000
* OTHERWISE, CALL DMKPGTPR OR DMKPGTSP TO RELEASE THE SLOT 00895000
* 12. LOOP THROUGH THE REQUESTED NUMBER OF PAGES, AND WHEN 00896000
* FINISHED, EXIT TO THE CALLER 00897000
*. 00898000
PGSPO1 EQU * @V304635 00899000
NI SAVEWRK1,X'FF'-NOCLEAR CLEAR ALL (CLEAN UP ) @V304735 00900000
SPACE 2 00901000
AIF (NOT &TRACE(6)).NOTRA1 00902000
L R1,VMTREXT ANY TREXT BLOCK THERE ? 00903000
LTR R1,R1 ... 00904000
BZ PGOUTA NOPE, NO PROBLEM CHECK FOR ADSTOP@V407511 00905000
USING TREXT,R1 00906000
MVC TREXIN1(8),FFS YES, FF'S TO TREXIN1, TREXIN2, AND 00907000
MVC TREXANSI(4),FFS TREXANSI TO "CLEAR" ANY MODIFIED INSTR. 00908000
MVI TREXNSI,00 ALSO CLEAR 1ST BYTE OF "TREXNSI" 00909000
DROP R1 00910000
.NOTRA1 ANOP 00911000
PGOUTA DS 0H @V407511 00912000
L R1,VMADSTOP GET ADDR PREVIOUS ADSTOP BLOCK @V407511 00913000
LTR R1,R1 DOES ONE EXIST ? 00914000
BZ PGOUTB NOPE - GO LOAD R2 (NOTE R1=0). @V407511 00915000
LA R0,2 R0 = SIZE OF ADSTOP DSECT 00916000
CALL DMKFRET GIVE IT BACK TO FREE STORAGE 00917000
SLR R1,R1 CLEAR VMADSTOP 00918000
ST R1,VMADSTOP (AND LEAVE R1=0) 00919000
PGOUTB DS 0H R1=0 FOR PAGE ZERO 1ST PAGE REL @V407511 00920000
ST R1,VMTIMER ZERO OUT VIRTUAL INTERVAL TIMER 00921000
AIF (NOT &VIRREAL).NOVR2 00922000
C R11,AVMREAL DOES USER OWN VIRT=REAL AREA 00923000
BNE PGOUTC NO, BRANCH @V407511 00924000
L R2,F4096 START CLEARING STORAGE AT PAGE 1 00925000
L R3,=A(DMKSLC-4096) TOTAL NUM. BYTES TO CLEAR 00926000
SLR R4,R4 ZERO R4 00927000
SLR R5,R5 ZERO R5 00928000
MVCL R2,R4 CLEAR ENTIRE AREA 00929000
B EXIT RETURN TO CALLER @V304635 00930000
PGOUTC DS 0H CONNECTOR @V407511 00931000
.NOVR2 ANOP 00932000
SR R2,R2 CLEAR @V304635 00933000
IC R2,VMSEG GET NUMBER OF SEGMENT TABLES @V304635 00934000
LA R2,1(,R2) NOW TO ORIGIN 1 @V304635 00935000
SLL R2,20 GET ADDR +1 PAGE OF LAST PAGE @V304635 00936000
BCTR R2,0 ADDRESS OF LAST PAGE 00937000
SPACE 3 00938000
USING SWPFLAG,R5 00939000
USING CORTABLE,R7 00940000
USING PAGCORE,R9 00941000
USING SEGTABLE,R3 @V304635 00942000
SPACE 3 00943000
PGOUT1 DS 0H @V407511 00944000
CL R11,AVMREAL DOES USER OWN V=R AREA @V304635 00945000
BE EXIT IF YES - JUST EXIT @V304635 00946000
L R3,VMSEG GET SEGMENT TABLE ORIGIN 00947000
LR R14,R1 GET 1ST PAGE TO RELEASE 00948000
SRL R14,16 ISOLATE SEGMENT NUMBER @V408246 00949000
SLL R14,2 GET SEGMENT NUMBER X4 00950000
LA R3,0(R14,R3) GET SEGMENT TABLE ENTRY 00951000
SPACE 2 00952000
PGOUT2 DS 0H RLEASE A SEGMENT @V407511 00953000
ICM R4,B'0110',SEGPAGE+1 VALID PNTR? @V408246 00954000
BNZ B2 YES @V408246 00955000
CLI SEGPAGE+3,SEGINV INVALID STE(NOT BUILT)? @V408246 00956000
BE NEXTSEG YES, NOTHING TO RELEASE @V408246 00957000
B2 TM SEGPAGE+3,SEGINV VALID ADDRESS WITH INVALID @V408246 00958000
* FLAG? 00959000
BZ PGOUT2A NO @V408246 00960000
LR R4,R2 SAVE LAST ADDRESS @V408246 00961000
TRANS 7,1,OPT=(DEFER) ENQUEUE ON SEGMENT @V408246 00962000
* WILL CLEAR INVALID BIT 00963000
* AND WAIT FOR ANY MIGRATION TO STOP 00964000
LR R2,R4 RESTORE LAST ADDRESS @V408246 00965000
BC 2,NEXTSEG ADDR EXCEP, NOTHING TO RELEASE @V408246 00966000
TM SAVEWRK1,CALLPO FULL CORE RESET? @V408246 00967000
BNO PGOUT2 NO, JUST NORMAL PRECAUTIONS @V407511 00968000
OI SAVEWRK1+3,REPEAT RAISE REPEAT FLAG @V408211 00969000
B PGOUT2 AND CONTINUE FOR NOW @V407511 00970000
PGOUT2A DS 0H @V408246 00971000
SR R10,R10 CLEAR @V304635 00972000
TM SAVEWRK1,PARTIAL FLAG TO SKIP SHARED SYSTEMS @V304635 00973000
BO FINSHTBL PROCESSING? YES, THEN SKIP IT @V304635 00974000
* 00975000
* CHECK IF THIS SEGMENT IS PART OF A SHARED SYSTEM 00976000
* IF SO, GOTSHTBL WILL CLEAN UP 00977000
* 00978000
L R10,0(R3) GET PAGETABLE ORIGIN @V304635 00979000
LA R10,0(R10) STRIP LENGTH @V304635 00980000
S R10,F8 BACKUP TO SHRTABLE POINTER @V304635 00981000
LR 4,R10 SAVE POINTER TO PAGE TABLE HEADER@V304635 00982000
L R10,0(R10) GET SHRTABLE POINTER(IF ANY) @V304635 00983000
LTR R10,R10 IS THIS A NAMED SYSTEM. @V304635 00984000
BZ FINSHTBL NO - @V304635 00985000
CLC SHRSEGCT-SHRTABLE(4,R10),F0 IS THIS A SHARED @V304635 00986000
* NAMED SYSTEM ? 00987000
BE TESTPUR NO - TEST FOR PURGESYS FUNCTION @V304635 00989000
TM SAVEWRK1,PURGE RELEASING A NAMED SYSTEM ? @V304635 00990000
LA R14,FINSHTBL RETURN ADDR FOR NAMED SYSTEM @VA07849 00990100
BZ GOTSHTBL NO - RELEASING ALL STORAGE @V304635 00991000
CLC SHRNAME-SHRTABLE(8,R10),SAVER1 DO NAMES MATCH ? @V304635 00992000
BNE FINSHTBL IF NOT - CONTINUE @V304635 00993000
TM SAVEWRK1+3,PGVMAFND ALREADY PURGED THIS SYSTEM @V4M0191 00994000
BO FINSHTBL YES, CONTINUE SCAN @V4M0191 00995000
B GOTSHTBL RELEASE THIS NAMED SYSTEM @VA07849 00996100
TESTPUR DS 0H @V4M0214 00998000
NI SAVEWRK1+3,X'FF'-PGPROCIP-PGVMAFND-NPROTECT @VA13580 00999050
TM SAVEWRK1,PURGE PURGING A NAMED SYSTEM ? @VA13580 00999250
BZ CLRSHARE NO, CLEAR SHARE TABLE POINTER @VA13580 00999450
CLC SHRNAME-SHRTABLE(8,R10),SAVER1 DO NAMES MATCH @VA13580 00999650
BNE NEXTSEG NO, GET NEXT SEGMENT @VA13580 00999850
MVI SAVEWRK1+2,NOTINUSE PTE NO LONGER IN USE @VA13580 01000050
B FINSHTBL CONTINUE RESET OF SHARE SYS IND. @VA13580 01000250
CLRSHARE EQU * 01000450
XC 0(4,R4),0(R4) CLEAR SHARE TABLE POINTER @VA13580 01000650
FINSHTBL EQU * @V304635 01003000
TM SEGPAGE+3,SEGINV VALID STE? @V408246 01004000
BO NEXTSEG IF YES - PROCEED TO NEXT @V304635 01005000
* SEGTABLE ENTRY 01006000
L R15,SEGPAGE GET PTO @V408246 01007000
LR R14,R1 GET VIRTUAL ADDRESS @V408246 01008000
SRL R14,12 . . VIRTUAL PAGE NO. @V408246 01009000
N R14,F15 (WITHOUT SEGMENT NO.) @V408246 01010000
ALR R14,R14 PAGE NO. * 2 -> PTE INDEX @V408246 01011000
LA R9,0(R14,R15) STARTING PTE @V408246 01012000
SLL R14,2 PAGE NO. * 8 -> SWAPTABLE ENTRY @V408246 01013000
* INDEX 01014000
LA R5,16*2+8(R14,R15) STARTING SWAPTABLE ENTRY @V408246 01015000
TM SAVEWRK1,PURGE RELEASING A NAMED SYSTEM @V304635 01016000
BZ PGOUT3 NO - RELEASE THIS PAGE (IF @V407511 01017000
* POSSIBLE) 01018000
LTR R10,R10 DOES PAGE TABLE BELONG TO NAMED @V304635 01019000
* SYSTEM ? 01020000
BZ NEXTSEG NO - PROCESS NEXT SEGTABLE ENTRY @V304635 01021000
CLC SHRNAME-SHRTABLE(8,R10),SAVER1 DO NAMES MATCH ? @V304635 01022000
BNE NEXTSEG IF NOT - GET NEXT SEGTABLE ENTRY @V304635 01023000
OI SAVEWRK1,SYSFND REMEMBER NAMED SYSTEM FOUND. @V304635 01024000
EJECT 01025000
PGOUT3 DS 0H RELEASE A PAGE @V407511 01026000
TM SAVEWRK1,NOCLEAR WAS NOCLEAR SPECIFIED @V304635 01027000
BO NEXTSEG IF SO, SKIP PAGE RELEASE @V304635 01028000
BAL R14,RELAPAGE RELEASE THE PAGTABLE IF POSSIBLE @V407511 01029000
* DETERMINE IF THERE ARE TWO SETS OF PAGE AND SWAP TABLES TO PROCESS. 01029100
* THERE ARE TWO IF THE MP FEATURE IS INSTALLED AND THE SYSTEM IS 01029200
* GENERATED FOR AP MODE. 01029300
TM APSTAT1,MPFEAT IS THE MP FEATURE INSTALLED? @V5BC0AB 01029400
BNO NEXTSEG NO, DON'T HAVE PGT OF PROCESSOR @V5BC0AB 01029500
TM SAVEWRK1+3,NPROTECT RUNNING UNPROTECTED @V60BC11 01029530
BO NEXTSEG YES, DON'T HAVE PAGTABLE TO PROC @V60BC11 01029560
L R14,PGSSYSAP EST. ADDRESSABILITY TO DMKSYSAP @V5BC0AB 01029600
CLI 0(R14),YES IS SYSTEM GENED FOR AP? @V5BC0AB 01029700
BNE NEXTSEG NO, DONT HAVE PGT OF PROCESSOR @V5BC0AB 01029800
TM SAVEWRK1,PURGE+CALLPO PURGING SYSTEM OR ALL STOR@VA07282 01030500
BZ NEXTSEG NO, GO PROCESS NEXT SEGMENT @V407511 01031000
TM SAVEWRK1+3,PGVMAFND RELEASING A SHARED SYSTEM @V407511 01032000
BZ NEXTSEG NO, GO PROCESS NEXT SEGMENT @V407511 01033000
STCM R4,B'1000',SEGPAGE RESET PAGTABLE LENGTH @VA07556 01034200
LA R4,0(,R4) STRIP OFF LENGTH @VA07556 01034400
TM SAVEWRK1+3,PGPROCIP OLD PGTABLE FOR IPL PROC? @V60B7AA 01038100
BZ PGOUT3A NO, SET UP FOR IPL PROC @V60B7AA 01039100
AL R4,DCPAGBMP ADD DISP TO ATTACHED PAGTABLE @V407511 01040000
B PGOUT3B CONTINUE PROCESSING @V407511 01041000
PGOUT3A DS 0H @V407511 01042000
SL R4,DCPAGBMP SUBTRACT DISP TO IPL PROC PGTABLE@V60B7AA 01043100
PGOUT3B DS 0H @V407511 01044000
STCM R4,B'0111',SEGPAGE+1 STORE ADDR OTHER PAGTABLE @VA07556 01045200
LR R5,R4 @V407511 01046000
SL R5,F16 @V407511 01047000
LA R5,PAGTSWP+SWPFLAG-SWPTABLE(,R5) @V407511 01048000
N R1,=X'00FF0000' RESET R1 TO START OF SEGMENT @V407511 01049000
LR R9,R4 RESET R9 FOR OTHER PAGTABLE @V4M0140 01050000
BAL R14,RELAPAGE PROCESS OTHER PAGTABLE @V407511 01051000
NEXTSEG DS 0H @V407511 01052000
NI SAVEWRK1+3,X'FF'-PGPROCIP-PGVMAFND RESET SHR FLG@V60B7AA 01052300
LA R3,SEGPAGE+4 POINT TO NEXT STE @V408611 01053000
N R1,=X'00FF0000' SAVE SEGMENT NUMBER @V304635 01054000
A R1,=X'00010000' BUMP SEGMENT BY 1 @V304635 01055000
CR R1,R2 ARE WE WITHIN RANGE OF PAGES @V304635 01056000
BNH PGOUT2 YES - RELEASE NEXT PAGE @V407511 01057000
TM SAVEWRK1,PURGE+CALLPO RELEASING SHR-SYSTEM ? @V304635 01058000
BZ EXIT NO - RETURN TO CALLER @V304635 01059000
B PURFINSH FINISH WITH PURGESYS FUNCTION @V304635 01060000
EJECT @V407511 01061000
RELAPAGE DS 0H @V407511 01062000
ST R14,SAVEWRK9 SAVE THE RETURN ADDRESS @V407511 01063000
RELLOOP DS 0H @V407511 01064000
TM SWPFLAG,SWPSHR IS THIS A SHARED PAGE 01065000
BO NEXTPAGE YES -- DO NOT RELEASE IT 01066000
LR R4,R2 SAVE R2 @V304635 01067000
LA R10,SWPTRANS+SWPALLOC ENQUEUING FLAGS @V408246 01068000
SLL R10,24 POSITION @V408246 01069000
N R10,SWPFLAG SAVE ENQUEUE FLAGS @V408246 01070000
TRANS 7,1,OPT=(DEFER) ENQUEUE ON PAGE @V304635 01071000
LR R2,R4 RESTORE REG @V304635 01072000
BC 4,CKRELSE IF PAGE IS NOT RESIDENT, TEST FOR RELEASE 01073000
BC 2,NEXTPAGE NON EXISTENT - TRY NEXT ONE @V304635 01074000
LTR R10,R10 WERE ANY ENQUEUING FLAGS PRESENT?@V408246 01075000
BZ PGRES NO, CONTINUE @V407511 01076000
CLI SAVEWRK1,CALLPO FULL CORE RESET? @V408246 01077000
BNE PGRES NO, NO NEED TO SYNCRONIZE @V407511 01078000
* CALL TO DMKPTR RESULTED IN A DEFER . . . NEED TO SYNCRONIZE 01079000
* VIRTUAL MEMORY REFERENCES, ESPECIALLY IF THIS CALL IS 01080000
* FROM LOGOUT 01081000
PGDFR DS 0H @V407511 01082000
NI SAVEWRK1+3,X'FF'-REPEAT CLEAR REPEAT FLAG @V408211 01083000
LA R0,CPEXSIZE GET CORE FOR CPREQUEST BLOCK @V408246 01084000
CALL DMKFREE @V408246 01085000
USING CPEXBLOK,R1 @V408246 01086000
STM R0,R15,CPEXR0 SAVE ALL REGS @V408246 01087000
LA R0,PGSPO1 RESTART ADDRESS @V408246 01088000
ST R0,CPEXADD RETURN ADDRESS @V408246 01089000
CALL DMKSTKCP STACK REQUEST @V408246 01090000
GOTO DMKDSPCH . . SYNCRONIZE @V408246 01091000
DROP R1 @V408246 01092000
EJECT 01093000
* PAGE IS RESIDENT 01094000
PGRES DS 0H @V407511 01095000
SRL R7,8 GET PAGE NUMBER X16 01096000
A R7,ACORETBL POINT TO CORTABLE ENTRY FOR REAL PAGE 01097000
TM CORFLAG,CORFREE IS PAGE ALREADY FREE? @VA07076 01097100
BO NEXTPAGE YES,GO TO NEXT PAGE. @VA07076 01097200
TM CORFLAG,CORCFLCK PAGE LOCKED BY 'LOCK' COMMAND? @V408246 01098000
BZ CKRSV NO, CHECK FOR RESERVED @V408246 01099000
TM SAVEWRK1,UNLOCK DID CALLER SPECIFY 'UNLOCK' @V408246 01100000
BO UNLCK YES, UNLOCK @V408246 01101000
TM VMRSTAT,VMLOGOFF IS THE USER LOGGING OFF ? @V408246 01102000
BO UNLCK YES, UNLOCK ANYWAY @V408246 01103000
CLI SAVEWRK1+2,NOTINUSE SHARED SEGMENT STILL IN USE?@VMI0075 01103100
BE UNLCK NO, UNLOCK PAGE SINCE IT'S NOW @VMI0075 01103300
* NON-SHARED 01103500
* NO, JUST ZERO PAGE AND LEAVE AS IS 01104000
* JUST ZERO PAGE AND LEAVE AS IS 01104100
LR R14,R7 GET ADDRESS OF CORTABLE ENTRY @V408246 01105000
SL R14,ACORETBL LEAVE ONLY INDEX PORTION @V408246 01106000
SLL R14,8 FORM FULL PAGE ADDRESS @V408246 01107000
L R15,F4096 BYTE LENGTH FOR 1 FULL PAGE @V408246 01108000
ST R1,TEMPR1 SAVE VIRTUAL ADDRESS @V408246 01109000
SLR R1,R1 COUNT NOT NEEDED FOR 2'ND ADDR. @V408246 01110000
MVCL R14,R0 BLANK PAGE TO BINARY ZEROES @V408246 01111000
L R1,TEMPR1 RESTORE VIRTUAL ADDRESS @V408246 01112000
B CKRELSE CHECK FOR DASD RELEASE @V408246 01113000
UNLCK DS 0H @V408246 01114000
LR R4,R2 SAVE R2 @V408246 01115000
LH R2,PAGCORE PTE @V408246 01116000
SLL R2,8 DEVELOP REAL PAGE ADDRESS @VA09280 01117100
N R2,XPAGNUM CLEAR UNWANTED BITS @VA09280 01117600
CALL DMKPTRUL @V408246 01120000
LR R2,R4 RESTORE R2 @V408246 01121000
NI CORFLAG,255-CORCFLCK REMOVE 'LOCK' COMMAND FLAG @V408246 01122000
C R11,ASYSVM SYSTEM? @V408246 01123000
BNE *+8 NO @V408246 01124000
ST R11,CORFPNT YES, MAKE SURE CORRECT @V408246 01125000
L R14,CORFPNT PAGE'S OWNER @V408246 01126000
LA R10,1 INCREMENT @V408246 01127000
AH R10,VMPAGES-VMBLOK(,R14) IN-CORE PAGE COUNT @V408246 01128000
STH R10,VMPAGES-VMBLOK(,R14) @V408246 01129000
TM CORFLAG,CORRSV IF RESERVED, ALREADY @V408246 01130000
* DECREMENTED ONCE 01131000
BZ UNLKPNP . . INCREMENT DYNAMIC PAGE COUNT @V408246 01132000
CKRSV DS 0H @V408246 01133000
TM CORFLAG,CORRSV RESERVED PAGE? @V408246 01134000
BZ PGOUT4 NO -- @V407511 01135000
L R14,=A(DMKPTRRC) @V408246 01136000
L R10,0(,R14) DECREMENT @V408246 01137000
BCTR R10,0 RESERVED PAGE COUNT @V408246 01138000
ST R10,0(,R14) @V408246 01139000
UNLKPNP DS 0H @V408246 01140000
L R14,=A(DMKDSPNP) @V408246 01141000
LA R10,1 INCREMENT @V408246 01142000
A R10,0(,R14) DYNAMIC PAGE COUNT (PAGEABLE @V408246 01143000
* PAGES) 01144000
ST R10,0(,R14) @V408246 01145000
PGOUT4 DS 0H @V407511 01146000
TM CORFLAG,CORSHARE IS THIS A SHARED PAGE? @V407511 01147000
BZ PGOUTU NO @V407511 01148000
L R15,=A(DMKPTRSC) POINTER TO SHARED PAGE COUNTER @V408246 01149000
L R10,0(,R15) DECREMENT @V408246 01150000
BCTR R10,0 RESIDENT SHARED PAGE COUNT @V408246 01151000
ST R10,0(,R15) @V408246 01152000
PGOUTU DS 0H @V407511 01153000
L R14,CORFPNT OWNER OF PAGE @V408246 01154000
TM CORFLAG,CORCFLCK FRAME LOCKED ?? @VA07798 01154200
BO PGOUTU1 YES, SKIP UPDATE OF FRAME COUNT @VA07798 01154400
LH R15,VMPAGES-VMBLOK(,R14) DECREMENT @V408246 01155000
S R15,F1 DECREMENT @V408246 01156000
BM PGS1 VMPAGES NEGATIVE - TERMINATE CP @VA07224 01156100
STH R15,VMPAGES-VMBLOK(,R14) @V408246 01157000
PGOUTU1 DS 0H @VA07798 01157200
OI VMESTAT-VMBLOK(R14),VMINVPAG FLAG DELAYED PTLB @V408246 01158000
OI APSTAT2,CPPTLBR INDICATE PTLB REQUIRED @V407511 01159000
L R10,PREFIXB LOAD PREFIX OF OTHER PROCESSOR @V407511 01160000
OI APSTAT2-PSA(R10),CPPTLBR PTLB NEED ON OTHER PROC@V407511 01161000
OI VMESTAT,VMINVPAG NO, INVALIDATE HIM ALSO @V408246 01162000
B3 XC CORPGPNT(4),CORPGPNT CLEAR POINTER TO PTE @V408246 01163000
MVC PAGCORE,F8+2 AND INVALIDATE PTE @V408246 01164000
TM CORFLAG,CORIOLCK PAGE LOCKED FOR I/O? @V408246 01165000
BZ PGFRET NO, PLACE ON FREE LIST @V407511 01166000
SR R0,R0 CLEAR @V408246 01167000
STCM R0,B'0111',CORSWPNT+1 ZERO SWAP TABLE PNTR @V408246 01168000
NI CORFLAG,255-CORSHARE-CORRSV MAKE SURE CLEAN @V408246 01169000
B CKRELSE CHECK FOR DASD RELEASE @V408246 01170000
SPACE 1 01170100
ABEND 1 VMPAGES TO GO NEGATIVE - TERM CP @VA07224 01170200
SPACE 1 01170300
PGFRET DS 0H @V407511 01171000
CALL DMKPTRFT AND RETURN PAGE TO FREE LIST 01172000
CKRELSE CL R11,ASYSVM RELEASING SYSTEM STORAGE ? @VM08746 01173000
BE NEXTPAGE YES - DON'T RELEASE THE DASD @VM08746 01174000
* SPACE 01175000
TM SAVEWRK1,PURGE PURGING A NAMED SYSTEM ? @V304635 01176000
BZ CALLPGS NO - RELEASE THE DASD PAGE @V304635 01177000
L R10,0(,R3) GET PAGE TABLE @V304635 01178000
LA R10,0(,R10) LEAVE ONLY 24 BITS FOR ADDRESSING@V304635 01179000
SL R10,F8 BACK UP TO SHRTABLE POINTER @V304635 01180000
L R10,0(,R10) GET POINTER TO SHRTABLE POINTER @V304635 01181000
LTR R10,R10 NAMED SYSTEM ? @V304635 01182000
BZ NEXTPAGE NO - DON'T RELEASE IT @V304635 01183000
CLC SHRNAME-SHRTABLE(8,R10),SAVER1 NAMES MATCH ? @V304635 01184000
BNE NEXTPAGE NO - DON'T RELEASE IT @V304635 01185000
CALLPGS TM SWPFLAG,SWPRECMP CAN DASD PAGE BE RELEASED ? @V304635 01186000
BO ZEROSWAP NO - CLEAR SWAPTABLE ENTRY @V304635 01187000
SPACE 01188000
L R15,=A(DMKPGTPR) ASSUME NOT FOR SYSTEM VMBLOK @VA04554 01189000
TM SAVEWRK1,PGTSP IS THE OWNER THE 'SYSTEM' ? @VA04554 01190000
BZ CALLPGT IF NOT - RELEASE USER PAGE @VA04554 01191000
L R15,=A(DMKPGTSP) OTHERWISE RELEASE SYSTEM PAGE @VA04554 01192000
CALLPGT BALR R14,R15 NOW - RELEASE THE DASD PAGE @VA04554 01193000
SPACE 01194000
ZEROSWAP EQU * SET CONTENTS AND STORAGE KEYS OF VIRTUAL PAGE = 0 01195000
TM SAVEWRK1,PARTIAL+PURGE PARTIAL PAGE OUT OR @V304635 01196000
* PURGE ? 01197000
BNZ *+10 IF YES - DON'T RESET THE KEYS @V304635 01198000
XC SWPKEY1(2),SWPKEY1 CLEAR KEYS @V304635 01199000
XC SWPCYL(4),SWPCYL AND DASD ADDRESS @V304635 01200000
OI SWPFLAG,SWPRECMP CCPD IS NO GOOD @VA09774 01200500
NI PAGCORE+1,255-PAGREF RESET REF FLAG @V408246 01201000
SPACE 01202000
NEXTPAGE CR R1,R2 ANY PAGES LEFT TO RELEASE @V304635 01203000
BL CKSEG YES, THEN CHECK FOR END OF SEG @V304635 01204000
B RELEXIT NO, RETURN TO MAINLINE @VA07849 01204200
EXIT DS 0H @V408246 01205000
TM SAVEWRK1+3,REPEAT REPEAT FLAG ON?? @V408211 01206000
BO PGDFR YES, START AGAIN @V407511 01207000
TM VMDSTAT,VMINQ IN-Q? @V408246 01208000
BO EXITA YES, BYPASS CORE RESET @V408246 01209000
CALL DMKPTRRS CORE RESET FUNCTION @VA07241 01210100
EXITA DS 0H @V408246 01212000
CLI SAVEWRK1+1,CC0 SET CC FOR CALLER @V408211 01213000
EXIT @V408246 01214000
EJECT 01215000
CKSEG EQU * HERE TO TEST FOR END OF SEGMENT 01216000
CLM R1,B'0010',SEGPAGE TEST FOR LAST PAGE @V408246 01217000
BNL CKNAMSEG YES - NOW TEST FOR NAMED SEGMENT @V304635 01218000
A R1,F4096 BUMP VIRTUAL PAGE ADDRESS @V304635 01219000
LA R9,2(,R9) POINT TO NEXT PTE 01220000
LA R5,8(,R5) POINT TO NEXT SWPTABLE ENTRY 01221000
B RELLOOP AND CONTINUE CLEARING THIS SEG @V407511 01222000
SPACE 2 01223000
CKNAMSEG DS 0H @VA07556 01224200
TM SAVEWRK1,SYSFND PURGING A SHARED SYSTEM @VA07556 01224400
BZ RELEXIT1 IF NOT - CONTINUE @V407511 01225000
CLI SAVEWRK1+2,NOTINUSE PAGTABLE STILL IN USE @VA07849 01225200
BNE RELEXIT1 YES, CANNOT RELEASE PAGTABLE @VA07849 01225400
L R14,SEGPAGE-SEGPAGE(,R3) GET PAGE TABLE @V304635 01226000
N R14,CLCNTINV CLEAR ANY UNWANTED BITS @V408211 01227000
SL R14,F8 POINT TO PAGE HEADER @V304635 01228000
L R10,0(,R14) GET POINTER TO SHRTABLE @V304635 01229000
LTR R10,R10 IS THERE ONE ? @V304635 01230000
BZ RELEXIT1 NO, RETURN @VA07849 01231100
XC 0(4,R14),0(R14) CLEAR SHRTBL PTR IN PAGE TABLE @VA13580 01231200
STM R1,R2,SAVEWRK3 SAVE FOR LATER @V408246 01235000
LA R14,SEGINV INVALID FLAG @V408246 01236000
L R1,SEGPAGE-SEGPAGE(,R3) GET STE @V408246 01237000
ST R14,SEGPAGE-SEGPAGE(,R3) INVALID STE @V408246 01238000
N R1,CLINVBIT CLEAR INVALID BIT @V408211 01239000
LR R4,R1 SAVE ORIGINAL PAGTABLE ADDR @V407511 01240000
CALL DMKBLDRL,PARM=PAGTONLY @V408246 01241000
LM R1,R2,SAVEWRK3 RESTORE @V408246 01242000
RELEXIT DS 0H @V407511 01243000
L R14,SAVEWRK9 RESTORE RETURN ADDRESS @V407511 01244000
BR R14 RETURN TO CALLER @V407511 01245000
RELEXIT1 DS 0H @V407511 01246000
SLR R4,R4 INDICATE TO SKIP TO NEXT SEGMENT @V407511 01247000
B RELEXIT RETURN TO CALLER @V407511 01248000
SPACE 2 01249000
SPACE 3 01250000
DS 0F 01251000
SPACE 1 01252000
* PARMS USED IN SAVEWRK1 01253000
PARTIAL EQU X'80' DO NOT RELEASE SHARED SEGMENTS @V304635 01254000
NOCLEAR EQU X'40' DO NOT CLEAR STORAGE @V304635 01255000
PURGE EQU X'20' PURGE THE NAMED SYSTEM PASS IN @V304635 01256000
* R1-R2 01257000
SYSFND EQU X'10' NAMED SYSTEM WAS FOUND @V304635 01258000
CALLPO EQU X'08' ENTERED BY CALL TO DMKPGSPO @V304635 01259000
SYSFRET EQU X'04' FRET THE SHRTABLE @V304635 01260000
UNLOCK EQU X'02' UNLOCK 'LOCKED' PAGES @V304735 01261000
PGTSP EQU X'01' OWNER = SYSTEM; CALL DMKPGTSP @VA04554 01262000
SPACE 1 @V407511 01263000
* CONDITION CODE SETTING FOR SAVEWRK1+1 @V407511 01264000
CC1 EQU X'01' CONDITION CODE ONE - ERROR @V407511 01265000
CC0 EQU X'00' CONDITION CODE ZERO - NORMAL @V407511 01266000
SPACE 1 @V407511 01267000
* FLAGS USED IN SAVEWRK1+2 01268000
INUSE EQU X'00' SHARED SYSTEM IS STILL IN USE @V407511 01269000
NOTINUSE EQU X'01' SHARED SYSTEM NO LONGER IN USE @V407511 01270000
INITPASS EQU X'02' INITIAL PASS VALUE @V407511 01271000
SPACE 1 @V407511 01272000
* FLAGS USED IN SAVEWRK1+3 @V407511 01273000
REPEAT EQU X'80' REPEAT PROCESSING @V407511 01274000
PGPROCIP EQU X'40' ENTERED ON THE IPL PROCESSOR @V60B7AA 01275100
PGVMAFND EQU X'20' VMABLOK FOUND FOR NAMED SYSTEM @V407511 01276000
NPROTECT EQU X'10' RUNNING UNPROTECTED SYSTEM @V60BC11 01276100
SPACE 1 @V407511 01277000
YES EQU C'Y' @V5BC0AB 01277100
* MODULE DECLARES @V407511 01278000
DCPAGBMP DC A(PAGBMP) DISPLACEMENT FOR SHARED PAGTABLES @V407511 01279000
* 01280000
UPDTACT DC X'00010000' MASK USED FOR INCREMENTING AND @V407511 01281000
* DECREMENTING PAGACT COUNTER @V407511 01282000
CLCNTINV DC X'00FFFFFE' CLEAR COUNT AND INVALID BITS @V407511 01283000
* IN SEGMENT TABLE ENTRIES @V407511 01284000
CLINVBIT DC X'FFFFFFFE' CLEAR INVALID BIT @V407511 01285000
DS 0F 01285010
PGSSYSAP DC V(DMKSYSAP) PTR TO AP= VALUE FROM SYSCOR @V5BC0AB 01285110
SPACE 01286000
LTORG 01287000
EJECT 01288000
COPY SHRTABLE 01289000
COPY IOBLOKS 01290000
COPY SYSTBL 01291000
COPY RBLOKS 01292000
COPY DEVTYPES @VA04554 01293000
COPY ALLOC @VA04554 01294000
COPY CORE 01295000
COPY VMBLOK 01296000
COPY MICBLOK @V3M5014 01297000
COPY TREXT 01298000
COPY SAVE 01299000
PSA 01300000
COPY EQU 01301000
END DMKPGS @V200820 01302000