TITLE 'IEAVEDSR - PROLOGUE' 00300002 * /* START OF SPECIFICATIONS **** 00301002 * 00302002 *01* MODULE-NAME = IEAVEDSR 00303002 * 00304002 *02* CSECT-NAME = IEAVEDSR 00305002 * 00306002 *01* DESCRIPTIVE-NAME = DISPATCHER RECOVERY 00307002 * 00308002 *01* COPYRIGHT = NONE 00309002 * 00310002 *01* STATUS = CHANGE LEVEL 0 00311002 * 00312002 *01* FUNCTION = RECOVERS FROM FAILURES IN THE DISPATCHER. 00313002 * 00314002 *02* OPERATION =THE DISPATCHER RECOVERY CALLS THE NECESSARY 00315002 * FUNCTIONS TO CLEAN UP THE DISPATCHING QUEUES AND THE CPU 00316002 * IN ORDER THAT THE DISPATCHER MAY CONTINUE TO DISPATCH 00317002 * READY WORK. 00318002 * 00319002 *01* NOTES = 00320002 * 00321002 *02* DEPENDENCIES = ORDER OF SAVING AND RESTORING STATUS IN THE 00322002 * DISPATCHER. SEE DISPATCHER RECOVERY SPECIFICATIONS FOR 00323002 * DETAILS. 00324002 * 00325002 *03* CHARACTER-CODE-DEPENDENCIES = CHARACTER CODE INDEPENDENT 00326002 * 00327002 *02* RESTRICTIONS = NONE 00328002 * 00329002 *02* REGISTER-CONVENTIONS = DEFINED IN THE EQUATES SECTION OF THIS 00330002 * MODULE 00331002 * 00332002 *02* PATCH-LABEL = NUCLEUS PATCH AREA 00333002 * 00334002 *01* MODULE-TYPE = PROCEDURE 00335002 * 00336002 *02* PROCESSOR = ASSEMBLER-370R 00337002 * 00338002 *02* MODULE-SIZE = SEE ESD FOR THIS MODULE 00339002 * 00340002 *02* ATTRIBUTES = NUCLEUS|SUPERVISOR MODE|REFRESHABLE|FIXED| 00341002 * ZERO PROTECT KEY|DISABLED 00342002 * 00343002 *01* ENTRY-POINT = IEAVEDSR 00344002 * 00345002 *02* PURPOSE = MAIN DISPATCHER RECOVERY ENTRY POINT. DISABLED, KEY 00346002 * ZERO, SUPERVISOR MODE AND ANY LOCK MIGHT BE HELD. 00347002 * 00348002 *02* LINKAGE = THE DISPATCHER RECOVERY IS ENTERED VIA A BRANCH. 00349002 * THE FOLLOWING PARAMETERS ARE PASSED TO IT: THE SDWA AND 00350002 * A 200 BYTE WORK AREA. THE ONLY CALLER IS THE SUPER 00351002 * RECOVERY ROUTINE, IEAVESPR. 00352002 * 00353002 *02* INPUT = THE DISPATCHER RECOVERY LOOKS AT INPUT REGISTERS 00354002 * AND THE LOCKS HELD BY THIS CPU. 00355002 * 00361002 *02* OUTPUT = THE DISPATCHER RECOVERY INSURES THE STATUS (REGS, 00362002 * FLOATING POINT REGISTERS, CPU INTERVAL TIMER VALUE, LOCKING 00363002 * STATUS AND PSW) OF THE UNIT BEING DISPATCHED. THE FOLLOWING 00364002 * READY QUEUES WILL BE VERIFIED AND CORRECTED IF REQUIRED IF THE 00366002 * DISPATCHER LOCK IS HELD: SERVICE MANAGER GLOBAL AND LOCAL 00367002 * STAGING QUEUES, THE LOCAL SERVICE PRIORITY LIST QUEUES AND THE 00368002 * ASCB READY QUEUE. IF THE DISPATCHER OBTAINED AND OWNED THE 00369002 * LOCAL LOCK AT TIME OF ERROR, THE TCB READY QUEUE AND THE 00370002 * EXIT EFFECTOR QUEUES (IF THEY HAVE STAGE 3 WORK) WILL BE 00371002 * VERIFIED AND CORRECTED. THE CPU LOCK HELD INDICATORS WILL BE 00372002 * UPDATED TO REFLECT THE CURRECT STATUS AND RECORDING OF 00373002 * SPECIFIC DISPATCHER DATA WILL BE DONE IN THE SDWA RECORD AREA. 00374002 * 00375002 *02* REGISTERS-SAVED = NONE 00376002 * 00377002 *02* REGISTER-USAGE = REG 9 - LCCA ADDRESS , REGISTER 8 - CURRENT 00378002 * ASCB ADDRESS, REGISTER 1 - SDWA ADDRESS, REGISTER 12 - BASE 00378702 * REGISTER. ALL OTHER USAGE VARIES AT DIFFERENT POINTS 00379402 * WITHIN THE MODULE. 00380102 * 00381002 *02* REGISTERS-RESTORED = NONE OF THE REGISTERS EXCEPT REGISTER 1 00382002 * RESTORED. REGISTER 15 WILL CONTAIN THE RETURN ADDRESS UPON 00383002 * RETURN TO IEAVESPR. 00384002 * 00390002 *01* EXIT-NORMAL = IEAVERTN, RETURN ADDRESS IN IEAVESPR. 00391002 * 00392002 *02* CONDITIONS = WHEN FUNCTION IS COMPLETE. 00393002 * 00394002 *02* OUTPUT = SDWA RECORDING AREA UPDATED, READY QUEUES IN 00395002 * DISPATCHABLE ORDER. 00395502 * 00397002 *02* RETURN-CODES = NONE 00398002 * 00399002 *01* EXIT-ERROR = NONE 00400002 * 00401002 *02* RETURN-CODES = NONE 00402002 * 00403002 *01* EXTERNAL-REFERENCES = 00404002 * IEAVETCB - ADDRES OF TCB CONTROL BLOCK VERIFICATION RTN 00405002 * 00413002 *02* ROUTINES = 00414002 * IEAVESCR - SCHEDULE RECOVERY 00415002 * REASON - VERIFY AND CORRECT ALL SRB QUEUES 00415902 * LINKAGE - BRANCH AND LINK R14,R15 00416802 * IEAVESRB - SRB CONTROL BLOCK VERIFICATION RTN 00417702 * REASON - VERIFY CURRENT SRB IS A VALID SRB 00418602 * LINKAGE - BRANCH AND LINK R14,R15 00419502 * IEAVETCB - TCB CONTROL BLOCK VERIFICATION RTN 00420402 * REASON - VERIFY CURRENT TCB IS VALID 00421302 * LINKAGE BRANCH AND LINK VIA REGISTERS 14,15 00422202 * IEAVEGAS - GENERAL ASCB CONTROL BLOCK VERIFICATION RTN 00423102 * REASON - VERIFY ALL ASCBS ON READY QUEUE ARE VALID 00424002 * LINKAGE - BRANCH AND LINK ON REGISTERS 14,15 00424902 * IEAVEQV3 - QUEUE VERIFICATION ROUTINE FOR DOUBLE THREAD QUEUES 00425802 * REASON - TO VERIFY AND CORRECT ASCB AND TCB READY 00426702 * QUEUES. 00427602 * LINKAGE - BRANCH AND LINK ON REGISTER 14,15 00430002 * IEAVEMS0 - MEMORY SWITCH 00431002 * REASON - TO CAUSE A SWITCH TO TOP OF READY QUEUE. 00432002 * LINKAGE - BRANCH AND LINK ON REGISTERS 14,15 00433002 * IEAVEEER - EXIT EFFECTOR RECOVERY RTN 00434002 * REASON - TO VERIFY AND CORRECT THE EXIT EFFECTOR QUEUES. 00435002 * LINKAGE - BRANCH AND LINK ON REGISTERS 14,15. 00436002 * IEAVSPCR - COMMON SUSPEND ROUTINE 00437002 * REASON - TO SUSPEND A SRB. 00438002 * LINKAGE - BRANCH AND LINK REGISTERS 15,12 00439002 * 00452002 *02* DATA-AREAS = SDWA DATA RECORDING AREA. 00457002 * 00457202 *02* CONTROL-BLOCKS = 00457402 * 1. PSA - W/R 00457602 * 2. LCCA - W/R 00457802 * 3. PCCA - R 00458002 * 4. CVT - R 00459002 * 5. ASCB - W/R 00460002 * 6. ASXB - R 00461002 * 7. TCB - W/R 00462002 * 8. RB - R 00463002 * 9. SDWA - W/R 00464002 * 10. SRB - R 00465002 * 11. SSRB - W/R 00466002 * 12. IHSA - W/R 00467002 * 13. CSD - W/R 00470002 * 14. SPL - W/R 00471002 * 15. WSAVT - R 00472002 * 00473002 *01* TABLES = WSACEDS0 - DISPATCHER'S REGISTER SAVE AREA. 00474002 * 00475002 *01* MACROS = 00476002 * 1. SETLOCK - OBTAIN AND RELEASE AND TEST OF VARIOUS LKS 00480002 * 2. SCHEDULE - SCHEDULE SRB TO LOCAL QUEUE 00482002 * 00486002 *02* SERIALIZATION = 00487002 * 1. GLOBAL DISPATCHER LOCK - SERIALIZE ON THE ASCB 00488002 * DISPATCHING QUEUE AND THE SPL QUEUES 00489002 * 2. LOCAL LOCK - SERIALIZE ON THE TCB DISPATCHING QUEUE 00490002 * 00492002 *01* CHANGE-ACTIVITY = SUPPORT CODES - Y02715,Y02751,Y02752 00493002 * 00494002 *01* MESSAGES = NONE 00495002 * 00496002 *01* ABEND-CODES = 00497002 * 00504002 **** END OF SPECIFICATIONS ***/ 00505002 */*IEAVEDSR: CHART DISPATCHER RECOVERY */ 00505202 */* HEADER 00505402 */* 00505602 */* 00506002 */* 00516002 */* ID: 3.1.8.2 00526002 */* DISPATCHER RECOVERY 00536002 */* PAGE # */ 00546002 */*IEAVEDSR: E IEAVEDSR */ 00556002 TITLE 'IEAVEDSR - DISPATCHER RECOVERY' 00561002 IEAVEDSR CSECT 00566002 R0 EQU 0 REGISTER 0 00600002 R1 EQU 1 REGISTER 1 00900002 R2 EQU 2 REGISTER 2 01200002 R3 EQU 3 REGISTER 3 01500002 R4 EQU 4 REGISTER 4 01800002 R5 EQU 5 REGISTER 5 02100002 R6 EQU 6 REGISTER 6 02400002 R7 EQU 7 REGISTER 7 02700002 R8 EQU 8 REGISTER 8 03000002 R9 EQU 9 REGISTER 9 03300002 R10 EQU 10 REGISTER 10 03600002 R11 EQU 11 REGISTER 11 03900002 R12 EQU 12 REGISTER 12 04200002 R13 EQU 13 REGISTER 13 04500002 R14 EQU 14 REGISTER 14 04800002 R15 EQU 15 REGISTER 15 05100002 XFF EQU X'FF' CONSTANT X'FF' 05400002 L3 EQU 3 LENGTH 3 05430002 L4 EQU 4 LENGTH 4 05460002 L8 EQU 8 LENGTH 8 05490002 L12 EQU 12 LENGTH 12 05520002 L16 EQU 16 LENGTH 16 05530002 L20 EQU 20 LENGTH 20 05550002 L24 EQU 24 LENGTH 24 05580002 L26 EQU 26 LENGTH 26 05610002 L72 EQU 72 LENGTH 72 05640002 ZERO EQU 0 ZERO VALUE 05700002 CMSLLOFF EQU 3 MASK FOR CMS & LOCAL LOCK BITS 06000002 FOUR EQU 4 06100002 HEXL4 EQU 4 LENGTH 4 06300002 D32 EQU 32 DISPLACEMENT X'20' 06330002 SPACE 2 06370002 */* P ESTABLISH ADDRESSABILITY */ 06440002 SPACE 2 06510002 BALR R12,R0 ESTABLISH BASE 06600002 USING *,R12 06900002 USING SDWA,R1 07200002 USING PSA,R0 07500002 DSRBASE DC 0H'0' 07600002 MODID BR=YES 07800002 SPACE 2 07870002 */* P RECORD IN SDWA THAT A DISPATCHER ERROR OCCURRED */ 07940002 SPACE 2 08010002 MVC SDWAMODN,DISPNAME INDICATE DISPATCHER MODULE 08100002 MVC SDWACSCT,DISPNAME INDICATE DISPATCHER CSECT 08400002 MVC SDWAREXN,DISPRECY INDICATE DISPATCHER RECOVERY 08700002 OI SDWADPVA,SDWAHEX INDICATE HEX DATA 09000002 L R9,PSALCCAV OBTAIN LCCA ADDRESS 09300002 L R8,PSAAOLD OBTAIN ASCB ADDRESS 09600002 USING LCCA,R9 09900002 USING ASCB,R8 10200002 LA R2,L'PSAHLHI+L'LCCASPLJ+L'ASCBLOCK+L'PSATOLD+L'ASCBSTOR+-10500002 L'PSAAOLD+HEXL4 LENGTH OF DATA RECORDED 11200002 SPACE 2 11400002 */* P RECORD PSAHLHI, ASCBLOCK, LCCASPLJ VALUES */ 11600002 SPACE 2 11800002 SR R3,R3 ZERO REGISTER 3 12000002 IC R3,SDWAURAL USER RECORDING LENGTH 12300002 LA R4,0(R2,R3) UPDATE RECD AREA LENGTH 12600002 STC R4,SDWAURAL SAVE NEW VALUE 12900002 LA R4,SDWAVRA GET POINTER TO RCD AREA 13200002 LA R10,0(R3,R4) LOCATE RECORD AREA 13500002 L R2,PSAHLHI CPU LOCKS HELD AT ENTRY 13800002 ST R2,0(R10) SAVE IN RECD AREA 14100002 L R2,ASCBLOCK GET LOCAL LOCK VALUE 14400002 ST R2,L4(R10) SAVE IN RECORDING AREA 14700002 L R2,LCCASPLJ OBTAIN SPL JOURNAL WORD 15000002 ST R2,L8(R10) SAVE IN RECORDING AREA 15300002 SPACE 2 15370002 */* P RECORD PSAAOLD, CR1, PSATOLD, DISP FLGS VALUES */ 15440002 SPACE 2 15510002 L R2,PSAAOLD OBTAIN AOLD VALUE 15600002 ST R2,L12(R10) SAVE IN RECORDING AREA 15900002 STCTL R1,R1,L16(R10) SAVE IN RECORDING AREA 15970002 L R2,PSATOLD OBTAIN TOLD VALUE 16040002 ST R2,L20(R10) SAVE IN RECORDING AREA 16110002 LH R2,LCCADSF1 OBTAIN DISPATCHER FLAGS 16200002 STH R2,L24(R10) SAVE IN RECORDING AREA 16500002 LR R13,R0 SAVE WORK AREA ADDR 16800002 * @Z40FPXJ 16800240 *NOTE - THIS CODE IS TO SUPPORT TCTL RECOVERY @Z40FPXJ 16800440 * @Z40FPXJ 16800640 SPACE 2 @Z40FPXJ 16801040 */* D (YES,,NO,DSRTSTLK) IS TCTL ACTIVE ? */ @Z40FPXJ 16804040 */* D (YES,,NO,DSRETURN) IS TCB VALID ? */ @Z40FPXJ 16807040 */* P (,DSRETURN) TURN OFF TCBACTIV AND ZERO CDAL ENTRY */ @Z40FPXJ 16810040 SPACE 2 @Z40FPXJ 16813040 L R2,PSACDAL GET CDAL PTR @Z40FPXJ 16816040 L R3,0(R2) GET 1ST CDAL ENTRY @Z40FPXJ 16817040 LTR R3,R3 IS TCTL ACTIVE ? @Z40FPXJ 16819040 BZ DSRTSTLK NO, CONTINUE WITH RECOV @Z40FPXJ 16822040 L R0,PSATOLD GET TCB ADDRESS @Z40FPXJ 16825040 L R15,ATCBVRTN GET CB VERIFY RTN ADDRESS @Z40FPXJ 16828040 BALR R14,R15 CALL CB VERIFY RTN @Z40FPXJ 16831040 LTR R15,R15 IS TCB VALID @Z40FPXJ 16834040 BNZ DSRETURN NO, EXIT TO CALLER @Z40FPXJ 16837040 LR R3,R0 GET TCB ADDR IN REG 2 @Z40FPXJ 16840040 NI TCBXSCT1-TCB(R3),XFF-TCBACTIV TURN OFF ACTIVE @Z40FPXJ 16842040 SLR R3,R3 ZERO REG 2 @Z40FPXJ 16844040 ST R3,0(R2) ZERO CDAL ENTRY @Z40FPXJ 16846040 B DSRETURN RETURN TO CALLER @Z40FPXJ 16852040 SPACE 2 16870002 */*DSRTSTLK: D (NO,DSRLLRTN,YES,) WAS DISPATCHER LOCK HELD ? */ 16940040 SPACE 2 17010002 DSRTSTLK DS 0H @Z40FPXJ 17050040 SETLOCK TEST,TYPE=DISP,BRANCH=(NOTHELD,DSRLLRTN) 17100002 L R15,ASCHRECV OBTAIN SCHEDULE RECOVERY RTN ADDR 17400002 LR R7,R12 SAVE BASE REG 17700002 SPACE 2 17770002 */* S IEAVESCR: INVOKE SCHEDULE RECOVERY FOR SRB QUEUES */ 17840002 SPACE 2 17910002 BALR R14,R15 CALL SCHEDULE RECOVERY RTN 18000002 LR R12,R7 RESTORE BASE REG 18300002 LR R13,R0 SAVE 72 BYTE SAVE AREA ADDR 18600002 L R0,LCCASPLJ OBTAIN SPL JOURNAL WORD VALUE 18900002 LTR R0,R0 WAS DISPATCHER PROCESSING A SRB 19200002 LR R11,R1 SAVE SDWA ADDRESS 19500002 SPACE 2 19570002 */* D (NO,DSRASCBR,YES,) SRB BEING PROCESSED ? */ 19640002 SPACE 2 19710002 BZ DSRASCBR NO PROCESS THE ASCB 19800002 SPACE 2 19870002 */* S IEAVESRB: VERIFY SRB CONTROL BLOCK */ 19940002 SPACE 2 20010002 L R15,ASCBVRTN OBTAIN CONTROL BLK VERIFICATION RTN 20100002 BALR R14,R15 CALL CONTROL BLOCK VERIFICATION RTN 20400002 SPACE 2 20470002 */* D (NO,DSR0SPLJ,YES,) WAS THIS VALID SRB ? */ 20540002 SPACE 2 20610002 LTR R15,R15 WAS THIS A GOOD SRB? 20700002 STH R15,L26(R10) SAVE THE RET CODE IN RECD AREA 21000002 BNZ DSR0SPLJ CLEAR THE SPL JOURNAL WORD 21300002 SPACE 2 21370002 */* D (NO,DSRSRBSC,YES,) WAS LOCAL LOCK OWNED ? */ 21440002 SPACE 2 21510002 L R2,ASCBLOCK OBTAIN VALUE IN LOCAL LOCK 21600002 LH R3,PSACPULA OBTAIN CPU LOGICAL ID 21900002 CR R2,R3 WAS LOCAL LOCK OWNED BY THIS CPU? 22200002 BNE DSRSRBSC NO LOCK, SCHEDULE SRB 22500002 SPACE 2 22570002 */* P PLACE SUSPEND ID IN LOCAL LOCK */ 22640002 SPACE 2 22710002 L R2,DSRSUPID OBTAIN THE SUSPEND ID 22800002 ST R2,ASCBLOCK PLACE SUSPEND ID IN LOCAL LK 23100002 SPACE 2 23170002 */*DSRSRBSC: P SCHEDULE SRB AT LOCAL LEVEL */ 23240002 SPACE 2 23310002 DSRSRBSC EQU * 23400002 L R1,LCCASPLJ SRB ADDR IN REG 1 23700002 SCHEDULE SRB=(1),SCOPE=LOCAL 24000002 SPACE 2 24070002 */*DSR0SPLJ: P ZERO OUT SRB JOURNAL WORD */ 24140002 SPACE 2 24210002 DSR0SPLJ EQU * 24300002 LA R1,ZERO ZERO REGISTER 1 24600002 ST R1,LCCASPLJ ZERO OUT SPL JOURNAL WORD 24900002 SPACE 2 24970002 */*DSRASCBR: S IEAVEMS0: ZERO PSAANEW IN CASE ASCB REMOVED */ 25040002 SPACE 2 25110002 DSRASCBR EQU * 25200002 LA R1,ZERO ZERO REGISTER 1 FOR MEMORY SW 25800002 L R15,AMEMSW OBTAIN MEMORY SWITCH ADDRESS 26100002 BALR R14,R15 CALL MEMORY SWITCH TO ZERO ANEWS 26400002 LR R0,R11 SET R0 TO SDWA ADDRESS 26700002 LA R1,L72(R13) SET UP QVPL ADDRESS 27000002 USING QVPL,R1 27300002 SPACE 2 27370002 */* P SET UP QVPL FOR ASCB C.B. VERIFICATION */ 27440002 SPACE 2 27510002 XC 0(QVPLSIZE,R1),0(R1) ZERO OUT QVPL 27600002 LA R3,DSRCBVR ADDR OF ASCB CB VERIFICATION RTN 27900002 ST R3,QVPLEVR PLACE IN QVPL 28200002 LA R3,QVPLSIZE(R1) ADDR OF WORK AREA 28500002 ST R3,QVPLWKA PLACE IN QVPL 28800002 LA R3,SDWARA-SDWA(R11) GET OUTPUT DATA AREA ADDR 29100002 ST R3,QVPLODA PLACE IN QVPL 29400002 LA R3,ASCBFWDP-ASCB OFFSET OF FORWARD PTR 29700002 STH R3,QVPLFPTR PLACE IN QVPL 30000002 L R4,CVTPTR LOCATE CVT 30300002 USING CVT,R4 30600002 LA R3,CVTASCBH GET HEADER VALUE 30900002 ST R3,QVPLHDR STORE IN QVPL 31200002 LA R3,CVTASCBL GET TRAILER VALUE 31500002 ST R3,QVPLTRLR STORE IN QVPL 31800002 LA R3,ASCBBWDP-ASCB OFFSET OF BACKWARD PTR 32100002 STH R3,QVPLBPTR STORE IN QVPL 32400002 LA R3,ZERO ZERO REG 3 32460002 IC R3,SDWAURAL-SDWA(R11) LOCATE USERS DATA LENGTH 32520002 LA R10,SDWAVRA-SDWA(R11) LOCATE REC DATA AREA 32580002 LA R10,0(R3,R10) LOCATE QV'S DATA AREA 32640002 SPACE 2 32650002 */* S IEAVEQV3: VERIFY ASCB READY QUEUE */ 32660002 SPACE 2 32670002 L R15,AQV3EP ADDRESS OF QUEUE VERIFICATION RTN 32700002 BALR R14,R15 CALL QUEUE VERIFICATION 33000002 LR R1,R11 RESTORE SDWA ADDR IN R1 33600002 *NOTE - IEAVEDSR IS DEPENDENT ON SUPER RECOVERY RTN FREEING ALL LOCKS 34200002 SPACE 2 34270002 */*DSRCPUXX: P CLEAN UP CPU */ 34340002 SPACE 2 34410002 DSRCPUXX EQU * 35700002 L R2,PSAPCCAV OBTAIN PCCA ADDR 36000002 USING PCCA,R2 PCCA ADDRESSABILITY 36300002 SPACE 2 36370002 */* D (NO,DSRCPUX1,YES,) DOES CPU HAVE GOOD CPU TIMER ? */ 36440002 SPACE 2 36510002 TM PCCAINTE,PCCANUIN IS THE TIMER OKAY? 36600002 BO DSRCPUX1 NO, BYPASS TIMER SETTING 36900002 SPACE 2 36970002 */* P SET CPU TIMER TO HIGH VALUE */ 37040002 SPACE 2 37110002 SPT CPUHITIM SET CPU TIMER TO HI VALUE 37200002 SPACE 2 37270002 */*DSRCPUX1: P TURN OFF SRB INDICATOR, ZERO PSATOLD */ 37340002 SPACE 2 37410002 DSRCPUX1 EQU * 37500002 NI LCCADSF2,XFF-LCCASRBM-LCCAGSRB TURN OFF SRB INDICATOR 37600002 LA R2,ZERO ZERO REGISTER 2 37800002 ST R2,PSATOLD ZERO OUT TOLD TO AVOID STATUS SAVE 38100002 ST R2,PSATNEW ZERO OUT TNEW 38400002 ST R2,LCCAITOD ZERO OUT ITOD 38430002 SPACE 2 38470002 */* P ZERO PSATNEW, CLEAR LOCK INDICATORS */ 38540002 SPACE 2 38610002 NI PSAHLHI+L3,XFF-CMSLLOFF TURN OFF CMS/LOCAL LOCK @ZA11858 38650000 SPACE 2 38770002 */*DSRETURN R RETURN TO IEAVESPR */ 38840040 SPACE 2 38910002 DSRETURN DS 0H @Z40FPXJ 38950040 L R15,ASUPRTNP RESTORE CALLERS RETURN ADDR 39000002 BR R15 RETURN TO SUPER RECOVERY ROUTINE 39300002 EJECT 39600002 SPACE 2 39601002 */*DSRCBVR: P CALLED BY QUEUE VERIFIER */ 39602002 SPACE 2 39603002 SPACE 2 39604002 */* P SAVE QUEUE VERIFIER'S REGISTERS */ 39605002 SPACE 2 39606002 DSRCBVR DC 0H'0' 39610002 L R2,PSALCCAV OBTAIN ADDR OF LCCA 39620002 L R3,LCCACPUS-LCCA(R2) OBTAIN DISP CPU RELATED SAVE AREA 39630002 L R4,WSACEDS0-WSAC(R3) ADDR OF DISPATCHER SAVE AREA 39640002 STM R8,R14,D32(R4) SAVE QUEUE VERIFIER'S REGS 8-14 39646002 SPACE 2 39652002 */* P ESTABLISH ADDRESSABILITY */ 39654002 SPACE 2 39656002 BALR R12,R0 ESTABLISH ADDRESSABILITY 39660002 USING *,R12 39670002 L R12,DSRBASEA OBTAIN OLD BASE ADDR 39680002 USING DSRBASE,R12 39690002 LR R9,R4 SAVE R4 FOR CALL TO CONT BLK VERFY 39700002 SPACE 2 39702002 */* S IEAVEGAS: VERIFY EACH ASCB */ 39704002 SPACE 2 39706002 L R15,AASCBCBR ADDRESS OF GENERAL ASCB C.B. VERIFY 39710002 BALR R14,R15 CALL CONTROL BLOCK VERIFICATION RTN 39720002 SPACE 2 39722002 */* D (NO,DSRBYNOQ,YES,) VALID ASCB WITH INVALID DATA ? */ 39724002 SPACE 2 39726002 C R15,DSRFOUR WAS RETURN CODE FOUR - VALID ASCB 39730002 * WITH INVALID DATA 39740002 BH DSRBYNOQ NOT R.C. 4 - DON'T MARK AS NOT ON Q 39750002 LR R6,R0 OBTAIN ADDRESS OF ASCB CB 39750202 BE DSRSTNOQ R.C. 4 SET NOT ON Q 39750402 TM ASCBDSP1-ASCB(R6),ASCBNOQ IS ASCB MARKED NOT ON Q 39750602 BNO DSRBYNOQ EVERYTHING IS OKAY 39750802 LA R15,FOUR INDICATE TO TAKE OFF Q 39751002 B DSRBYNOQ RETURN 39751202 SPACE 2 39752002 */*DSRSTNOQ: P MARK ASCB AS NOT ON QUEUE */ 39754002 SPACE 2 39756002 DSRSTNOQ EQU * 39760002 OI ASCBDSP1-ASCB(R6),ASCBNOQ INDICATE ASCB NOT ON Q 39770002 SPACE 2 39772002 */*DSRBYNOQ: R RETURN TO QUEUE VERIFIER */ 39774002 SPACE 2 39776002 DSRBYNOQ DC 0H'0' 39780002 LM R8,R14,D32(R9) RESTORE REGS 8-14 FOR RETURN 39790002 * TO QUEUE VERIFICATION ROUTINE 39800002 BR R14 RETURN TO QUEUE VERIFICATION 39810002 EJECT 45000002 *********************************************************************** 45300002 * THE FOLLOWING ROUTINE IS ENTERED IF THE DISPATCHER LOCK IS * 45600002 * NOT HELD. THIS ROUTINE CHECKS THE STATUS OF THE LOCAL LOCK * 45900002 * AND DETERMINES WHAT STATUS SAVING SHOULD BE PERFORMED * 46200002 * THE STAGE 3 EXIT EFFECTOR RECOVERY ROUTINE IS CALLED AND * 46500002 * THE TCB QUEUE MAY BE VERIFIED. * 46800002 *********************************************************************** 47100002 SPACE 2 47170002 */*DSRLLRTN: D (NO,DSRLLRT1,YES,) DID DISPATCHER OWN LOCAL LOCK */ 47240002 SPACE 2 47310002 DSRLLRTN EQU * 47400002 TM LCCADSF2,LCCADSPL DID THE DISP OBTAIN THE LL 47700002 BZ DSRLLRT1 LOCAL LOCK WASN'T OBTAINED BY DISP 48000002 SPACE 2 48070002 */* D (YES,DSRLLRTR,NO,) WAS THIS A DAT ERROR ? */ 48140002 SPACE 2 48210002 LH R2,SDWAFMID-SDWA(R1) OBTAIN DAT ERROR INDICATOR 48300002 LTR R2,R2 WAS THIS A DAT ERROR? 48600002 BNZ DSRLLRTR DAT ERROR WAS TAKEN 48900002 SPACE 2 49000002 */* D (NO,DSRLLRTR,YES,) CR1 MATCH ASCBSTOR ? */ 49100002 SPACE 2 49200002 CLC ASCBSTOR,L16(R10) WAS WAS CONTROL REGISTER 1 GOOD? 49500002 BNE DSRLLRTR GO RELEASE LOCAL LOCK 49700002 SPACE 2 49750002 */* S DSRTCBSS: SAVE STATUS IN TCB */ 49800002 SPACE 2 49850002 BAL R11,DSRTCBSS CALL COMMON STATUS SAVING RTN 49900002 SPACE 2 49950002 */*DSRLLRTS: D (NO,DSRLLRTT,YES,) DOES EXIT EFFECTOR HAVE READY WORK */ 50000002 SPACE 2 50050002 DSRLLRTS EQU * 50100002 TM ASCBFLG1,ASCBS3S DOES EXIT EFFECTOR HAVE READY WRK 50400002 BNO DSRLLRTT NO, BYPASS EXIT EFFECTOR RECY RTN 50700002 LR R0,R13 72 BYTE SAVE AREA 51000002 SPACE 2 51070002 */* S IEAVEEER: EXIT EFFECTOR RECOVERY */ 51140002 SPACE 2 51210002 L R15,AS3EEQVR ADDR OF S3EE RECOVERY RTN 51300002 LR R7,R12 SAVE BASE REG 51600002 BALR R14,R15 CALL S3EE RECOVERY ROUTINE 51900002 LR R12,R7 RESTORE BASE REG 52200002 LR R13,R0 RESTORE SAVE AREA ADDR 52500002 SPACE 2 52570002 */*DSRLLRTT: P SET UP QVPL FOR TCB QUEUE VERIFICATION */ 52640002 SPACE 2 52710002 DSRLLRTT EQU * 52800002 LR R0,R1 SAVE SDWA ADDR 53100002 LA R1,L72(R13) SET UP QVPL ADDRESS 53400002 USING QVPL,R1 53700002 XC 0(QVPLSIZE,R1),0(R1) ZERO OUT QVPL 54000002 L R3,ATCBVRTN ADDR OF TCB CB VERIFICATION RTN 54300002 ST R3,QVPLEVR PLACE IN QVPL 54600002 LA R3,QVPLSIZE(R1) ADDR OF WORK AREA 54900002 ST R3,QVPLWKA PLACE IN QVPL 55200002 LR R3,R0 GET OUTPUT DATA AREA ADDR 55500002 LA R3,SDWARA-SDWA(R3) OUTPUT DATA AREA ADDR 55800002 ST R3,QVPLODA PLACE IN QVPL 56100002 LA R3,TCBTCB-TCB OFFSET OF FORWARD PTR 56400002 STH R3,QVPLFPTR PLACE IN QVPL 56700002 L R4,ASCBASXB LOCATE THE ASXB 57000002 USING ASXB,R4 57300002 LA R3,ASXBFTCB GET HEADER VALUE 57600002 ST R3,QVPLHDR STORE IN QVPL 57900002 LA R3,ASXBLTCB GET TRAILER ADDR 58000002 ST R3,QVPLTRLR STORE IN QVPL 58500002 LA R3,TCBBACK-TCB OFFSET OF BACKWARD PTR 58800002 STH R3,QVPLBPTR STORE IN QVPL 59100002 SPACE 2 59170002 */* S IEAVEQV3: VERIFY TCB READY QUEUE */ 59240002 SPACE 2 59310002 L R15,AQV3EP QUEUE VERIFICATION ROUTINE 59400002 BALR R14,R15 CALL QUEUE VERIFICATION RTN 59700002 LR R1,R0 RESTORE SDWA ADDR 60000002 SPACE 2 60070002 */*DSRLLRTR: S IEAVELK: LLREL - RELEASE LOCAL LOCK */ 60140002 SPACE 2 60210002 DSRLLRTR EQU * 60300002 LR R15,R12 SAVE BASE REGISTER 60600002 SETLOCK RELEASE,TYPE=LOCAL,RELATED=('TCB READY QUEUE',IEAVEDS0-60900002 ,(DSLOCK)) 61200002 NI LCCADSF2,XFF-LCCADSPL TURN OFF DISP OBTAINED LL BIT 61500002 LR R12,R15 RESTORE BASE REGISTER 61800002 SPACE 2 61870002 */* P (,DSRCPUXX) CLEAN UP CPU */ 61940002 SPACE 2 62010002 B DSRCPUXX RETURN TO CPU CLEAN UP 62100002 EJECT 62400002 ********************************************************************** 62700002 * ROUTINE ENTERED IF DISPATCHER DIDN'T OBTAIN THE LOCAL LOCK * 63000002 ********************************************************************** 63300002 SPACE 2 63370002 */*DSRLLRT1: D (NO,DSRCPUXX,YES,) CR1 MATCH ASCBSTOR ? */ 63440002 SPACE 2 63510002 DSRLLRT1 EQU * 63600002 CLC ASCBSTOR,L16(R10) WAS WAS CONTROL REGISTER 1 GOOD? 63670002 BNE DSRCPUXX CONTROL REG1 NOT AOLD'S AVOID 63740002 * LOCAL MEMORY USAGE 63810002 SPACE 2 63812002 */* D (YES,DSRCPUXX,NO,) WAS THIS A DAT ERROR ? */ 63814002 SPACE 2 63816002 LH R3,SDWAFMID-SDWA(R1) WAS THIS A DAT ERROR? 63818002 LTR R3,R3 DAT ERROR? 63820002 BNZ DSRCPUXX YES, CLEAN UP CPU 63822002 SPACE 2 63830002 */* D (YES,DSRLLSUS,NO,) WAS CPUID IN LOCAL LOCK ? */ 63850002 SPACE 2 63870002 LH R2,PSACPULA OBTAIN LOGICAL CPU ID 63900002 C R2,ASCBLOCK WAS CPUID IN LOCAL LOCK? 64200002 BE DSRLLSUS YES, SUSPEND IT 64500002 SPACE 2 64570002 */* D (YES,DSRCPUXX,NO,) WAS SUSPEND ID IN LOCAL LOCK ? */ 64640002 SPACE 2 64710002 CLC ASCBLOCK,DSRSUPID WAS SUSPEND ID IN LOCAL LOCK? 64800002 BE DSRCPUXX YES, CLEAN UP CPU 65100002 SPACE 2 65170002 */* D (YES,DSRCPUXX,NO,) WAS INTERRUPT ID IN LOCAL LOCK ? */ 65240002 SPACE 2 65310002 CLC ASCBLOCK,DSRINTID WAS INTERRUPT ID IN LOCAL LOCK? 65400002 BE DSRCPUXX YES, CLEAN UP CPU 65700002 SPACE 2 65770002 */* D (YES,DSRCPUXX,NO,) WAS STATUS ALREADY SAVED ? */ 65840002 SPACE 2 65910002 L R3,PSATOLD OBTAIN TCB ADDR 66000002 LTR R3,R3 WAS VALUE ZERO? 66300002 BZ DSRCPUXX YES, CLEAN UP CPU 66600002 SPACE 2 67570002 */* S DSRTCBSS: SAVE TCB STATUS */ 67640002 SPACE 2 67710002 BAL R11,DSRTCBSS CALL TCB SAVE STATUS RTN 67800002 SPACE 2 67870002 */* P (,DSRCPUXX) CLEAN UP THE CPU */ 67940002 SPACE 2 68010002 B DSRCPUXX RETURN TO CLEAN UP CPU 68100002 ********************************************************************** 68400002 * THIS ROUTINE WILL INVOKE COMMON SUSPEND ROUTINE IF REQUIRED * 68700002 * AND PLACE THE INTERRUPT ID IN THE LOCAL LOCK. * 69000002 ********************************************************************** 69300002 SPACE 2 69370002 */*DSRLLSUS: D (YES,DSRLLINT,NO,) HAD STATUS BEEN SAVED ? */ 69440002 SPACE 2 69510002 DSRLLSUS EQU * 69600002 SETLOCK TEST,TYPE=LOCAL,BRANCH=(NOTHELD,DSRLLINT) 69900002 TM LCCADSF2,LCCASRBM IS THIS A SRB 70200002 BO DSRCPUXX CLEAN UP CPU 70500002 SPACE 2 70600002 */* P SAVE REGISTERS FOR COMMON SUSPEND RTN CALL */ 70700002 SPACE 2 70800002 STM R0,R15,0(R13) SAVE REGISTERS 71100002 L R7,PSALCCAV OBTAIN LCCA ADDR 71400002 LA R1,ZERO INDICATE NON-SRB 72000002 SPACE 2 72070002 */* S IEAVSPCR: SAVE STATUS IN IHSA */ 72140002 SPACE 2 72210002 L R12,ASPCRTN OBTAIN ADDR OF COMMON SUSPEND RTN 72300002 BALR R15,R12 GO SUSPEND SRB OR LL TCB 72600002 LM R0,R15,0(R13) RESTORE REGS 72900002 SPACE 2 72970002 */*DSRLLINT: P (,DSRCPUXX) PLACE INTERRUPT ID IN LOCAL LOCK */ 73040002 SPACE 2 73110002 DSRLLINT EQU * 73200002 L R2,DSRINTID OBTAIN INTERRUPT ID 73500002 ST R2,ASCBLOCK STORE INTO LOCAL LOCK 73800002 B DSRCPUXX GO CLEAN UP CPU 74100002 EJECT 74400002 ********************************************************************** 74700002 * THIS ROUTINE WILL SAVE STATUS IN TCB IF ITS VALID * 75000002 ********************************************************************** 75300002 SPACE 2 75370002 */*DSRTCBSS: S IEAVETCB: VERIFY TCB IS VALID */ 75440002 SPACE 2 75510002 DSRTCBSS EQU * 75600002 L R0,PSATOLD OBTAIN TCB ADDRESS 75900002 L R15,ATCBVRTN OBTAIN ADDRESS OF CONTROL BLOCK 76200002 * VERIFICATION ROUTINE 76500002 BALR R14,R15 CALL CONTROL BLOCK VERIFIER FOR TCB 76800002 LTR R15,R15 WAS CONTROL BLOCK GOOD? 77100002 SPACE 2 77170002 */* D (NO,DSRTCBOT,YES,) WAS TCB VALID ? */ 77240002 SPACE 2 77310002 BNZ DSRTCBOT TCB IS INVALID 77400002 L R2,DSRPREFX OBTAIN PREFIX VALUE 77700002 AR R2,R0 ADD TO TCB ADDRESS 78000002 USING TCBFIX,R2 78300002 SPACE 2 78370002 */* P SAVE FLOATING POINT REGISTERS */ 78440002 SPACE 2 78510002 STD R0,TCBFRS0 STORE FLOATING POINT REGISTERS 78600002 STD R2,TCBFRS2 STORE FLOATING POINT REGISTERS 78900002 STD R4,TCBFRS4 STORE FLOATING POINT REGISTERS 79200002 STD R6,TCBFRS6 STORE FLOATING POINT REGISTERS 79500002 L R3,PSATOLD OBTAIN TCB ADDRESS 79800002 USING TCB,R3 80100002 SPACE 2 80170002 */* P TURN OFF TCB ACTIVE AND ZERO CPUID */ 80240002 SPACE 2 80310002 NI TCBXSCT1,XFF-TCBACTIV TURN OFF TCB ACTIVE BIT @Z40FPXJ 80400040 LA R2,ZERO ZERO TCB 80700002 STH R2,TCBCCPVI CLEAR CPUID 81000002 L R3,ASCBCPUS OBTAIN CPU COUNT 81300002 SPACE 2 81370002 */* D (YES,DSRTCBOT,NO,) WAS CPU COUNT ZERO ? */ 81440002 SPACE 2 81510002 LTR R3,R3 WAS COUNT DECREMENTED? 81600002 BZ DSRTCBOT YES EXIT 81900002 SPACE 2 81970002 */*DSCSLOOP: P DECREMENT CPUS COUNT */ 82040002 SPACE 2 82110002 DSCSLOOP EQU * 82200002 LR R2,R3 DUPLICATE COUNT 82500002 BCTR R2,R0 DECREMENT COUNT BY 1 82800002 CS R3,R2,ASCBCPUS UPDATE CPUS COUNT 83100002 BNZ DSCSLOOP REPEAT VALUE HAS CHANGED 83400002 SPACE 2 83470002 */*DSRTCBOT: R RETURN BR R11 */ 83540002 SPACE 2 83610002 DSRTCBOT EQU * 83700002 BR R11 RETURN TO CALLER 84000002 */* FOOTING 84060002 */* 84120002 */* */ 84180002 */*IEAVEDSR: END DISPATCHER RECOVERY */ 84240002 EJECT 84300002 *********************************************************************** 84600002 * CONSTANTS & ADDRESSES * 84900002 *********************************************************************** 85200002 DS 0D 85500002 CPUHITIM DC X'7FFFFFFFFFFFFFFF' HI CPU TIME VALUE 85800002 DISPNAME DC C'IEAVEDS0' DISPATCHER MAINLINE ROUTINE 86100002 DISPRECY DC C'IEAVEDSR' DISPATCHER RECOVERY ROUTINE 86400002 DSRBASEA DC A(DSRBASE) ADDRESS OF BASE REG VALUE 86500002 DSRFOUR DC F'4' RETURN CODE FOUR CHECK 86600002 ASUPRTNP DC V(IEAVERTN) RETURN ADDR OF CALLER 86700002 ASCHRECV DC V(IEAVESCR) SCHEDULE RECOVERY ROUTINE 87000002 ASCBVRTN DC V(IEAVESRB) SRB CONTROL BLOCK VERIFICATION RTN 87300002 ATCBVRTN DC V(IEAVETCB) TCB CONTROL BLOCK VERIFICATION RTN 87600002 AASCBCBR DC V(IEAVEGAS) ASCB CB VERIFICATION ROUTINE 87900002 AMEMSW DC V(IEAVEMS0) ADDR OF MEMORY SWITCH RTN 88200002 ASPCRTN DC V(IEAVSPCR) COMMON SUSPEND ROUTINE 88500002 AQV3EP DC V(IEAVEQV3) ADDR OF QUEUE VERIFIER RTN 88800002 DSRPREFX DC A(-(TCB-TCBFRS)) TCB PREFIX DECREMENT VALUE 89100002 AS3EEQVR DC V(IEAVEEER) ADDR OF EXIT EFFECTOR RECOVERY RTN 89400002 DSRSUPID DC X'7FFFFFFF' SUSPEND ID 89700002 DSRINTID DC X'FFFFFFFF' INTERRUPT ID 90000002 IHAASCB 90300002 IHAASXB 90600002 IHASRB 90900002 IHALCCA 91200002 IHAQVPL 91500002 IHAPSA 91800002 IHASDWA 92100002 IHAQVOD 92400002 IHAPCCA 92700002 IHAWSAVT CLASS=CPU,DSECT=YES 92800002 IKJTCB 93000002 CVT DSECT=YES,LIST=NO 93300002 END IEAVEDSR 93600002