TITLE 'IEAVRELS -- PAGE RELEASE *00001000 ' 00002000 IEAVRELS CSECT 00003000 USING *,15 00004000 MODID BR=NO 00005000 IEAVREL2 DS 0H 00006000 ENTRY IEAVREL2 00007000 ENTRY IEAVRELV 00008000 ENTRY IEAVRELF 00009000 LBSETBAS BALR RLBASERG,0 00010000 USING *,RLBASERG 00011000 * CIWRETRN=RLRETREG; /* SAVE PSI RETURN ADDRESS */ 00012000 ST RLRETREG,CIWRETRN(,CIWAPTR) 0109 00013000 * RCACSECT=RCACPGRL; /* SET CSECT ID IN RCA */ 00014000 L @12,RCAPTR(,PVTPTR) 0110 00015000 MVI RCACSECT(@12),X'07' 0110 00016000 * RCARELS='1'B; /* SET ENTRY POINT FLAG IN RCA */ 00017000 OI RCARELS(@12),B'00000010' 0111 00018000 * 0112 00019000 * /*****************************************************************/ 00020000 * /* */ 00021000 * /* THE MAIN PART OF THE IEAVRELS ENTRY LOGIC CONSISTS OF TWO */ 00022000 * /* LOOPS. THE OUTER LOOP CONTROLS PROCESSING OF VSL ENTRIES. FOR */ 00023000 * /* REGISTER FORM REQUESTS (CIWINVSL=0), ONLY ONE VSL ENTRY EXISTS*/ 00024000 * /* TO BE PROCESSED. FOR LIST FORM REQUESTS MANY VSL ENTRIES MAY */ 00025000 * /* EXIST. EACH NEW VSL ENTRY IS OBTAINED BY CALLING THE NEXTVSL */ 00026000 * /* SUBROUTINE OF IEAVPSI. */ 00027000 * /* */ 00028000 * /*****************************************************************/ 00029000 * 0112 00030000 *LBVSLOOP: 0112 00031000 * RLTESTAD=CIWSTRTA+MPSZMIN1; /* REDUCE THE START ADDR IN THE 00032000 * CIWA TO THE NEXT HIGHER PAGE 00033000 * BOUNDARY */ 00034000 LBVSLOOP LA RLTESTAD,4095 0112 00035000 L @12,CIWSTRTA-1(,CIWAPTR) 0112 00036000 LA @12,0(,@12) 0112 00037000 ALR RLTESTAD,@12 0112 00038000 * RLTESTAD=RLTESTAD&MPGBDYMK; 0113 00039000 N RLTESTAD,@CF02426 0113 00040000 * RLNUMBYT=CIWEND1A-RLTESTAD; /* SET UP DO WHILE CONTROL VALUE */ 00041000 * 0114 00042000 L RLNUMBYT,CIWEND1A-1(,CIWAPTR) 0114 00043000 LA RLNUMBYT,0(,RLNUMBYT) 0114 00044000 SLR RLNUMBYT,RLTESTAD 0114 00045000 * /*****************************************************************/ 00046000 * /* */ 00047000 * /* THE INNER DO WHILE LOOP CHECKS EACH PAGE IN A VSL ENTRY FOR */ 00048000 * /* PGRLSE ELIGIBILITY AND THEN CALLS THE INTERNAL PAGE PROCESSOR */ 00049000 * /* SUBROUTINE (SUBPAGE) TO PERFORM ACTUAL RELEASE PROCESSING. A */ 00050000 * /* PAGE IS ELIGIBLE FOR RELEASE PROCESSING IF IT IS 1) IN A VALID*/ 00051000 * /* SEGMENT, 2) IS NOT IN THE QUICK START AREA (QSA), AND 3) IS IN*/ 00052000 * /* THE KEY OF THE CALLER IF THE CALLER'S KEY IS NOT ZERO. */ 00053000 * /* */ 00054000 * /*****************************************************************/ 00055000 * 0115 00056000 * DO WHILE(RLNUMBYT>=MPGSIZE); /* THIS LOOP IS EXITED WHEN THE 00057000 * NUMBER OF BYTES TO RELEASE 0115 00058000 * FALLS BELOW 4096 */ 00059000 B @DE00115 0115 00060000 @DL00115 DS 0H 0116 00061000 * RELSVSA=RLTESTAD; /* STORE VSA IN CIWA */ 00062000 ST RLTESTAD,RELSVSA(,CIWAPTR) 0116 00063000 * CIWWRK1=RLNUMBYT; /* SAVE LOOP CONTROL VALUE */ 00064000 ST RLNUMBYT,CIWWRK1(,CIWAPTR) 0117 00065000 * RLPARMRG=RELSVSA; /* GET PGTE AND XPTE ADDRESSES */ 00066000 L @12,RELSVSA(,CIWAPTR) 0118 00067000 LR RLPARMRG,@12 0118 00068000 * CALL EPFINDPG; /* SEE ENTRY DCL FOR INTERFACE */ 00069000 L @15,PVTPFP2(,PVTPTR) 0119 00070000 BALR @14,@15 0119 00071000 * IF RLRETCOD^=MZERO THEN /* WHAT IS RETURN CODE */ 00072000 LTR RLRETCOD,RLRETCOD 0120 00073000 BZ @RF00120 0120 00074000 * DO; /* RETURN CODE IS NOT ZERO */ 00075000 * IF RLRETCOD=8 THEN /* WHICH ERROR RETURN CODE */ 00076000 C RLRETCOD,@CF00039 0122 00077000 BNE @RF00122 0122 00078000 * DO; /* A RETURN CODE 8 MEANS AN 0123 00079000 * INTERNAL RSM ERROR */ 00080000 * RCARCRD='01'X; /* SET REASON CODE IN RCA */ 00081000 L @12,RCAPTR(,PVTPTR) 0124 00082000 MVI RCARCRD(@12),X'01' 0124 00083000 * GEN(ABEND X'C0D',,,SYSTEM) ;/* THE RSM FRR IS GIVEN 0125 00084000 * CONTROL TO RECORD THE ERROR 0125 00085000 * BEFORE CONTINUING */ 00086000 ABEND X'C0D',,,SYSTEM 00087000 * END; 0126 00088000 * ELSE 0127 00089000 * ; /* RETURN CODE 4 MEANS USER ERROR*/ 00090000 @RF00122 DS 0H 0128 00091000 * GOTO LBERROR; /* GO TO ERROR EXIT PROCESSING */ 00092000 B LBERROR 0128 00093000 * END; 0129 00094000 * ELSE 0130 00095000 * ; /* RETURN CODE WAS ZERO, CONTINUE*/ 00096000 @RF00120 DS 0H 0131 00097000 * PTEPTR=RLPARMR0; /* PLACE PGTE AND */ 00098000 LR PTEPTR,RLPARMR0 0131 00099000 * XPTEPTR=RLPARMRG; /* XPTE ADDRESSES IN BASE REGS */ 00100000 LR XPTEPTR,RLPARMRG 0132 00101000 * IF RELSVBN>=PVTLCSA THEN /* IS PAGE IN COMMON AREA */ 00102000 CLC RELSVBN(2,CIWAPTR),PVTLCSA(PVTPTR) 0133 00103000 BL @RF00133 0133 00104000 * DO; /* IF CURRENT PAGE IN COMMON 0134 00105000 * AREA, CHECK FOR A QSA PAGE */ 00106000 * IF RELSVBN>=PVTLQSA&RELSVBN=MPGSIZE); /* THE LOOP IS EXITED WHEN LESS 00386000 * THAN 4096 BYTES REMAIN TO BE 00387000 * FREEMAINED. */ 00388000 B @DE00221 0221 00389000 @DL00221 DS 0H 0222 00390000 * IF(WSA5VBN>=PVTLQSA&WSA5VBNASCBASID&PFTVBN^=WSA6VBN 00900000 * THEN /* TEST FOR A PAGE USED FOR 0378 00901000 * CREATE ADDRESS SPACE */ 00902000 L @12,RSMASCB(,RSMHDPTR) 0378 00903000 CLC PFTASID(2,PFTEPTR),ASCBASID(@12) 0378 00904000 BE @RF00378 0378 00905000 CLC PFTVBN(2,PFTEPTR),WSA6VBN(PVTPTR) 0378 00906000 BE @RF00378 0378 00907000 * DO; /* THE PAGE TO BE RELEASED WAS 0379 00908000 * USED TO CREATE AN ADDRESS 0379 00909000 * SPACE. THE ONLY PROCESSING 0379 00910000 * THAT SHOULD BE DONE IS 0379 00911000 * INVALIDATION & ZEROING OF PGTE*/ 00912000 * RLPARMRG=PTEPTR; 0380 00913000 LR RLPARMRG,PTEPTR 0380 00914000 * CALL EPPGINV;/* SEE ENTRY DCL FOR 0381 00915000 * INTERFACE */ 00916000 L @15,PVTPINV(,PVTPTR) 0381 00917000 BALR @14,@15 0381 00918000 * PGTRSA=RLCLRPGT;/* SET PGTE TO ZERO 0382 00919000 * CARE MUST BE TAKEN TO LEAVE 0382 00920000 * THE INVALID FLAG SET */ 00921000 MVC PGTRSA(2,PTEPTR),RLCLRPGT 0382 00922000 * GOTO LBXPTPRC;/* PROCESSING CONTINUES 00923000 * AT XPTE PROCESSING */ 00924000 B LBXPTPRC 0383 00925000 * END; 0384 00926000 * ELSE /* OTHERWISE, THE INPUT PAGE IS 00927000 * AN LSQA PAGE */ 00928000 * DO; 0385 00929000 @RF00378 DS 0H 0386 00930000 * PFTLSQA='0'B;/* RESET SQA/LSQA FLAG */ 00931000 NI PFTLSQA(PFTEPTR),B'11011111' 0386 00932000 * RSMCNTFX=RSMCNTFX-MONE;/* DECREMENT 0387 00933000 * COUNT FOR THIS ADDRESS SPACE 00934000 * @YA01572*/ 00935000 LH @12,RSMCNTFX(,RSMHDPTR) 0387 00936000 BCTR @12,0 0387 00937000 STH @12,RSMCNTFX(,RSMHDPTR) 0387 00938000 * PVTCNTFX=PVTCNTFX-MONE;/* DECREMENT 0388 00939000 * SYSTEM COUNT @YA01572*/ 00940000 LH @12,PVTCNTFX(,PVTPTR) 0388 00941000 BCTR @12,0 0388 00942000 STH @12,PVTCNTFX(,PVTPTR) 0388 00943000 * END; 0389 00944000 * END; /* END NON-SQA PROCESSING */ 00945000 * END; /* END SQA/LSQA PROCESSING */ 00946000 * ELSE 0392 00947000 * ; /* PAGE NOT SQA OR LSQA, CONTINUE*/ 00948000 @RF00361 DS 0H 0393 00949000 * END; /* END NO CREATE RELEASE PROC */ 00950000 * END; /* END NON-INPUT DEFERED RELEASE */ 00951000 * 0395 00952000 * /*************************************************************/ 00953000 * /* */ 00954000 * /* LSQA AND NORMAL PAGE FRAMES ARE FREED IN THIS SECTION AND */ 00955000 * /* THE PGTE FOR THE PAGE SET TO 0. PROCESSING WILL THEN */ 00956000 * /* CONTINUE WITH XPTE PROCESSING. */ 00957000 * /* */ 00958000 * /*************************************************************/ 00959000 * 0395 00960000 * RLPARMRG=PTEPTR; /* SET UP PGTE ADDR PARAMETER */ 00961000 @RC00334 LR RLPARMRG,PTEPTR 0395 00962000 * CALL EPPGINV; /* CALL PAGE INVALIDATION -- SEE 00963000 * ENTRY DCL FOR INTERFACE */ 00964000 L @15,PVTPINV(,PVTPTR) 0396 00965000 BALR @14,@15 0396 00966000 * PGTRSA=RLCLRPGT; /* SET PGTE TO ZERO, PRESERVING 00967000 * THE INVALID FLAG ALREADY SET */ 00968000 MVC PGTRSA(2,PTEPTR),RLCLRPGT 0397 00969000 * WSA6HIGH='1'B; /* SET FLAG TO SEND PFTE TO THE 00970000 * TOP OF THE AFQ */ 00971000 OI WSA6HIGH(PVTPTR),B'10000000' 0398 00972000 * WSA6TQID=PFTAFQN; /* SET TQID PARM TO AFQ Q ID */ 00973000 MVI WSA6TQID(PVTPTR),X'00' 0399 00974000 * RLPARMR0=WSA6PARM; /* LOAD PARM REG 0 WITH PRE-SET 00975000 * WORD IN WSA. RSN HAS BEEN SET 00976000 * PREVIOUSLY */ 00977000 L RLPARMR0,WSA6PARM(,PVTPTR) 0400 00978000 * CALL EPENQDEQ; /* CALL PFTE ENQ/DEQ TO SEND THE 00979000 * PFTE TO THE AFQ. REG 1 NOT SET 00980000 * UP BECAUSE PFTE ENQ/DEQ 0401 00981000 * DOESN'T USE. -- SEE ENTRY DCL 00982000 * FOR INTERFACE */ 00983000 L @15,PVTPFTE(,PVTPTR) 0401 00984000 BALR @14,@15 0401 00985000 * END; /* END IN-STORAGE SEGMENT */ 00986000 * 0403 00987000 * /*****************************************************************/ 00988000 * /* */ 00989000 * /* THE OUT OF STORAGE SEGMENT PROCESSES A VIRTUAL PAGE IF IT IS */ 00990000 * /* NOT IN STORAGE UPON ENTRY AT IEAVRELF. IT FIRST CHECKS FOR AND*/ 00991000 * /* PROCESSES THE SPECIAL OUT OF STORAGE DEFERED RELEASE ENTRY */ 00992000 * /* FROM PGFREE OR PAGE TERMINATION SERVICES IF IT EXISTS. */ 00993000 * /* OTHERWISE, NORMAL OUT OF STORAGE PROCESSING IS PERFORMED. THIS*/ 00994000 * /* SEGMENT CALLS THE Q SEARCH SUBROUTINE AND POSSIBLY THE GFA */ 00995000 * /* DEFER Q OR I/O ACTIVE Q'S PROCESSOR SUBROUTINES IF A FIXED PCB*/ 00996000 * /* IS FOUND BY THE Q SEARCH SUBROUTINE */ 00997000 * /* */ 00998000 * /*****************************************************************/ 00999000 * 0403 01000000 * ELSE 0403 01001000 * DO; 0403 01002000 * 0403 01003000 B @RC00332 0403 01004000 @RF00332 DS 0H 0404 01005000 * /*************************************************************/ 01006000 * /* */ 01007000 * /* CHECK FOR OUT-OF-STORAGE DEFERED RELEASE CONDITION THIS */ 01008000 * /* CONDITION EXISTS ONLY IF THE RSN (RBN) IN THE PGTE FOR THE*/ 01009000 * /* INPUT PAGE IS NOT ZERO AND THE ASID, VBN DATA IN THE PFTE */ 01010000 * /* INDEXED BY THE RSN MATCH THE INPUT ASID, VBN DATA. */ 01011000 * /* */ 01012000 * /*************************************************************/ 01013000 * 0404 01014000 * IF WSA6RSN^=MZERO THEN 0404 01015000 LH @12,WSA6RSN(,PVTPTR) 0404 01016000 N @12,@CF02622 0404 01017000 LTR @12,@12 0404 01018000 BZ @RF00404 0404 01019000 * DO; /* IF THE RSN OBTAINED FROM THE 01020000 * PGTE IS NOT ZERO, THE PFTE 0405 01021000 * MUST BE CHECKED */ 01022000 * IF PFTVBN=WSA6VBN THEN /* DO VBNS MATCH */ 01023000 CLC PFTVBN(2,PFTEPTR),WSA6VBN(PVTPTR) 0406 01024000 BNE @RF00406 0406 01025000 * DO; /* YES */ 01026000 * IF WSA6VBNASCBASID THEN/* CHECK ASIDS 01031000 * TO BE EQUAL */ 01032000 L @12,RSMASCB(,RSMHDPTR) 0410 01033000 CLC PFTASID(2,PFTEPTR),ASCBASID(@12) 0410 01034000 BNE @RT00410 0410 01035000 * GOTO LBNRMLCD;/* IF NOT SKIP PFTE PROCESSING */ 01036000 * ELSE 0412 01037000 * ; /* ASIDS ARE EQUAL, CONTINUE */ 01038000 * END; 0413 01039000 * ELSE 0414 01040000 * ; /* COMMON AREA VBN, NO ASID CHECK*/ 01041000 @RF00408 DS 0H 0415 01042000 * IF PFTDFRLS='1'B THEN/* IS DEFERED RELEASE PENDING */ 01043000 * 0415 01044000 TM PFTDFRLS(PFTEPTR),B'10000000' 0415 01045000 BNO @RF00415 0415 01046000 * /***************************************************/ 01047000 * /* */ 01048000 * /* THE REAL FRAME IS STILL ASSIGNED TO THE INPUT */ 01049000 * /* PAGE AND AN OUT-OF-STORAGE DEFERED RELEASE */ 01050000 * /* CONDITION IS TO BE PROCESSED */ 01051000 * /* */ 01052000 * /***************************************************/ 01053000 * 0416 01054000 * DO; 0416 01055000 * IF PFTFXCT=MZERO THEN/* IS FIX COUNT ZERO */ 01056000 LH @12,PFTFXCT(,PFTEPTR) 0417 01057000 LTR @12,@12 0417 01058000 BNZ @RF00417 0417 01059000 * DO; /* THE FIX COUNT IS ZERO */ 01060000 * PFTDFRLS='0'B;/* RESET THE DEFERED FLAG */ 01061000 NI PFTDFRLS(PFTEPTR),B'01111111' 0419 01062000 * RLPARMRG=WSA6VSA;/* SET UP THE CALL TO THE 0420 01063000 * SPECIAL VSM ENTRY POINT TO 0420 01064000 * NOTIFY VSM THAT THE PAGE IS 0420 01065000 * AVAILABLE. */ 01066000 L RLPARMRG,WSA6VSA(,PVTPTR) 0420 01067000 * IF WSA6VBNWSA6VBN THEN/* TEST VBN */ 01223000 CLC FOEVINDX(2,FOEPTR),WSA6VBN(PVTPTR) 0467 01224000 BNH @RF00467 0467 01225000 * DO; /* SEARCH TERMINATED WHEN A VBN 01226000 * GREATER THAN INPUT IS FOUND IN 01227000 * FOE */ 01228000 * FOEPTR=MZERO; 0469 01229000 SLR FOEPTR,FOEPTR 0469 01230000 * END; 0470 01231000 * ELSE /* VBN NOT GREATER THAN CURRENT */ 01232000 * DO; /* CHECK FOR EQUAL VBN'S */ 01233000 B @RC00467 0471 01234000 @RF00467 DS 0H 0472 01235000 * IF FOEVINDX=WSA6VBN THEN/* ARE VBNS 01236000 * EQUAL */ 01237000 CLC FOEVINDX(2,FOEPTR),WSA6VBN(PVTPTR) 0472 01238000 BNE @RF00472 0472 01239000 * DO;/* IF EQUAL, DECR FOE FIX CNT */ 01240000 * FOEFXCT=FOEFXCT-PCBFXC; 0474 01241000 LH @14,FOEFXCT(,FOEPTR) 0474 01242000 SLR @12,@12 0474 01243000 IC @12,PCBFXC(,PCBPTR) 0474 01244000 SLR @14,@12 0474 01245000 STH @14,FOEFXCT(,FOEPTR) 0474 01246000 * FOEPTR=MZERO; 0475 01247000 SLR FOEPTR,FOEPTR 0475 01248000 * END; 0476 01249000 * ELSE/* VBNS NOT EQUAL */ 01250000 * DO;/* CONTINUE SEARCH */ 01251000 B @RC00472 0477 01252000 @RF00472 DS 0H 0478 01253000 * FOEPTR=FOEFLINK;/* GET NEXT ADDR */ 01254000 L @14,FOEFLINK-1(,FOEPTR) 0478 01255000 LA @14,0(,@14) 0478 01256000 LR FOEPTR,@14 0478 01257000 * END; 0479 01258000 * END; 0480 01259000 @RC00472 DS 0H 0481 01260000 * END; /* END FOEPTR DO WHILE */ 01261000 @RC00467 DS 0H 0481 01262000 @DE00466 LTR FOEPTR,FOEPTR 0481 01263000 BNZ @DL00466 0481 01264000 * RESPECIFY 0482 01265000 * FOEPTR UNRESTRICTED; 0482 01266000 * END; /* END FOE PROCESSING */ 01267000 * ELSE 0484 01268000 * ; /* ROOT TCB ADDR WAS ZERO */ 01269000 @RF00462 DS 0H 0485 01270000 * END; /* END NON-ZERO FIX PROCESSING */ 01271000 * ELSE 0486 01272000 * ; /* PCB FIX COUNT WAS ZERO */ 01273000 @RF00460 DS 0H 0487 01274000 * PCBPTR=PCBRLPA; /* GET RELATED PCB ADDRESS */ 01275000 L @14,PCBRLPA-1(,PCBPTR) 0487 01276000 LA @14,0(,@14) 0487 01277000 LR PCBPTR,@14 0487 01278000 * END; /* END PCBPTR DO WHILE */ 01279000 @DE00459 LTR PCBPTR,PCBPTR 0488 01280000 BNZ @DL00459 0488 01281000 * RLPARMRG=RLRETPCB; /* SET UP PCB PARM FOR SUBGFADQ */ 01282000 LR RLPARMRG,RLRETPCB 0489 01283000 * RESPECIFY 0490 01284000 * (RLRETPCB, 0490 01285000 * PCBPTR) UNRESTRICTED; 0490 01286000 * CALL SUBGFADQ; /* CALL TO THE GFA DEFER Q SUBRTN 01287000 * TO PURGE ALL PCBS FOR THE VBN */ 01288000 BAL @14,SUBGFADQ 0491 01289000 * RLSAVPCB=0; /* SET TO ZERO SO XPTE PROCESSING 01290000 * DOES NOT LOOK AT A PCB WHICH 01291000 * MAY HAVE BEEN FREED @Z40WPYD*/ 01292000 SLR @12,@12 0492 01293000 ST @12,RLSAVPCB(,PVTPTR) 0492 01294000 * END; /* END GFA DEFER Q PROCESSING */ 01295000 * END; /* END PCB PROCESSING */ 01296000 * ELSE 0495 01297000 * ; /* NO PCB WAS RETURNED FROM 0495 01298000 * SUBRTN */ 01299000 @RF00442 DS 0H 0496 01300000 * PGTRSA=RLCLRPGT; /* FOR ALL OUT-OF-STORAGE CASES 01301000 * EXCEPT NEW DEFERED RELEASES, 01302000 * SET THE PGTE TO ZERO, 0496 01303000 * PRESERVING THE INVALID FLAG */ 01304000 MVC PGTRSA(2,PTEPTR),RLCLRPGT 0496 01305000 * END; /* END OUT-OF-STORAGE SEGMENT */ 01306000 * 0498 01307000 * /*****************************************************************/ 01308000 * /* */ 01309000 * /* THE XPTE PROCESSING SEGMENT ZEROES THE LPID VALUE IN THE XPTE */ 01310000 * /* FOR AN INPUT COMMON AREA PAGE, FREEING ANY AUXILIARY STORAGE */ 01311000 * /* ASSIGNED TO THE PAGE THAT CAN BE RELEASED. IT ALSO RESETS THE */ 01312000 * /* PROTECT KEY FIELD TO 0, FETCH PROCTECT, AND RESETS THE FLAGS */ 01313000 * /* TO ALL OFF POSITIONS */ 01314000 * /* */ 01315000 * /*****************************************************************/ 01316000 * 0498 01317000 *LBXPTPRC: 0498 01318000 * IF XPTPOINP='1'B THEN /* IS I/O IN PROGRESS FOR THIS 0498 01319000 * PAGE */ 01320000 @RC00332 DS 0H 0498 01321000 LBXPTPRC TM XPTPOINP(XPTEPTR),B'00100000' 0498 01322000 BNO @RF00498 0498 01323000 * DO; /* YES, I/O IS IN PROGRESS 0499 01324000 * @Z40WPYD*/ 01325000 * XPTDEFER='0'B; /* SET DEFER FLAG OFF SO QUEUE 0500 01326000 * SEARCH ROUTINE WILL SCAN I/O 01327000 * QUEUE @Z40WPYD*/ 01328000 NI XPTDEFER(XPTEPTR),B'11111101' 0500 01329000 * RLPARMRG=WSA6VBN; /* SET UP VBN FOR CALL @ZA13812*/ 01330000 SLR RLPARMRG,RLPARMRG 0501 01331000 ICM RLPARMRG,3,WSA6VBN(PVTPTR) 0501 01332000 * CALL SUBQSRCH; /* CALL THE QUEUE SEARCH ROUTINE 01333000 * @Z40WPYD*/ 01334000 BAL @14,SUBQSRCH 0502 01335000 * END; 0503 01336000 * ELSE 0504 01337000 * ; 0504 01338000 @RF00498 DS 0H 0505 01339000 * IF XPTXAV='1'B THEN /* IS AUX STORAGE ASSIGNED */ 01340000 TM XPTXAV(XPTEPTR),B'01000000' 0505 01341000 BNO @RF00505 0505 01342000 * DO; /* AUXILIARY STORAGE IS ASSIGNED 01343000 * @Z40WPYD*/ 01344000 * IF RLSAVPCB=0 THEN /* WAS A PCB FOUND WITH A 0507 01345000 * MATCHING VBN */ 01346000 L @12,RLSAVPCB(,PVTPTR) 0507 01347000 LTR @12,@12 0507 01348000 BNZ @RF00507 0507 01349000 * DO; /* YES @Z40WPYD*/ 01350000 * IF XPTVIOLP='0'B THEN /* MAY AUX STG BE FREED */ 01351000 TM XPTVIOLP(XPTEPTR),B'10000000' 0509 01352000 BNZ @RF00509 0509 01353000 * CALL SUBFRAUX; /* YES, GET STORAGE FREED 0510 01354000 * @Z40WPYD*/ 01355000 BAL @14,SUBFRAUX 0510 01356000 * ELSE 0511 01357000 * XPTLPID=''B; /* CLEAR THE LPID FIELD @Z40WPYD*/ 01358000 B @RC00509 0511 01359000 @RF00509 XC XPTLPID(8,XPTEPTR),XPTLPID(XPTEPTR) 0511 01360000 * END; 0512 01361000 * ELSE 0513 01362000 * DO; 0513 01363000 B @RC00507 0513 01364000 @RF00507 DS 0H 0514 01365000 * PCBPTR=RLSAVPCB; /* RESTORE PRIMARY PCB POINTER 0514 01366000 * @Z40WPYD*/ 01367000 L PCBPTR,RLSAVPCB(,PVTPTR) 0514 01368000 * IF PCBIOCMP='1'B THEN /* IS PCB MARKED I/O COMPLETE */ 01369000 TM PCBIOCMP(PCBPTR),B'00000001' 0515 01370000 BNO @RF00515 0515 01371000 * DO; /* YES, I/O IS COMPLETE @Z40WPYD*/ 01372000 * IF XPTVIOLP='0'B THEN/* MAY AUX STG BE FREED */ 01373000 TM XPTVIOLP(XPTEPTR),B'10000000' 0517 01374000 BNZ @RF00517 0517 01375000 * CALL SUBFRAUX; /* YES, GO CALL ASM TO FREE SLOT 01376000 * @Z40WPYD*/ 01377000 BAL @14,SUBFRAUX 0518 01378000 * ELSE 0519 01379000 * XPTLPID=''B; /* CLEAR XPTLPID FIELD @Z40WPYD*/ 01380000 B @RC00517 0519 01381000 @RF00517 XC XPTLPID(8,XPTEPTR),XPTLPID(XPTEPTR) 0519 01382000 * END; 0520 01383000 * ELSE /* PCB IS NOT MARKED I/O COMPLETE*/ 01384000 * DO; 0521 01385000 B @RC00515 0521 01386000 @RF00515 DS 0H 0522 01387000 * RFY 0522 01388000 * AIAPTR RSTD; 0522 01389000 * AIAPTR=ADDR(PCBAIA);/* GET ADDRESS OF AIA @Z40WPYD*/ 01390000 LA AIAPTR,PCBAIA(,PCBPTR) 0523 01391000 * AIAFRAUX='1'B; /* INDICATE TO ASM THAT SLOT MAY 01392000 * BE FREED WHEN I/O COMPLETES 0524 01393000 * @Z40WPYD*/ 01394000 OI AIAFRAUX(AIAPTR),B'10000000' 0524 01395000 * AIALSID2=XPTLSID2; /* COPY SECOND LSID INTO AIA. 0525 01396000 * THIS IS NECESSARY BECAUSE, 0525 01397000 * WHEN DUPLEXING, LSID2 MUST BE 01398000 * FREED. NOTE THAT IF THE 0525 01399000 * DUPLEXED COPY IS THE ONE BEING 01400000 * USED, THEN LSID2 HAS 0525 01401000 * PREVIOUSLY BEEN COPIED TO 0525 01402000 * LSID1 AND LSID2 IS ZERO 0525 01403000 * @Z40WPYD*/ 01404000 L @11,XPTLSID2(,XPTEPTR) 0525 01405000 ST @11,AIALSID2(,AIAPTR) 0525 01406000 * RFY 0526 01407000 * AIAPTR UNRSTD; 0526 01408000 * XPTLPID=''B; /* CLEAR XPTLPID FIELD @Z40WPYD*/ 01409000 XC XPTLPID(8,XPTEPTR),XPTLPID(XPTEPTR) 0527 01410000 * END; 0528 01411000 * END; 0529 01412000 * END; 0530 01413000 * ELSE 0531 01414000 * ; 0531 01415000 @RF00505 DS 0H 0532 01416000 * XPTFLAGS=MZERO; /* RESET 1ST BYTE OF XPTE FLAGS 01417000 * TO ZERO */ 01418000 @RC00505 MVI XPTFLAGS(XPTEPTR),X'00' 0532 01419000 * XPTFLAG2=MZERO; /* RESET 2ND BYTE OF XPTE FLAGS 01420000 * TO ZERO @Z40WPYD*/ 01421000 MVI XPTFLAG2(XPTEPTR),X'00' 0533 01422000 * XPTPROT=MKEY0FET; /* RESET THE XPTE KEY TO ZERO, 0534 01423000 * FETCH PROTECT */ 01424000 MVI XPTPROT(XPTEPTR),X'08' 0534 01425000 * 0535 01426000 * /*****************************************************************/ 01427000 * /* */ 01428000 * /* THE FREE SEGMENT PROCESSING SEGMENT CHECKS TO SEE IF THE ABOVE*/ 01429000 * /* PROCESSING HAS FREED THE LAST PAGE IN A SEGMENT (16 VIRTUAL */ 01430000 * /* PAGES). IF SO, A PAGE TABLE/EXTERNAL PAGE TABLE COMBINATION */ 01431000 * /* CAN BE FREED. IT IS DISCONNECTED FROM THE SEGMENT TABLE BY */ 01432000 * /* CALLING THE DESTROY SEGMENT FUNCTION OF RSM. THE ADDRESS OF */ 01433000 * /* THIS TABLE IS THEN RETURNED TO THE CALLER TO BE FREEMAINED. IT*/ 01434000 * /* CAN NOT BE FREEMAINED HERE BECAUSE FREEMAIN IS THE PRINCIPLE */ 01435000 * /* CALLER VIA THE IEAVRELV ENTRY POINT. THIS ACTION IS TAKEN ONLY*/ 01436000 * /* FOR PRIVATE AREA SEGEMTS. */ 01437000 * /* */ 01438000 * /*****************************************************************/ 01439000 * 0535 01440000 * IF WSA6VBN