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